Generates a new still for this scene and attaches it. Charges one image
generation. Pass prompt to use a different description for this run;
it is saved as the scene's imagePrompt. Without it the scene's stored
imagePrompt is used, and a scene with neither is a 400.
The scene's rendered clip and the stitched video are cleared, since both are now stale.
UGC videos (subType: ugc) reuse one character image across every
scene, so a per-scene regeneration does not apply and is refused with
409 warning-invalid-input.
Authorization
bearerAuth An API key created under Settings > API & Webhooks. Keys start with sf_live_.
In: header
Path Parameters
The scene's id, as returned in the scenes array.
Header Parameters
Unique key per action (a UUID works well). Reusing it replays the first response instead of running the action again, so a retry after a timeout can never generate, render, publish or charge twice.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/videos/string/scenes/string/image" \ -H "Content-Type: application/json" \ -d '{ "prompt": "A founder closing a laptop at dawn, soft window light, shot on 35mm" }'{ "data": { "id": "n1a2b3", "imagePrompt": "A founder closing a laptop at dawn, soft window light, shot on 35mm", "animationPrompt": "Slow push in, dust in the light", "narration": "Most founders do not burn out from working too much.", "voiceDescription": "Calm, low, unhurried", "duration": 6, "status": "DRAFT", "imageUrl": "https://cdn.shortfast.com/uploads/scenes/n1a2b3-2.jpg", "videoUrl": null }}Redraw one B-roll's image POST
Draws a new image for this B-roll in the video's style and attaches it, like "Describe this scene" in the editor. Pass `prompt` to say what the scene should show: it is saved as the B-roll's `prompt`. Without it the image is drawn again from the stored `prompt`, or from the line of script the B-roll covers. This charges one AI image (`GET /reference/credit-costs`), so send an `Idempotency-Key` when retrying. A refused or failed drawing leaves the B-roll as it was. Only videos whose `imageStyle` draws every scene can redraw one: `realistic` or a fixed art style, without `animateBRolls`. On `mixed`, `stock_footage` and `animated` videos a still would replace footage or a clip, so they are refused with `409` `warning-invalid-input`, as is a B-roll carrying a talking presenter. The rendered video keeps the old image until it is rendered again.
Replace the b-roll segments PUT
Replaces the whole b-roll timeline. Send a bare JSON array or wrap it as `{ "bRolls": [ ... ] }`. Only the brief fields travel on the wire: `id`, `startMs`, `endMs`, `text`, `prompt`, `keywords` and `mediaType`. The resolved media (the chosen file, its quality variants) and the editor styling (animation, transition, layout, scale, sound effect) are read-only, and are carried over from the stored segment with the same `id`. A segment whose id is unknown is new and starts with no media. Cap: 500 segments per request. Changing what a segment should show does not re-fetch its media on its own: requeue generation with `addBRolls: true` for that.