GuidesHow to Use Seedance 2.0 Fast in Claude Code and Cursor?
Makernice Team · ·
Prices as of November 12, 2026 (price list v15).
Key takeaways
- Seedance 2.0 Fast has a single output resolution, 720p, so requests from Claude Code or Cursor leave the resolution field out; a 5-second clip is $0.5136 at price list v15 (November 12, 2026).
- Sending a resolution to Seedance 2.0 Fast is refused as invalid parameters before any job is created, because the model has a fixed resolution.
- Seedance 2.0 Fast keeps the same four modes as Seedance 2.0, 4 to 15 seconds per clip and up to 9 reference images.
- Each prompt variation is its own generate call with its own request_id, and each one is priced and capped separately by max_cost_usd.
Yes. Seedance 2.0 Fast works inside Claude Code and Cursor once the Makernice MCP server is connected: the agent gets a price from estimate_cost, you approve it, and generate runs the clip without going past the max_cost_usd you accepted. Fast renders at one resolution, 720p, and a 5-second clip costs $0.5136 (price list v15, November 12, 2026).
Which steps connect Claude Code and Cursor to Makernice?
For Claude Code, copy the claude mcp add --transport http --scope user makernice line together with the server URL from the Claude Code guide, run it in a terminal, then type /mcp inside Claude Code and finish the sign-in in your browser. The --scope user flag makes the server available in every project, which suits people who open many repos.
For Cursor, the Cursor guide has an Add to Cursor link and a JSON snippet for ~/.cursor/mcp.json. After either one, open Cursor's MCP settings and sign in next to makernice. If the tools don't show up in chat, reload the MCP servers and look again.
Seedance 2.0 Fast without an editor: Claude and ChatGPT connectors
If you would rather ask for Seedance 2.0 Fast in a chat window than in an IDE, Claude and ChatGPT can reach the same Makernice tools. Claude takes the server as a custom connector (how to add it). ChatGPT on the web takes it as a custom MCP server with OAuth sign-in, on plans or workspaces that permit those, and points at its own server address (how to add it); that version leaves out get_topup_link. Nothing else changes for Seedance 2.0 Fast: the assistant gets a quote from estimate_cost, which does not reserve the amount, passes the figure you approve to generate as max_cost_usd, and fetches the finished clip with check_job.
How do you write a text-to-video request for Seedance 2.0 Fast?
A Seedance 2.0 Fast text-to-video request needs mode t2v and a prompt of up to 4,000 characters, with an optional duration from 4 to 15 seconds and an optional aspect_ratio; it takes no resolution, because every clip renders at 720p. Describe one shot with one subject, one action and one camera move, as the text-to-video prompt guide shows.
Fast suits the loop where you rewrite a prompt three or four times to get the motion right. Each rewrite is a separate job, so the agent prices it, you confirm, and it runs. Here is the third take of an office shot:
You: Third try at the paper airplane shot: this time it should loop once before landing on the keyboard. What will it cost?
Cursor checks the new prompt with estimate_cost. Notice there is no resolution in the input:
{
"name": "estimate_cost",
"arguments": {
"input": {
"model": "seedance-2.0-fast",
"mode": "t2v",
"prompt": "A paper airplane glides between rows of office desks, sunlight through tall windows, it loops once and lands on a keyboard, tracking shot",
"duration": 5,
"aspect_ratio": "16:9"
}
}
}Cursor: That's $0.5136 for 5 seconds of Seedance 2.0 Fast at 720p, price list v15. Go?
You: Go.
Cursor then calls generate with the same input. The request_id names the take, so takes one, two and three never get mixed up:
{
"name": "generate",
"arguments": {
"input": {
"model": "seedance-2.0-fast",
"mode": "t2v",
"prompt": "A paper airplane glides between rows of office desks, sunlight through tall windows, it loops once and lands on a keyboard, tracking shot",
"duration": 5,
"aspect_ratio": "16:9"
},
"max_cost_usd": "0.5136",
"request_id": "paper-plane-office-take-3"
}
}At that moment Makernice quotes the input once more. A quote at or under max_cost_usd, and inside the connection's per-job limit, creates the job and charges that quote; anything above is refused with no job. Retrying an identical call with the same request_id returns the same job, while the next take needs a new id.
To collect the clip, the agent calls check_job with the returned job_id, optionally with wait_s (55 at most) so the call waits for the result. The finished MP4 is in outputs[0].url, a signed link valid for 24 hours; call check_job again for a fresh one. A queued take you no longer want can be stopped with cancel_job, which releases the held amount in full, but only before generation starts.
What changes when a model has only one resolution?
Most video models let you pick a resolution. Seedance 2.0 Fast does not: every clip comes out at 720p and is billed at $0.1027 per second (price list v15, November 12, 2026). Leave resolution out of the request entirely. If the agent adds it anyway, Makernice answers with invalid parameters and names the field, and nothing is charged. When you need 1080p, switch to Seedance 2.0, which offers 720p and 1080p; the Seedance 2.0 Fast vs Seedance 2.0 comparison sets the two side by side.
Everything else matches Seedance 2.0: 4 to 15 seconds (5 by default), text-to-video, image-to-video, first and last frame, and reference-to-video with up to 9 images. Audio is always included. Details are on the Seedance 2.0 Fast model page.
| Say this | The agent sets |
|---|---|
| Same shot, new wording | a new prompt and a new request_id |
| Fill the motion between two stills | mode flf, image_url and last_image_url |
| Let the frame follow my images | aspect_ratio adaptive (first and last frame only) |
| Make it 10 seconds | duration 10, priced per second |
| Keep my mascot consistent | mode r2v with up to 9 reference_images |
| Higher resolution | no field to change: Fast stays at its single tier |
Can Seedance 2.0 Fast animate an image you already have?
Yes. Seedance 2.0 Fast turns a still into a clip in image-to-video mode (mode i2v with the picture in image_url), and it fills the motion between two stills in first and last frame mode (mode flf with image_url and last_image_url). First and last frame accepts these ratios: adaptive, 21:9, 16:9, 4:3, 1:1, 3:4, 9:16; adaptive follows the shape of your images.
The images go in as public https links (JPEG, PNG or WebP, 10 MB at most) with the shorter side at least 300 px and the longer side no more than 6000 px; local paths don't work over MCP, and video input isn't accepted. An example estimate for the frame-to-frame version of the shot:
{
"name": "estimate_cost",
"arguments": {
"input": {
"model": "seedance-2.0-fast",
"mode": "flf",
"prompt": "The paper airplane unfolds itself into a flat sheet that drifts onto the desk",
"image_url": "https://example.com/frames/plane-flying.png",
"last_image_url": "https://example.com/frames/sheet-on-desk.png",
"duration": 6,
"aspect_ratio": "adaptive"
}
}
}How the first frame and the end frame steer the motion is covered in image-to-video and first and last frame.
Seedance 2.0 Fast errors and how to answer them
When Makernice says no, the agent receives readable text and nothing has been created or billed. Column one is the server's internal name for the refusal; column two is the opening of the returned message.
| Refusal | What the tool returns | What to do |
|---|---|---|
invalid_request | "Invalid parameters" | Usually a resolution sent to a fixed-resolution model or a duration out of range; remove or correct the field the message names |
price_exceeds_max_cost | "which exceeds max_cost_usd" | The take got longer than the one you approved; estimate the new length and confirm |
request_id_conflict | "This request_id was already used with different parameters." | A rewritten prompt is a new request: give it a new request_id |
concurrency_limit_reached | "Too many jobs are running for this account right now." | Several takes are in flight; wait for one to finish |
not_cancelable | "This job has already started generating and can no longer be canceled." | Let the take finish; only queued jobs can be canceled |
