Configuration — pre-filled from + written back to the request spec
VideoThe ConfigStage round-trips the production-level spec. Its controls are seeded from generationSpec.{method, model, config} on the request — each spec-derived control carries a from request spec tag — and on Save any change is written back to the request via patchMediaRequest. This is distinct from the per-clip prompt snapshot. Planner locks (target duration / aspect) still win.
Saved
This stage is a round-trip on the request's
generationSpec. The Media Request that spawned this video arrived with a production spec — method (frames vs ingredients), model (Higgsfield), and a config block (resolution · quality · genre · aspect · art-direction · target-duration). Every control below is pre-filled from it. Editing & Saving patches the request back so the whole production stays in sync — and every clip inherits these defaults.
Model & generation
live Higgsfield catalog · seeded from generationSpec · every clip inherits these defaults
Frames-to-video
Ingredients-to-video
Pre-filled Ingredients from generationSpec.method · also drives each clip's video roles (start/end vs image/video/audio).
generationSpec.model = higgsfield/seedance-2.0. Changing the model here re-writes model on the request when you Save — the constrained settings below re-derive from the new model.
480p
720p
1080p
config.resolution = 720
Standard
Fast
config.quality = standard
Auto
Cinematic
Realistic
Vibrant
Mono
config.genre = auto
9:16
16:9
1:1
from Seedance 2.0
9:16 from planner
The spec carried config.aspect = 9:16, but the planner brief lock is authoritative — it pins 9:16 and the other ratios stay disabled. The lock is not overwritten on Save.
Pre-filled from
config.artDirection · folded into every clip's generation prompt alongside the brand & approach · re-written to the request on Save.
These are defaults for every clip — you can still override the model & settings on an individual clip in Per-clip work. Per-clip overrides live on the clip, not the request spec.
Target duration
planner lock wins over spec
15s
15s
from planner
1 clip
15s ÷ 15s (Seedance 2.0 max) = 1
— short video fits one clip. Longer videos split into more.
The spec may have proposed config.targetDuration, but like aspect this is a planner lock (15s from the brief) — the stepper is held and the value is never patched back onto the request from here.
Writes back to the request on Save
Saving this stage doesn't just persist the production locally — it round-trips the production-level spec back onto the Media Request via
patchMediaRequest({ generationSpec: { method, model, config } }).
So the request and the production never drift: re-open the request, re-run the planner, or spin a sibling production and they all read the same method · model · config.
This is the request-scoped write path — separate and distinct from the per-clip prompt snapshot that pins each clip's composed VIDEO prompt for Generate clip.
Production spec · round-trips here
Save on this stage →
patchMediaRequest writes generationSpec.method, .model & .config back to the request.
Scope = the whole production. Every clip inherits it as a default.
Per-clip prompt snapshot · NOT here
The composed & refined VIDEO prompt pins to a per-clip snapshot in Stage 4 (Per-clip work) — it lives on the clip, runs Generate clip, and does not touch the request spec.
Planner locks (target duration, aspect) are read-only here and are excluded from the patchMediaRequest payload — they remain owned by the brief, so the round-trip never clobbers a lock.
Seeded from the request spec · Save round-trips
method · model · config back via patchMediaRequest (locks excluded).