RawFrame

From BytePlus ModelArk (Seedance)

Move Seedance video generation from the ModelArk API to RawFrame.

If you call Seedance through BytePlus ModelArk's video task API today, the move is mostly renaming fields. Both are asynchronous: you create a task, then check it until it's done.

What changes

  • One key for every model. Replace the ModelArk API key with a RawFrame key. The same request shape then works for Seedance and every other video model.
  • Prepaid credits. Generations are paid from your RawFrame balance, not your BytePlus account.
  • Outputs on our storage. Results are copied to our storage and returned as signed links that you can refresh for 30 days, rather than the provider's temporary video URL.
  • Webhooks and streaming. Besides polling, you can stream status or receive signed webhooks.

Requests

ModelArkRawFrame
POST {base}/contents/generations/tasksPOST https://api.rawframe.dev/v1/generations
model: a ModelArk model or endpoint idmodel: "bytedance/seedance-2.5"
content[] item { "type": "text", "text": ... }prompt
content[] item { "type": "image_url", "image_url": { "url": ... }, "role": "first_frame" }references: [{ "role": "first_frame", "url": ... }], or an upload_id
roles last_frame, reference_imagethe same role names
ratioparams.aspect_ratio
durationparams.duration_seconds
resolutionparams.resolution
seedparams.seed
generate_audioparams.audio
watermarkNot needed: we always request outputs without a watermark.
Other ModelArk fieldsprovider_options, passed through as is

Supported values for each parameter are on the Seedance 2.5 page. Unlike ModelArk, unsupported values are rejected before the job is created, with invalid_parameters.

Checking on it

ModelArkRawFrame
GET {base}/contents/generations/tasks/{id}GET /v1/generations/{id}, or the SDKs' waitForCompletion / wait_for_completion
task statusstatus: queued, submitting, running, finalizing, then succeeded, failed or canceled
content.video_urloutputs[0].url
errorerror.code (normalized, e.g. content_rejected) and error.message

Before and after

from rawframe import RawFrame

rf = RawFrame()
video = rf.generations.create_and_wait(
    model="bytedance/seedance-2.5",
    prompt="A paper boat drifting down a rain-soaked city gutter",
    references=[{"role": "first_frame", "url": "https://example.com/boat.png"}],
    params={"aspect_ratio": "16:9", "duration_seconds": 5},
)
print(video.outputs[0].url)

On this page