Key points
- The $0.50 trial credit is enough for several hundred short roleplay turns, valid 7 days, no payment needed.
- Any front end that accepts an OpenAI-compatible endpoint works: set the base URL, key and model uncensored.
- Cost is driven by chat history length, not by reply length. Trim or summarise old turns.
- Fiction and roleplay for lawful adults only. Nothing involving minors, ever.
What free means here
There is no unlimited free chat on this service, and it is better to say so up front. What you get is a trial balance: after you sign up with Google, or with an email and password, you can claim $0.50 of trial credit with one click on the API key page. It is one per person, it is valid for 7 days, and it needs no payment. The trial key runs with 2 concurrent requests and 60 requests per minute, which is plenty for one person chatting.
That sounds small, but tokens are cheap. Input costs $0.15 per 1M tokens and output costs $0.50 per 1M. A typical roleplay turn with an 8,000-token prompt and a 300-token reply costs $0.00135, so $0.50 covers roughly 370 turns. For many people that is a full evening or several short stories, enough to decide whether the setup suits them before any money is involved.
When the trial runs out, you top up from $20 in any whole amount up to $500. Credit never expires, failed or refused requests are not charged, and there is no subscription to cancel. This site takes crypto only: USDT on TRC20 or USDC on Base.
Pick a front end
The API only speaks text over HTTP. You still need something to hold your characters, your chat history and your prompt template. Three common choices:
- SillyTavern. A local web app built for character chats, with lorebooks, personas and presets. It lets you add an OpenAI-compatible endpoint, which is exactly what this API is.
- Another chat client that exposes fields for a custom OpenAI-compatible URL. Look for settings called custom endpoint, proxy or OpenAI-compatible.
- Your own script. Fifty lines of Python give you full control over memory, prompts and cost. It is also the easiest way to see what you are actually sending.
If you are building an app and not just chatting, the same calls work from any OpenAI SDK. The quickstart in the docs lists the endpoints, headers and limits in one place.
Connect SillyTavern in five steps
- Create an account, open the API key page, claim the trial credit and copy your key.
- In SillyTavern, open the plug icon (API Connections) and set the API type to Chat Completion.
- Choose the source named Custom (OpenAI-compatible).
- Paste
https://api.uncensoredvideo.cc/v1into the custom endpoint field, your key into the key field, and typeuncensoredas the model ID. - Press Connect. A green status means the request to
GET /v1/modelsor a test message succeeded.
Menu labels shift between SillyTavern versions, so match the idea and not the exact wording. Before you blame the app, test the key from a terminal:
curl https://api.uncensoredvideo.cc/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"uncensored","messages":[{"role":"user","content":"Reply with the word ready."}]}'If curl works and the app does not, the problem is in the app's fields: a missing /v1, a stray space in the key, or the wrong model name.
Or write a small chat loop
A script is a good way to learn what roleplay costs, because you can print the token usage on every turn. This one keeps a persona prompt, trims history to the last 20 messages and streams the reply.
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.uncensoredvideo.cc/v1",
api_key=os.environ["API_KEY"],
)
system = (
"You are Mara, a dry-witted smuggler pilot in a space-opera story. "
"Stay in character, write in third person, keep replies under 150 words."
)
history = []
while True:
user = input("> ")
history.append({"role": "user", "content": user})
messages = [{"role": "system", "content": system}] + history[-20:]
stream = client.chat.completions.create(
model="uncensored",
messages=messages,
temperature=0.9,
top_p=0.95,
max_tokens=300,
stream=True,
stream_options={"include_usage": True},
)
reply = ""
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
piece = chunk.choices[0].delta.content
reply += piece
print(piece, end="", flush=True)
if chunk.usage:
print("\n[tokens in/out: %d/%d]" % (chunk.usage.prompt_tokens, chunk.usage.completion_tokens))
history.append({"role": "assistant", "content": reply})Watch the usage line. After a few dozen turns you will see the input count climb while the output stays flat. That is the number to manage.
Write a character prompt that holds up
Most roleplay problems start in the first prompt, not in the model. A good character prompt is short and specific. Name the character, give a voice in one or two sentences, describe the setting, and say how long replies should be. Then stop. Every extra rule is a token you pay for on every turn, and a long list of dos and don'ts tends to be followed less well than a clear example.
Compare two ways to describe the same pilot. The first says she is brave, funny, loyal and clever. That tells the model nothing it can act on. The second says she answers questions with a joke first and the truth second, never explains her past unless asked twice, and swears mildly when a ship part breaks. The second gives the model habits to repeat, and habits are what readers experience as personality.
Add one short example exchange of three or four lines. Models copy rhythm very well, so an example fixes length, tense and point of view without a separate rule. If you write in second person, show it. If you want narration in italics, show that too. Put the example in the system prompt or as the first messages of the history.
Finally, decide who controls the other characters. If you want the model to play a whole cast, say so. If you want it to play only one role, say that it must never write your character's words or actions. A stop sequence on your character's name backs this up at the API level.
What a roleplay turn costs
Each request resends the system prompt, the character description and the history, so input tokens grow as the chat gets longer. Here is the arithmetic for a 300-token reply, which costs 300 x $0.50 / 1,000,000 = $0.00015 on its own:
| Prompt size | Input cost | Cost per turn | Per 100 turns | Turns on $0.50 |
|---|---|---|---|---|
| 4,000 tokens | $0.0006 | $0.00075 | $0.075 | about 666 |
| 8,000 tokens | $0.0012 | $0.00135 | $0.135 | about 370 |
| 20,000 tokens | $0.0030 | $0.00315 | $0.315 | about 158 |
| 50,000 tokens | $0.0075 | $0.00765 | $0.765 | about 65 |
The reading is simple. A tight 8,000-token prompt is about 5.7 times cheaper than a 50,000-token one for the same number of turns. At the 8,000-token level, a $20 top-up pays for about 14,800 turns. Larger top-ups add a bonus: +5% from $50, +10% from $100 and +15% from $200, so $100 gives $110 of credit. See the pricing page for the full table.
Keep long stories cheap and coherent
The context window is 100,000 tokens, prompt plus reply, so you can load a lot. You rarely should. Long prompts cost more and give the model more text to lose track of. A few habits help:
- Summarise, then drop. Every 20 turns, ask the model for a 150-word summary of the story so far, keep it in the system prompt, and delete the old messages.
- Keep the character sheet short. A page of rules the model ignores is a page you pay for on every turn.
- Cap the reply.
max_tokensis optional, but a limit stops runaway replies and keeps pacing tight. - Tune sampling. Temperature around 0.8 to 1.0 suits fiction. If the model repeats phrases, raise the frequency or presence penalty a little. They are passed through.
- Use
stopsequences so the model does not write your lines for you, for example a stop on your character's name followed by a colon.
Fixed seeds are passed through as well, which helps when you want to replay a scene and compare two prompt versions.
Common problems and quick fixes
These are the issues people hit most often in long chats, with the setting that usually helps.
- The model speaks for you. Add a line to the system prompt, plus a stop sequence on your character's name.
- Replies grow longer every turn. The model copies the length of earlier replies. Lower
max_tokens, edit one long reply down by hand, and the pattern resets. - Repeated phrases. Raise temperature slightly, add a small presence or frequency penalty, and vary your own messages. The model mirrors what it sees.
- Forgotten details. Put facts that must survive, such as names, injuries and promises, in a short pinned note near the top of the prompt, and refresh it when the story changes.
- Flat tone. Give a stronger voice example. Tone comes from examples much more than from adjectives.
When something odd happens, print the full message list your script sends. Nine times out of ten the cause is visible in the prompt itself: a leftover instruction, a duplicated summary, or history that was not trimmed.
Limits and errors you may hit
A full key allows 8 concurrent requests and 300 requests per minute, the trial key 2 and 60. If you go over, the API returns HTTP 429. The error code rate_limited means too many requests per minute, and concurrency means too many at once. A 429 with a Retry-After: 5 header signals temporary overload, so wait five seconds and retry.
One detail catches people: a streamed request holds its concurrency slot until the stream finishes. If you click regenerate three times fast on a trial key, the third attempt can fail with concurrency. Wait for the stream to end or let the client retry after a short pause. Every response also carries X-Balance-USD, so your script can print the remaining balance after each turn.
A rule that does not change: the model is tuned to answer without content refusals for lawful adult use, and it will not write sexual content involving minors. Keep your stories on the right side of that line. Prompts are not used for training.
