Skip to content

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
  • Produced by: utility/dubbing_manifest → manifest
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
{
"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": []
}
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
}