Seedance 2.0 JSON Schema for Structured Prompt Output: Complete Reference
Seedance 2.0 defines a strict JSON Schema in schemas/prompt-spec.schema.json that enforces 11 required fields—including sequence_relation, opening_state_source, and natural_language_prompt—to ensure every generation prompt contains complete sequencing metadata and role-based reference handling.
The Prompt Specification schema governs how all structured prompts must be formatted before submission to the Seedance generation engine. Located in the Emily2040/seedance-2.0 repository, this JSON Schema 2020-12 draft serves as the contract between client applications and the video generation pipeline, standardizing everything from clip sequencing logic to exclusion management.
Core Schema Requirements
Every valid prompt must satisfy the schema defined in [schemas/prompt-spec.schema.json](https://github.com/Emily2040/seedance-2.0/blob/main/schemas/prompt-spec.schema.json). The root type is object with no optional fields at the top level.
Required Fields
| Field | Type | Description |
|---|---|---|
project_id |
string | Unique identifier for the parent project |
clip_id |
string | Unique identifier for this specific clip |
prompt_version |
string | Semantic version of the prompt schema (e.g., 2.0.0) |
sequence_relation |
enum | Relationship to preceding clips: standalone, sequence_first_clip, seamless_continuation, intentional_next_shot, bridge_between_known_states, repair_tail, reanchor_after_drift |
generation_mode |
string | Processing mode: typically standard or draft |
reference_roles |
array[string] | Roles providing reference material (e.g., director, cinematographer) |
opening_state_source |
enum | How the initial frame state is determined: planned_start_state, observed_end_state, user_supplied_final_frame, source_clip |
current_clip_action |
string | Description of intended action for this clip |
endpoint |
string | Target generation endpoint URL or identifier |
completed_beat_exclusions |
array[string] | Beat identifiers that must not be regenerated |
reserved_future_exclusions |
array[string] | Beat identifiers reserved for future generation |
natural_language_prompt |
string (minLength: 1) | Human-readable generation instructions |
The schema enforces minLength: 1 on natural_language_prompt to prevent empty submissions. All arrays contain homogeneous string items with no additional constraints on the values themselves.
Sequence Relation Enum Values
The sequence_relation field controls how Seedance 2.0 handles temporal continuity between clips:
standalone— Independent clip with no sequential dependenciessequence_first_clip— Opening clip of a multi-clip sequenceseamless_continuation— Strict continuity from previous clip's end stateintentional_next_shot— Deliberate cut or perspective changebridge_between_known_states— Interstitial clip connecting two established statesrepair_tail— Corrective generation replacing a failed previous endingreanchor_after_drift— Recovery generation when sequence coherence degrades
Opening State Source Options
The opening_state_source enum determines frame initialization:
| Value | Use Case |
|---|---|
planned_start_state |
Pre-defined storyboard or shot list state |
observed_end_state |
Actual rendered output from previous clip |
user_supplied_final_frame |
Custom reference image provided by user |
source_clip |
Direct extraction from existing source material |
JSON Schema Examples
Minimal Valid Prompt (Standalone Clip)
{
"project_id": "proj-1234",
"clip_id": "clip-01",
"prompt_version": "2.0.0",
"sequence_relation": "standalone",
"generation_mode": "standard",
"reference_roles": ["director", "cinematographer"],
"opening_state_source": "planned_start_state",
"current_clip_action": "establish_scene",
"endpoint": "https://api.seedance.ai/v2/generate",
"completed_beat_exclusions": [],
"reserved_future_exclusions": [],
"natural_language_prompt": "Create a wide-angle opening shot of a bustling city at dawn."
}
As implemented in Emily2040/seedance-2.0, this is the smallest payload that passes schema validation—all 11 fields present with valid types and non-empty natural language content.
Sequential Continuation (Multi-Clip Sequence)
{
"project_id": "proj-1234",
"clip_id": "clip-02",
"prompt_version": "2.0.0",
"sequence_relation": "seamless_continuation",
"generation_mode": "standard",
"reference_roles": ["director"],
"opening_state_source": "observed_end_state",
"current_clip_action": "follow_character",
"endpoint": "https://api.seedance.ai/v2/generate",
"completed_beat_exclusions": ["beat-01"],
"reserved_future_exclusions": ["beat-04"],
"natural_language_prompt": "Continue following the protagonist as they enter the subway, maintaining the established lighting."
}
This example demonstrates exclusion management: completed_beat_exclusions prevents regeneration of beat-01, while reserved_future_exclusions protects beat-04 for later manual creation.
Draft Mode with Custom State Source
{
"project_id": "proj-5678",
"clip_id": "clip-07",
"prompt_version": "2.0.1",
"sequence_relation": "intentional_next_shot",
"generation_mode": "draft",
"reference_roles": ["editor", "storyboard_artist"],
"opening_state_source": "user_supplied_final_frame",
"current_clip_action": "transition_to_climax",
"endpoint": "https://api.seedance.ai/v2/generate",
"completed_beat_exclusions": ["beat-03", "beat-05"],
"reserved_future_exclusions": ["beat-09"],
"natural_language_prompt": "Generate a high-energy chase sequence that picks up immediately after the previous beat, emphasizing motion blur."
}
The draft generation mode reduces processing cost for iteration, while intentional_next_shot signals a deliberate discontinuity from the previous clip's visual flow.
Schema Validation and Tooling
The Seedance 2.0 repository provides several files to enforce and test the prompt specification:
| File | Purpose |
|---|---|
schemas/prompt-spec.schema.json |
Canonical schema definition |
schemas/generation-run.schema.json |
Parent schema wrapping one or more prompts |
validation/fixtures/prompt-spec.valid.json |
CI-tested valid example |
scripts/prompt_lint.py |
CLI validator for local development |
Run validation locally against the JSON Schema:
python scripts/prompt_lint.py --schema schemas/prompt-spec.schema.json --prompt my-prompt.json
The lint script loads the schema and uses a JSON Schema validator to report any missing required fields or type violations.
Integration with Generation Runs
Individual prompts conforming to this schema are embedded within larger generation run payloads. The schemas/generation-run.schema.json file defines the container structure that batches multiple prompts for pipeline execution, ensuring each element passes the prompt specification before submission to the rendering engine.
Summary
- Seedance 2.0 structured prompt output requires exactly 11 fields defined in
schemas/prompt-spec.schema.json - The
sequence_relationenum provides 7 values for continuity control, fromstandalonetoreanchor_after_drift opening_state_sourcedetermines frame initialization: planned, observed, user-supplied, or source-derivednatural_language_promptenforcesminLength: 1to prevent empty submissions- Exclusion arrays (
completed_beat_exclusions,reserved_future_exclusions) manage beat-level generation scope - Use
scripts/prompt_lint.pyfor local validation against the canonical schema
Frequently Asked Questions
What version of JSON Schema does Seedance 2.0 use?
Seedance 2.0 uses JSON Schema 2020-12 draft as specified in the $schema declaration of schemas/prompt-spec.schema.json. This modern draft supports advanced validation features while maintaining broad tooling compatibility.
Can I submit a prompt with partial fields?
No. All 11 fields are required at the schema level—there are no optional top-level properties. Omitting any field causes validation to fail in scripts/prompt_lint.py and rejection by the generation pipeline.
How do I prevent specific beats from being regenerated?
Populate the completed_beat_exclusions array with string identifiers for beats that must be preserved. For beats you plan to create manually later, use reserved_future_exclusions. Both arrays accept any string format your project uses for beat identification.
Where can I find a working example of a valid prompt?
The file validation/fixtures/prompt-spec.valid.json contains a CI-tested valid prompt that passes schema validation. Use this as a starting template, or run python scripts/prompt_lint.py against your own payloads to verify compliance before API submission.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →