Skip to content

madoo.dubbing-manifest/v2

Madoo natural speech dubbing manifest — Delivery evidence with immutable plan, measured candidates and complete attempt history.

Reference madoo.dubbing-manifest/v2
Schema id urn:madoo:schema:dubbing-manifest:v2
Version 2.0.0
Served at GET /api/v1/json-schemas/madoo.dubbing-manifest/v2 · MCP get_json_schema
  • Produced by: utility/dubbing_manifest → manifest_v2
Field Type Required Rules Description
schema "madoo.dubbing-manifest/v2" 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
speechTiming object yes no other fields
speechTiming.schema "madoo.speech-timing-state/v1" yes
speechTiming.plan object yes no other fields
speechTiming.plan.schema "madoo.speech-timing-plan/v1" yes
speechTiming.plan.planId string yes pattern “^[a-f0-9]{64}$”
speechTiming.plan.organizationID integer yes ≥ 1; ≤ 9007199254740991
speechTiming.plan.workspaceID integer yes ≥ 1; ≤ 9007199254740991
speechTiming.plan.durationMilliseconds integer yes ≥ 50; ≤ 21600000
speechTiming.plan.sourceCaptions object yes no other fields
speechTiming.plan.sourceCaptions.schema "madoo.caption-track/v1" yes
speechTiming.plan.sourceCaptions.track_id string yes min length 1; max length 512
speechTiming.plan.sourceCaptions.language string yes min length 1; max length 64
speechTiming.plan.sourceCaptions.source_language string or null yes max length 64
speechTiming.plan.sourceCaptions.granularity string yes min length 1; max length 64
speechTiming.plan.sourceCaptions.cues array of objects yes min items 1; max items 10000
speechTiming.plan.sourceCaptions.generation object yes no other fields
speechTiming.plan.sourceCaptions.warnings array of objects yes min items 0; max items 10000
speechTiming.plan.targetCaptions object yes no other fields
speechTiming.plan.targetCaptions.schema "madoo.caption-track/v1" yes
speechTiming.plan.targetCaptions.track_id string yes min length 1; max length 512
speechTiming.plan.targetCaptions.language string yes min length 1; max length 64
speechTiming.plan.targetCaptions.source_language string or null yes max length 64
speechTiming.plan.targetCaptions.granularity string yes min length 1; max length 64
speechTiming.plan.targetCaptions.cues array of objects yes min items 1; max items 10000
speechTiming.plan.targetCaptions.generation object yes no other fields
speechTiming.plan.targetCaptions.warnings array of objects yes min items 0; max items 10000
speechTiming.plan.policy object yes no other fields
speechTiming.plan.policy.maximumRounds integer yes ≥ 1; ≤ 3
speechTiming.plan.policy.minimumSpeakingRate number yes ≥ 0.95; ≤ 1
speechTiming.plan.policy.maximumSpeakingRate number yes ≥ 1; ≤ 1.05
speechTiming.plan.policy.maximumFitRate number yes ≥ 1; ≤ 2
speechTiming.plan.policy.maximumCombinedRate number yes ≥ 1; ≤ 2
speechTiming.plan.policy.toleranceMilliseconds integer yes ≥ 1; ≤ 250
speechTiming.plan.cues array of objects yes min items 1; max items 10000
speechTiming.plan.cues[].cueId string yes min length 1; max length 128
speechTiming.plan.cues[].originalIndex integer yes ≥ 0; ≤ 9999
speechTiming.plan.cues[].sourceText string yes min length 1; max length 20000
speechTiming.plan.cues[].initialTranslation string yes min length 1; max length 20000
speechTiming.plan.cues[].speaker string or null yes max length 512
speechTiming.plan.cues[].startMilliseconds integer yes ≥ 0; ≤ 21600000
speechTiming.plan.cues[].endMilliseconds integer yes ≥ 50; ≤ 21600000
speechTiming.plan.cues[].contextBefore string or null yes max length 20000
speechTiming.plan.cues[].contextAfter string or null yes max length 20000
speechTiming.plan.elasticity object no other fields
speechTiming.plan.elasticity.maximumEndExtensionMilliseconds integer yes ≥ 1; ≤ 250
speechTiming.plan.elasticity.evidence object yes no other fields
speechTiming.plan.elasticity.windows array of objects yes max items 10000
speechTiming.plan.availableWindows object no other fields
speechTiming.plan.availableWindows.maximumEndExtensionMilliseconds integer yes ≥ 1; ≤ 2000
speechTiming.plan.availableWindows.safetyGapMilliseconds integer yes ≥ 20; ≤ 500
speechTiming.plan.availableWindows.windows array of objects yes max items 10000
speechTiming.completedRounds integer yes ≥ 0; ≤ 3
speechTiming.history array of objects yes min items 0; max items 30000
speechTiming.history[].schema "madoo.speech-timing-assessment/v1" yes
speechTiming.history[].candidate object yes no other fields
speechTiming.history[].candidate.planId string yes pattern “^[a-f0-9]{64}$”
speechTiming.history[].candidate.cueId string yes min length 1; max length 128
speechTiming.history[].candidate.round integer yes ≥ 1; ≤ 3
speechTiming.history[].candidate.text string yes min length 1; max length 20000
speechTiming.history[].candidate.audioStorageRef string yes max length 4096; pattern “^storage://[^?#\s]+$”
speechTiming.history[].candidate.audioSha256 string yes pattern “^[a-f0-9]{64}$”
speechTiming.history[].candidate.durationMilliseconds integer yes ≥ 1; ≤ 21600000
speechTiming.history[].candidate.speakingRate number yes ≤ 10; > 0
speechTiming.history[].candidate.modelId string yes min length 1; max length 256
speechTiming.history[].candidate.profileVersion string yes min length 1; max length 256
speechTiming.history[].candidate.voice string yes min length 1; max length 512
speechTiming.history[].candidate.hasAudibleSignal boolean yes
speechTiming.history[].candidate.headSilenceMilliseconds integer ≥ 0; ≤ 21600000
speechTiming.history[].candidate.tailSilenceMilliseconds integer ≥ 0; ≤ 21600000
speechTiming.history[].candidate.trimStartMilliseconds integer ≥ 0; ≤ 1000
speechTiming.history[].candidate.trimEndMilliseconds integer ≥ 0; ≤ 1000
speechTiming.history[].candidate.expectedMilliCredits integer yes ≥ 0; ≤ 9007199254740991

