Credits and limits
What is free
Every read and every write spends nothing. Reads: projects, project, elements,
scene, quote, image_models, video_models, library, balance, credit_history,
recommend_model, what_works, job...; writes: create_project, add_element,
upload_link, write_scene, duplicate_scene, set_preferences, save_recipe. The
free edits -- reformat, trim_clip, assemble_clips -- run on the studio's own server
and spend nothing: each starts a job you follow with job (wait holds up to 15 seconds)
and makes a NEW item in the library, the source untouched. Writing the prompt happens in
this chat. Only generate_image, the effect tools and approve spend, each quoted first.
What costs credits
- A still:
generate_imageWITHOUTquote_tokendraws nothing and answers the quote: the credits (image_modelslists each model's at 1:1), the balance after it and aquote_token. The SAME call WITH that token starts the job. - An effect (
edit_image,remove_background,animate_still,camera_move,upscale_clip,add_soundorreframe_clip): the call WITHOUTquote_tokenruns nothing and answers the quote; the SAME call WITH its token starts the job (effects). - Keyframes: one still per shot.
quotesays how many are still to draw and the credits foreach;approvewithwhat="keyframes"and itstokensdraws them. - The clip: one render per shot still without a clip, priced by model, length and
frame.
quotelistsclip.renders(part, seconds, credits,token) and the total.approvewithwhat="clip", thosetokensand the sameprovider,model,frameanddurationrenders at exactly that price.
A token is good for one hour, for exactly that request, and once. Credit is held when the
job starts and released if the render fails; job follows it and scene shows what
landed. Credits are added in the studio, never here. Prices are in credits in every tool reply; repeat them as returned and never convert to money.
The balance, and where credits went
balance: what is available, what is held by renders in flight, the plan, and each credit lot with what is left and when it expires. Call it when the person asks what they have; never guess from an old quote.credit_history: every hold, charge, return, grant and expiry, newest first, each with what it was for and the balance it left. Pass the reply'snextasbeforeto page back. This answers "what did that cost me".quotealso returnsbalance,credits_neededandaffordablefor one scene; report those three plainly beside the price (price-and-render).
Draft first: a cheaper frame to check a take
Some models have a cheaper draft frame; video_models shows it where a model
has one. Drafting pays when not every take is kept:
recommend_modelwithdrafttrue ranks models with a draft frame first (the rest still appear), each with its reason and its credits at the model's default frame -- not the draft price;quoteprices the draft exactly.set_preferenceswithvideo_modelset to one of those models anddraft_firsttrue makesquote(called with no renderer choice) price the draft frame and say so inpreference; a value the catalogue lacks is refused.- Show the draft price, get the yes, then
approvewith the quote'stokensand renderer choice. A take they like is finished (upscaled) in the studio, not here.
Say the cost, then wait for the yes
Before any call that spends, say what it would cost from the quote, in credits beside the
balance, and WAIT for an explicit yes in this chat. Never approve on the person's behalf,
never spend twice, never pass a token or call approve on a guess. If affordable is
false, say so first and that credits are added in the studio, and make no call.
Refusals you will see (repeat them in their own words; never retry the same call)
insufficient_credits(needs,available): stop; nothing was charged. Sayneedsagainstavailableand that credits are added in the studio; pass on no link.already_usedon a token: the first call started the job; polljobfor it. Nothing new was charged; a new render needs a new quote and a new yes. A stale, expired or changed quote is refused the same way: quote again, show the new price, get a new yes.needs_referenceon a saved scene: it has no photos, so it waits as a draft scene. Add one (add_element,upload_link, or a ref fromelements) and save it again with itsscene_id. It cannot be priced.- A photo ref that is refused: it was not one
elementslisted for this person. Readelementsagain and use a ref exactly as listed. add_elementrefused: the address was not https, neither an image file nor a product page, or too large. Say which; ask for the picture itself (or give anupload_link).set_preferencesor a free edit refused: the value is not in the live catalogue (preferenceslists the choices), the range lay outside the clip, the clips' shapes differ (letterboxonassemble_clips), or the id was not onelibrarylisted.- "no scene N" / "no project N": the id is not one this person can see. Re-read
projectsor the project rather than retrying the id. - "no workspace yet": the person has not signed in at https://phantra.ai. One web sign-in creates the workspace; then reconnect.
rate_limited(HTTP 429): too many calls in one minute from this account. The response carriesRetry-Afterin seconds. Wait that long, then continue; do not loop on it. The limit is generous (over a hundred calls a minute) and only a tight loop reaches it: readsceneorjobon request.
What is never charged or changed through this connector
Nothing is posted or removed, no payment method is touched, and nothing is rendered or
drawn without a quote shown and a yes in this chat. Every edit makes a new item; rewriting
a scene with write_scene replaces the text it had, so show the new version and get a yes
first. Buying credits and changing a plan happen in the studio, never here.
