madoo.dubbing-manifest/v1
Madoo dubbing manifest — Auditable delivery manifest for a timeline-aware localized dubbing workflow.
| Reference | madoo.dubbing-manifest/v1 |
| Schema id | urn:madoo:schema:dubbing-manifest:v1 |
| Version | 1.0.0 |
| Served at | GET /api/v1/json-schemas/madoo.dubbing-manifest/v1 · MCP get_json_schema |
Where it appears
Section titled “Where it appears”- Produced by:
utility/dubbing_manifest→manifest
Fields
Section titled “Fields”| Field | Type | Required | Rules | Description |
|---|---|---|---|---|
schema |
"madoo.dubbing-manifest/v1" |
yes | ||
sourceLanguage |
string | yes | min length 2; max length 35 | |
targetLanguage |
string | yes | min length 2; max length 35 | |
master |
object | yes | no other fields | |
master.kind |
one of "video", "audio", "json" |
yes | ||
master.storageRef |
string | yes | min length 1; max length 2048 | |
master.mediaType |
string | yes | min length 1; max length 256 | |
master.durationMilliseconds |
integer or null | yes | ≥ 0; ≤ 21600000 | |
master.sha256 |
string or null | yes | pattern “^[a-f0-9]{64}$” | |
sourceCaptions |
object | yes | no other fields | |
sourceCaptions.schema |
"madoo.caption-track/v1" |
yes | ||
sourceCaptions.trackId |
string | yes | min length 1; max length 256 | |
sourceCaptions.language |
string or null | yes | min length 2; max length 35 | |
targetCaptions |
object | yes | no other fields | |
targetCaptions.schema |
"madoo.caption-track/v1" |
yes | ||
targetCaptions.trackId |
string | yes | min length 1; max length 256 | |
targetCaptions.language |
string or null | yes | min length 2; max length 35 | |
textToSpeechModel |
object | yes | no other fields | |
textToSpeechModel.provider |
string | yes | min length 1; max length 128 | |
textToSpeechModel.modelId |
string | yes | min length 1; max length 256 | |
textToSpeechModel.version |
string or null | yes | max length 128 | |
textToSpeechModel.profileVersion |
string | yes | min length 1; max length 64 | |
stemSeparationModel |
object or null | yes | ||
backgroundMode |
one of "separated", "provided", "none" |
yes | ||
speakerVoices |
array of objects | yes | min items 1; max items 32 | |
speakerVoices[].speaker |
string or null | yes | max length 256 | |
speakerVoices[].voice |
string | yes | min length 1; max length 512 | |
speakerVoices[].source |
one of "preset", "reference", "workflow" |
yes | ||
timelineAudio |
object | yes | no other fields | |
timelineAudio.kind |
one of "video", "audio", "json" |
yes | ||
timelineAudio.storageRef |
string | yes | min length 1; max length 2048 | |
timelineAudio.mediaType |
string | yes | min length 1; max length 256 | |
timelineAudio.durationMilliseconds |
integer or null | yes | ≥ 0; ≤ 21600000 | |
timelineAudio.sha256 |
string or null | yes | pattern “^[a-f0-9]{64}$” | |
finalAudio |
object | yes | no other fields | |
finalAudio.kind |
one of "video", "audio", "json" |
yes | ||
finalAudio.storageRef |
string | yes | min length 1; max length 2048 | |
finalAudio.mediaType |
string | yes | min length 1; max length 256 | |
finalAudio.durationMilliseconds |
integer or null | yes | ≥ 0; ≤ 21600000 | |
finalAudio.sha256 |
string or null | yes | pattern “^[a-f0-9]{64}$” | |
finalVideo |
object or null | yes | ||
cues |
array of objects | yes | max items 10000 | |
cues[].cueId |
string | yes | min length 1; max length 128 | |
cues[].iterationIndex |
integer | yes | ≥ 0; ≤ 9999 | |
cues[].sourceText |
string | yes | min length 1; max length 4000 | |
cues[].targetText |
string | yes | min length 1; max length 4000 | |
cues[].startMilliseconds |
integer | yes | ≥ 0; ≤ 21600000 | |
cues[].endMilliseconds |
integer | yes | ≥ 1; ≤ 21600000 | |
cues[].speaker |
string or null | yes | max length 256 | |
cues[].voice |
string | yes | min length 1; max length 512 | |
cues[].modelId |
string | yes | min length 1; max length 256 | |
cues[].generatedDurationMilliseconds |
integer | yes | ≥ 1; ≤ 21600000 | |
cues[].fittedDurationMilliseconds |
integer | yes | ≥ 1; ≤ 21600000 | |
cues[].fitAction |
string | yes | min length 1; max length 128 | |
cues[].status |
one of "completed", "warning", "failed", "skipped" |
yes | ||
cues[].warnings |
array of objects | yes | max items 256 | |
cues[].warnings[].code |
string | yes | min length 1; max length 128 | |
cues[].warnings[].message |
string | yes | min length 1; max length 1000 | |
cues[].warnings[].path |
string or null | yes | max length 500 | |
quality |
object | yes | no other fields | |
quality.passed |
boolean | yes | ||
quality.checkIds |
array of string | yes | max items 64 | |
quality.failedCheckIds |
array of string | yes | max items 64 | |
provenance |
object | yes | no other fields | |
provenance.builder |
"madoo.dubbing-manifest" |
yes | ||
provenance.version |
string | yes | min length 1; max length 64 | |
provenance.timelineTechnique |
object | yes | no other fields | |
provenance.timelineTechnique.name |
string | yes | min length 1; max length 128 | |
provenance.timelineTechnique.version |
string | yes | min length 1; max length 64 | |
provenance.timelineTechnique.engine |
string | yes | min length 1; max length 64 | |
provenance.timelineTechnique.engineVersion |
string | yes | min length 1; max length 128 | |
provenance.qualityTechnique |
object | yes | no other fields | |
provenance.qualityTechnique.name |
string | yes | min length 1; max length 128 | |
provenance.qualityTechnique.version |
string | yes | min length 1; max length 64 | |
warnings |
array of objects | yes | max items 256 | |
warnings[].code |
string | yes | min length 1; max length 128 | |
warnings[].message |
string | yes | min length 1; max length 1000 | |
warnings[].path |
string or null | yes | max length 500 |
Example
Section titled “Example”{ "schema": "madoo.dubbing-manifest/v1", "sourceLanguage": "en", "targetLanguage": "it", "master": { "kind": "video", "storageRef": "storage://master.mp4", "mediaType": "video/mp4", "durationMilliseconds": 5000, "sha256": null }, "sourceCaptions": { "schema": "madoo.caption-track/v1", "trackId": "track-en", "language": "en" }, "targetCaptions": { "schema": "madoo.caption-track/v1", "trackId": "track-it", "language": "it" }, "textToSpeechModel": { "provider": "fal", "modelId": "qualified-model", "version": null, "profileVersion": "v1" }, "stemSeparationModel": null, "backgroundMode": "provided", "speakerVoices": [{ "speaker": "speaker-0", "voice": "voice-reference-1", "source": "reference" }], "timelineAudio": { "kind": "audio", "storageRef": "storage://timeline.wav", "mediaType": "audio/wav", "durationMilliseconds": 5000, "sha256": null }, "finalAudio": { "kind": "audio", "storageRef": "storage://final.wav", "mediaType": "audio/wav", "durationMilliseconds": 5000, "sha256": null }, "finalVideo": { "kind": "video", "storageRef": "storage://final.mp4", "mediaType": "video/mp4", "durationMilliseconds": 5000, "sha256": null }, "cues": [{ "cueId": "cue-0001", "iterationIndex": 0, "sourceText": "Hello", "targetText": "Ciao", "startMilliseconds": 500, "endMilliseconds": 1700, "speaker": "speaker-0", "voice": "voice-reference-1", "modelId": "qualified-model", "generatedDurationMilliseconds": 1250, "fittedDurationMilliseconds": 1200, "fitAction": "tempo", "status": "completed", "warnings": [] }], "quality": { "passed": true, "checkIds": ["dubbing-timeline-integrity"], "failedCheckIds": [] }, "provenance": { "builder": "madoo.dubbing-manifest", "version": "1.0.0", "timelineTechnique": { "name": "madoo.audio-timeline", "version": "1.0.0", "engine": "ffmpeg", "engineVersion": "8.0.1" }, "qualityTechnique": { "name": "madoo.dubbing-delivery-quality", "version": "1.0.0" } }, "warnings": []}The complete schema
Section titled “The complete schema”madoo.dubbing-manifest/v1 (JSON Schema)
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "urn:madoo:schema:dubbing-manifest:v1", "title": "Madoo Dubbing Manifest v1", "description": "Auditable delivery manifest for a timeline-aware localized dubbing workflow.", "type": "object", "required": [ "schema", "sourceLanguage", "targetLanguage", "master", "sourceCaptions", "targetCaptions", "textToSpeechModel", "stemSeparationModel", "backgroundMode", "speakerVoices", "timelineAudio", "finalAudio", "finalVideo", "cues", "quality", "provenance", "warnings" ], "properties": { "schema": { "const": "madoo.dubbing-manifest/v1" }, "sourceLanguage": { "type": "string", "minLength": 2, "maxLength": 35 }, "targetLanguage": { "type": "string", "minLength": 2, "maxLength": 35 }, "master": { "$ref": "#/$defs/asset" }, "sourceCaptions": { "$ref": "#/$defs/captions" }, "targetCaptions": { "$ref": "#/$defs/captions" }, "textToSpeechModel": { "$ref": "#/$defs/model" }, "stemSeparationModel": { "oneOf": [ { "$ref": "#/$defs/model" }, { "type": "null" } ] }, "backgroundMode": { "type": "string", "enum": [ "separated", "provided", "none" ] }, "speakerVoices": { "type": "array", "minItems": 1, "maxItems": 32, "items": { "$ref": "#/$defs/speakerVoice" } }, "timelineAudio": { "$ref": "#/$defs/asset" }, "finalAudio": { "$ref": "#/$defs/asset" }, "finalVideo": { "oneOf": [ { "$ref": "#/$defs/asset" }, { "type": "null" } ] }, "cues": { "type": "array", "maxItems": 10000, "items": { "$ref": "#/$defs/cue" } }, "quality": { "$ref": "#/$defs/quality" }, "provenance": { "$ref": "#/$defs/provenance" }, "warnings": { "$ref": "#/$defs/warnings" } }, "$defs": { "asset": { "type": "object", "required": [ "kind", "storageRef", "mediaType", "durationMilliseconds", "sha256" ], "properties": { "kind": { "type": "string", "enum": [ "video", "audio", "json" ] }, "storageRef": { "type": "string", "minLength": 1, "maxLength": 2048 }, "mediaType": { "type": "string", "minLength": 1, "maxLength": 256 }, "durationMilliseconds": { "type": [ "integer", "null" ], "minimum": 0, "maximum": 21600000 }, "sha256": { "type": [ "string", "null" ], "pattern": "^[a-f0-9]{64}$" } }, "additionalProperties": false }, "captions": { "type": "object", "required": [ "schema", "trackId", "language" ], "properties": { "schema": { "const": "madoo.caption-track/v1" }, "trackId": { "type": "string", "minLength": 1, "maxLength": 256 }, "language": { "type": [ "string", "null" ], "minLength": 2, "maxLength": 35 } }, "additionalProperties": false }, "model": { "type": "object", "required": [ "provider", "modelId", "version", "profileVersion" ], "properties": { "provider": { "type": "string", "minLength": 1, "maxLength": 128 }, "modelId": { "type": "string", "minLength": 1, "maxLength": 256 }, "version": { "type": [ "string", "null" ], "maxLength": 128 }, "profileVersion": { "type": "string", "minLength": 1, "maxLength": 64 } }, "additionalProperties": false }, "speakerVoice": { "type": "object", "required": [ "speaker", "voice", "source" ], "properties": { "speaker": { "type": [ "string", "null" ], "maxLength": 256 }, "voice": { "type": "string", "minLength": 1, "maxLength": 512 }, "source": { "type": "string", "enum": [ "preset", "reference", "workflow" ] } }, "additionalProperties": false }, "cue": { "type": "object", "required": [ "cueId", "iterationIndex", "sourceText", "targetText", "startMilliseconds", "endMilliseconds", "speaker", "voice", "modelId", "generatedDurationMilliseconds", "fittedDurationMilliseconds", "fitAction", "status", "warnings" ], "properties": { "cueId": { "type": "string", "minLength": 1, "maxLength": 128 }, "iterationIndex": { "type": "integer", "minimum": 0, "maximum": 9999 }, "sourceText": { "type": "string", "minLength": 1, "maxLength": 4000 }, "targetText": { "type": "string", "minLength": 1, "maxLength": 4000 }, "startMilliseconds": { "type": "integer", "minimum": 0, "maximum": 21600000 }, "endMilliseconds": { "type": "integer", "minimum": 1, "maximum": 21600000 }, "speaker": { "type": [ "string", "null" ], "maxLength": 256 }, "voice": { "type": "string", "minLength": 1, "maxLength": 512 }, "modelId": { "type": "string", "minLength": 1, "maxLength": 256 }, "generatedDurationMilliseconds": { "type": "integer", "minimum": 1, "maximum": 21600000 }, "fittedDurationMilliseconds": { "type": "integer", "minimum": 1, "maximum": 21600000 }, "fitAction": { "type": "string", "minLength": 1, "maxLength": 128 }, "status": { "type": "string", "enum": [ "completed", "warning", "failed", "skipped" ] }, "warnings": { "$ref": "#/$defs/warnings" } }, "additionalProperties": false }, "quality": { "type": "object", "required": [ "passed", "checkIds", "failedCheckIds" ], "properties": { "passed": { "type": "boolean" }, "checkIds": { "type": "array", "maxItems": 64, "uniqueItems": true, "items": { "type": "string", "minLength": 1, "maxLength": 128 } }, "failedCheckIds": { "type": "array", "maxItems": 64, "uniqueItems": true, "items": { "type": "string", "minLength": 1, "maxLength": 128 } } }, "additionalProperties": false }, "provenance": { "type": "object", "required": [ "builder", "version", "timelineTechnique", "qualityTechnique" ], "properties": { "builder": { "const": "madoo.dubbing-manifest" }, "version": { "type": "string", "minLength": 1, "maxLength": 64 }, "timelineTechnique": { "type": "object", "required": [ "name", "version", "engine", "engineVersion" ], "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 128 }, "version": { "type": "string", "minLength": 1, "maxLength": 64 }, "engine": { "type": "string", "minLength": 1, "maxLength": 64 }, "engineVersion": { "type": "string", "minLength": 1, "maxLength": 128 } }, "additionalProperties": false }, "qualityTechnique": { "type": "object", "required": [ "name", "version" ], "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 128 }, "version": { "type": "string", "minLength": 1, "maxLength": 64 } }, "additionalProperties": false } }, "additionalProperties": false }, "warning": { "type": "object", "required": [ "code", "message", "path" ], "properties": { "code": { "type": "string", "minLength": 1, "maxLength": 128 }, "message": { "type": "string", "minLength": 1, "maxLength": 1000 }, "path": { "type": [ "string", "null" ], "maxLength": 500 } }, "additionalProperties": false }, "warnings": { "type": "array", "maxItems": 256, "items": { "$ref": "#/$defs/warning" } } }, "additionalProperties": false}