28 more fields are in the complete schema below.

{
"schema": "madoo.dubbing-manifest/v2",
"sourceLanguage": "en",
"targetLanguage": "it",
"master": {
"kind": "video",
"storageRef": "storage://org/ws/master.mp4",
"mediaType": "video/mp4",
"durationMilliseconds": 1000,
"sha256": null
},
"sourceCaptions": {
"schema": "madoo.caption-track/v1",
"trackId": "source",
"language": "en"
},
"targetCaptions": {
"schema": "madoo.caption-track/v1",
"trackId": "target",
"language": "it"
},
"textToSpeechModel": {
"provider": "fal",
"modelId": "turbo",
"version": null,
"profileVersion": "1"
},
"stemSeparationModel": null,
"backgroundMode": "provided",
"speakerVoices": [
{
"speaker": "speaker",
"voice": "Rachel",
"source": "preset"
}
],
"timelineAudio": {
"kind": "audio",
"storageRef": "storage://org/ws/timeline.wav",
"mediaType": "audio/wav",
"durationMilliseconds": 1000,
"sha256": null
},
"finalAudio": {
"kind": "audio",
"storageRef": "storage://org/ws/final.wav",
"mediaType": "audio/wav",
"durationMilliseconds": 1000,
"sha256": null
},
"finalVideo": {
"kind": "video",
"storageRef": "storage://org/ws/final.mp4",
"mediaType": "video/mp4",
"durationMilliseconds": 1000,
"sha256": null
},
"cues": [
{
"cueId": "cue-1",
"iterationIndex": 0,
"sourceText": "Hello",
"targetText": "Ciao",
"startMilliseconds": 0,
"endMilliseconds": 1000,
"speaker": "speaker",
"voice": "Rachel",
"modelId": "turbo",
"generatedDurationMilliseconds": 800,
"fittedDurationMilliseconds": 1000,
"fitAction": "pad",
"status": "completed",
"warnings": []
}
],
"quality": {
"passed": true,
"checkIds": [
"dubbing-timeline-integrity"
],
"failedCheckIds": []
},
"provenance": {
"builder": "madoo.dubbing-manifest",
"version": "2.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": [],
"speechTiming": {
"schema": "madoo.speech-timing-state/v1",
"plan": {
"schema": "madoo.speech-timing-plan/v1",
"planId": "df9f0828ea2c188dc4f90ef01e1c53ff04956e4f6f7199e1368bf01d54c18f7f",
"organizationID": 1,
"workspaceID": 2,
"durationMilliseconds": 1000,
"sourceCaptions": {
"schema": "madoo.caption-track/v1",
"track_id": "source",
"language": "en",
"source_language": null,
"granularity": "segment",
"cues": [
{
"id": "cue-1",
"start": 0,
"end": 1,
"text": "Hello",
"speaker": "speaker",
"speaker_scope": "track",
"kind": "speech",
"source_segment_ids": []
}
],
"generation": {
"normalizer": "fixture",
"version": "1",
"segment_count": 1,
"overlap_reconciled": false
},
"warnings": []
},
"targetCaptions": {
"schema": "madoo.caption-track/v1",
"track_id": "target",
"language": "it",
"source_language": null,
"granularity": "segment",
"cues": [
{
"id": "cue-1",
"start": 0,
"end": 1,
"text": "Ciao",
"speaker": "speaker",
"speaker_scope": "track",
"kind": "speech",
"source_segment_ids": []
}
],
"generation": {
"normalizer": "fixture",
"version": "1",
"segment_count": 1,
"overlap_reconciled": false
},
"warnings": []
},
"policy": {
"maximumRounds": 3,
"minimumSpeakingRate": 0.95,
"maximumSpeakingRate": 1.05,
"maximumFitRate": 1.1,
"maximumCombinedRate": 1.15,
"toleranceMilliseconds": 80
},
"cues": [
{
"cueId": "cue-1",
"originalIndex": 0,
"sourceText": "Hello",
"initialTranslation": "Ciao",
"speaker": "speaker",
"startMilliseconds": 0,
"endMilliseconds": 1000,
"contextBefore": null,
"contextAfter": null
}
]
},
"completedRounds": 1,
"history": [
{
"schema": "madoo.speech-timing-assessment/v1",
"candidate": {
"planId": "df9f0828ea2c188dc4f90ef01e1c53ff04956e4f6f7199e1368bf01d54c18f7f",
"cueId": "cue-1",
"round": 1,
"text": "Ciao",
"audioStorageRef": "storage://org/ws/audio.wav",
"audioSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"durationMilliseconds": 800,
"speakingRate": 1,
"modelId": "turbo",
"profileVersion": "1",
"voice": "Rachel",
"expectedMilliCredits": 100,
"hasAudibleSignal": true
},
"accepted": true,
"requiredFitRate": 1,
"paddingMilliseconds": 200,
"reason": "SPEECH_TIMING_ACCEPTED"
}
]
},
"speechTimingFits": [
{
"cueId": "cue-1",
"fittedAudioStorageRef": "storage://org/ws/fit.wav",
"report": {
"schema": "madoo.audio-processing-report/v1",
"operation": "fit_duration",
"profile": "natural_speech",
"effectiveParameters": {
"strategy": "natural_speech",
"minimumRate": 1,
"maximumRate": 1.1,
"preservePitch": true,
"preserveFormants": true,
"onOutOfRange": "fail",
"padPosition": "end",
"outputFormat": "wav"
},
"inputSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"before": null,
"after": null,
"actions": [
"Speech retained at natural rate; remaining slot filled with silence."
],
"operationMetrics": {
"originalDurationMilliseconds": 800,
"targetDurationMilliseconds": 1000,
"actualDurationMilliseconds": 1000,
"requestedRate": 1,
"appliedRate": 1,
"paddingMilliseconds": 200,
"paddingIsEstimated": false,
"trimmedMilliseconds": 0,
"outputSha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
},
"technique": {
"name": "madoo.ffmpeg-none-duration-fit",
"version": "1.0.0",
"engine": "ffmpeg",
"engineVersion": "8.0.1"
},
"warnings": []
}
}
]
}
madoo.dubbing-manifest/v2 (JSON Schema)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:madoo:schema:dubbing-manifest:v2",
"title": "Madoo natural speech dubbing manifest",
"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",
"speechTiming",
"speechTimingFits"
],
"properties": {
"schema": {
"const": "madoo.dubbing-manifest/v2"
},
"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"
},
"speechTiming": {
"$ref": "#/$defs/timing_state"
},
"speechTimingFits": {
"type": "array",
"minItems": 1,
"maxItems": 10000,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"cueId",
"fittedAudioStorageRef",
"report"
],
"properties": {
"cueId": {
"type": "string",
"minLength": 1
},
"fittedAudioStorageRef": {
"type": "string",
"pattern": "^storage://[^?#]+$"
},
"report": {
"title": "Madoo Audio Processing Report v1",
"description": "Versioned, explainable before/after envelope for an Audio Finishing transformation.",
"type": "object",
"required": [
"schema",
"operation",
"profile",
"effectiveParameters",
"inputSha256",
"before",
"after",
"actions",
"operationMetrics",
"technique",
"warnings"
],
"properties": {
"schema": {
"const": "madoo.audio-processing-report/v1"
},
"operation": {
"type": "string",
"enum": [
"loudness_normalize",
"fit_duration",
"duck",
"speech_enhance"
]
},
"profile": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"effectiveParameters": {
"type": "object",
"maxProperties": 64
},
"inputSha256": {
"type": [
"string",
"null"
],
"pattern": "^[a-f0-9]{64}$"
},
"before": {
"$ref": "#/$defs/fit_qualityReportOrNull"
},
"after": {
"$ref": "#/$defs/fit_qualityReportOrNull"
},
"actions": {
"type": "array",
"maxItems": 64,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 256
}
},
"operationMetrics": {
"type": "object",
"maxProperties": 64
},
"technique": {
"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
},
"warnings": {
"type": "array",
"maxItems": 128,
"items": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"message": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"path": {
"type": [
"string",
"null"
],
"maxLength": 500
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}
}
}
}
},
"$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"
}
},
"timing_warning": {
"type": "object",
"additionalProperties": false,
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"message": {
"type": "string",
"minLength": 1,
"maxLength": 20000
}
}
},
"timing_captionCue": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"start",
"end",
"text",
"speaker",
"speaker_scope",
"kind",
"source_segment_ids"
],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"start": {
"type": "number",
"minimum": 0,
"maximum": 21600
},
"end": {
"type": "number",
"minimum": 0,
"maximum": 21600
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 20000
},
"speaker": {
"type": [
"string",
"null"
],
"maxLength": 512
},
"speaker_scope": {
"type": [
"string",
"null"
],
"maxLength": 512
},
"kind": {
"const": "speech"
},
"source_segment_ids": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"maxItems": 10000,
"minItems": 0
}
}
},
"timing_captionTrack": {
"type": "object",
"additionalProperties": false,
"required": [
"schema",
"track_id",
"language",
"source_language",
"granularity",
"cues",
"generation",
"warnings"
],
"properties": {
"schema": {
"const": "madoo.caption-track/v1"
},
"track_id": {
"type": "string",
"minLength": 1,
"maxLength": 512
},
"language": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"source_language": {
"type": [
"string",
"null"
],
"maxLength": 64
},
"granularity": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"cues": {
"type": "array",
"items": {
"$ref": "#/$defs/timing_captionCue"
},
"maxItems": 10000,
"minItems": 1
},
"generation": {
"type": "object",
"additionalProperties": false,
"required": [
"normalizer",
"version",
"segment_count",
"overlap_reconciled"
],
"properties": {
"normalizer": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"version": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"segment_count": {
"type": "integer",
"minimum": 0,
"maximum": 10000
},
"overlap_reconciled": {
"type": "boolean"
}
}
},
"warnings": {
"type": "array",
"items": {
"$ref": "#/$defs/timing_warning"
},
"maxItems": 10000,
"minItems": 0
}
}
},
"timing_policy": {
"type": "object",
"additionalProperties": false,
"required": [
"maximumRounds",
"minimumSpeakingRate",
"maximumSpeakingRate",
"maximumFitRate",
"maximumCombinedRate",
"toleranceMilliseconds"
],
"properties": {
"maximumRounds": {
"type": "integer",
"minimum": 1,
"maximum": 3
},
"minimumSpeakingRate": {
"type": "number",
"minimum": 0.95,
"maximum": 1
},
"maximumSpeakingRate": {
"type": "number",
"minimum": 1,
"maximum": 1.05
},
"maximumFitRate": {
"type": "number",
"minimum": 1,
"maximum": 2
},
"maximumCombinedRate": {
"type": "number",
"minimum": 1,
"maximum": 2
},
"toleranceMilliseconds": {
"type": "integer",
"minimum": 1,
"maximum": 250
}
}
},
"timing_cue": {
"type": "object",
"additionalProperties": false,
"required": [
"cueId",
"originalIndex",
"sourceText",
"initialTranslation",
"speaker",
"startMilliseconds",
"endMilliseconds",
"contextBefore",
"contextAfter"
],
"properties": {
"cueId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"originalIndex": {
"type": "integer",
"minimum": 0,
"maximum": 9999
},
"sourceText": {
"type": "string",
"minLength": 1,
"maxLength": 20000
},
"initialTranslation": {
"type": "string",
"minLength": 1,
"maxLength": 20000
},
"speaker": {
"type": [
"string",
"null"
],
"maxLength": 512
},
"startMilliseconds": {
"type": "integer",
"minimum": 0,
"maximum": 21600000
},
"endMilliseconds": {
"type": "integer",
"minimum": 50,
"maximum": 21600000
},
"contextBefore": {
"type": [
"string",
"null"
],
"maxLength": 20000
},
"contextAfter": {
"type": [
"string",
"null"
],
"maxLength": 20000
}
}
},
"timing_plan": {
"type": "object",
"additionalProperties": false,
"required": [
"schema",
"planId",
"organizationID",
"workspaceID",
"durationMilliseconds",
"sourceCaptions",
"targetCaptions",
"policy",
"cues"
],
"properties": {
"schema": {
"const": "madoo.speech-timing-plan/v1"
},
"planId": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"organizationID": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"workspaceID": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"durationMilliseconds": {
"type": "integer",
"minimum": 50,
"maximum": 21600000
},
"sourceCaptions": {
"$ref": "#/$defs/timing_captionTrack"
},
"targetCaptions": {
"$ref": "#/$defs/timing_captionTrack"
},
"policy": {
"$ref": "#/$defs/timing_policy"
},
"cues": {
"type": "array",
"items": {
"$ref": "#/$defs/timing_cue"
},
"maxItems": 10000,
"minItems": 1
},
"elasticity": {
"$ref": "#/$defs/timing_elasticity"
},
"availableWindows": {
"$ref": "#/$defs/timing_availableWindows"
}
}
},
"timing_candidate": {
"type": "object",
"additionalProperties": false,
"required": [
"planId",
"cueId",
"round",
"text",
"audioStorageRef",
"audioSha256",
"durationMilliseconds",
"speakingRate",
"modelId",
"profileVersion",
"voice",
"expectedMilliCredits",
"hasAudibleSignal"
],
"properties": {
"planId": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"cueId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"round": {
"type": "integer",
"minimum": 1,
"maximum": 3
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 20000
},
"audioStorageRef": {
"type": "string",
"pattern": "^storage://[^?#\\s]+$",
"maxLength": 4096
},
"audioSha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"durationMilliseconds": {
"type": "integer",
"minimum": 1,
"maximum": 21600000
},
"speakingRate": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 10
},
"modelId": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"profileVersion": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"voice": {
"type": "string",
"minLength": 1,
"maxLength": 512
},
"hasAudibleSignal": {
"type": "boolean"
},
"headSilenceMilliseconds": {
"type": "integer",
"minimum": 0,
"maximum": 21600000
},
"tailSilenceMilliseconds": {
"type": "integer",
"minimum": 0,
"maximum": 21600000
},
"trimStartMilliseconds": {
"type": "integer",
"minimum": 0,
"maximum": 1000
},
"trimEndMilliseconds": {
"type": "integer",
"minimum": 0,
"maximum": 1000
},
"expectedMilliCredits": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
}
},
"timing_assessment": {
"type": "object",
"additionalProperties": false,
"required": [
"schema",
"candidate",
"accepted",
"requiredFitRate",
"paddingMilliseconds",
"reason"
],
"properties": {
"schema": {
"const": "madoo.speech-timing-assessment/v1"
},
"candidate": {
"$ref": "#/$defs/timing_candidate"
},
"accepted": {
"type": "boolean"
},
"requiredFitRate": {
"type": "number",
"minimum": 1,
"maximum": 432000
},
"paddingMilliseconds": {
"type": "integer",
"minimum": 0,
"maximum": 21600000
},
"reason": {
"enum": [
"SPEECH_TIMING_ACCEPTED",
"SPEECH_TIMING_REQUIRES_ADAPTATION",
"SPEECH_TIMING_NO_AUDIBLE_SIGNAL",
"SPEECH_TIMING_REFLOWED",
"SPEECH_TIMING_DEGRADED_REFLOW"
]
},
"targetDurationMilliseconds": {
"type": "integer",
"minimum": 0,
"maximum": 21600000
}
}
},
"timing_state": {
"type": "object",
"additionalProperties": false,
"required": [
"schema",
"plan",
"completedRounds",
"history"
],
"properties": {
"schema": {
"const": "madoo.speech-timing-state/v1"
},
"plan": {
"$ref": "#/$defs/timing_plan"
},
"completedRounds": {
"type": "integer",
"minimum": 0,
"maximum": 3
},
"history": {
"type": "array",
"items": {
"$ref": "#/$defs/timing_assessment"
},
"maxItems": 30000,
"minItems": 0
},
"deliveryPolicy": {
"description": "Stamped by the finalizing reconcile: the policy its delivery was selected with. Absent before finalization.",
"enum": [
"strict",
"best_effort"
]
}
}
},
"timing_silenceInterval": {
"type": "object",
"additionalProperties": false,
"required": [
"startMilliseconds",
"endMilliseconds"
],
"properties": {
"startMilliseconds": {
"type": "integer",
"minimum": 0,
"maximum": 21600000
},
"endMilliseconds": {
"type": "integer",
"minimum": 1,
"maximum": 21600000
}
}
},
"timing_deliveryWindow": {
"type": "object",
"additionalProperties": false,
"required": [
"cueId",
"startMilliseconds",
"endMilliseconds"
],
"properties": {
"cueId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"startMilliseconds": {
"type": "integer",
"minimum": 0,
"maximum": 21600000
},
"endMilliseconds": {
"type": "integer",
"minimum": 1,
"maximum": 21600000
}
}
},
"timing_availableWindows": {
"type": "object",
"additionalProperties": false,
"required": [
"maximumEndExtensionMilliseconds",
"safetyGapMilliseconds",
"windows"
],
"properties": {
"maximumEndExtensionMilliseconds": {
"type": "integer",
"minimum": 1,
"maximum": 2000
},
"safetyGapMilliseconds": {
"type": "integer",
"minimum": 20,
"maximum": 500
},
"windows": {
"type": "array",
"maxItems": 10000,
"items": {
"$ref": "#/$defs/timing_deliveryWindow"
}
}
}
},
"timing_elasticity": {
"type": "object",
"additionalProperties": false,
"required": [
"maximumEndExtensionMilliseconds",
"evidence",
"windows"
],
"properties": {
"maximumEndExtensionMilliseconds": {
"type": "integer",
"minimum": 1,
"maximum": 250
},
"evidence": {
"type": "object",
"additionalProperties": false,
"required": [
"referenceAudioStorageRef",
"referenceAudioSha256",
"durationMilliseconds",
"silence"
],
"properties": {
"referenceAudioStorageRef": {
"type": "string",
"pattern": "^storage://[^?#\\s]+$",
"maxLength": 4096
},
"referenceAudioSha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"durationMilliseconds": {
"type": "integer",
"minimum": 50,
"maximum": 21600000
},
"silence": {
"type": "array",
"maxItems": 1026,
"items": {
"$ref": "#/$defs/timing_silenceInterval"
}
}
}
},
"windows": {
"type": "array",
"maxItems": 10000,
"items": {
"$ref": "#/$defs/timing_deliveryWindow"
}
}
}
},
"fit_qualityReportOrNull": {
"anyOf": [
{
"type": "object",
"required": [
"schema"
],
"properties": {
"schema": {
"const": "madoo.audio-quality-report/v1"
}
}
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}