Dubbings
Generate a dubbed video from an existing transcript and target-language segments. Create the work from the Jobs API with serviceType: dubbing, then read generated artifacts and speaker metadata from the Dubbing endpoints.
Dubbing reuses existing Perchat Media transcription, translation, voice, storage, and worker patterns. It does not ask clients to upload transcript segments in the job request. For translated dubbing, create or verify the target-language Translation record first, then queue the dubbing job with the same transcriptionId and targetLanguage.
Dubbing flow
The worker performs the pipeline in reusable stages:
- Fetch the transcription by
transcriptionId. - Resolve the target-language Translation record by transcription and language.
- Prepare source media and artifact keys.
- Extract raw audio and a video-only file.
- Separate vocals and background/no-vocals audio.
- Run diarization and assign speakers to dubbing segments.
- Extract speaker samples and assign/create voice profiles.
- Generate TTS for translated segments.
- Assemble translated speech on the original timeline.
- Mix translated speech with background audio.
- Mux the final audio with the video-only file.
Common scenarios
- Existing translation — recommended path. Create translation first, then queue dubbing. The worker uses the stored Translation segments.
- Manual voice assignment — pass
options.voiceAssignmentsto mapSPEAKER_00,SPEAKER_01, etc. to existing Perchat voice IDs. This is the most controlled first test path. - Auto voice creation — when no manual voice assignment is provided, the worker extracts speaker samples and calls the existing Perchat Voice service to create or assign voices when possible. This internal dubbing voice creation does not consume the public
voice_creationallowance used by/v1/voices. - No fallback voice - if no manual, source-transcript, or auto-created voice is available, the worker marks the speaker for manual assignment and skips TTS for affected segments instead of using a default voice.
- Missing translation — the Dubbing record reports
translationStatus: missing. For translated output, create the Translation record first or enable the product flow that creates translation before dubbing.
The Dubbing object
- dubbingIdstring
- Stable dubbing identifier (dub_…).
- jobIdstring
- Dubbing job that generated this record.
- workspaceIdstring
- Owning workspace.
- projectIdstring
- Owning project.
- transcriptionIdstring
- Source transcription used for dubbing.
- transcriptionJobIdstring | null, optional
- Original transcription job id when available.
- translationIdstring | null, optional
- Translation record used for target-language dubbing when available.
- sourceLanguagestring
- Source language code used for the dubbing flow.
- targetLanguagestring
- Requested target language code, for example ta, es, ja, or en-US.
- languageKeystring
- Normalized target language key used for lookup and storage.
- sourceLayerstring
- Transcript layer used for source text:
current,glossary, orraw. - statusstring
- Dubbing record status: prepared, processing, completed, or failed.
- translationStatusstring
- Whether translated segments were found, missing, or generated.
- textPreviewstring
- Short preview of the text used for dubbing.
- segmentCountinteger
- Number of dubbing segments.
- durationSecnumber | null, optional
- Approximate media or segment timeline duration.
- sourceMediaobject | null, optional
- Resolved source media details from the original transcription/job input.
- sourceMedia.sourceTypestring | null
- Source type, such as s3_direct.
- sourceMedia.connectionIdstring | null
- Storage connection used for source media.
- sourceMedia.bucketstring | null
- Source media bucket.
- sourceMedia.sourceKeystring | null
- Source media object key.
- sourceMedia.downloadableboolean
- Whether the worker resolved the source as downloadable.
- artifactPrefixstring | null, optional
- Base output prefix for generated dubbing artifacts.
- artifactsobject | null, optional
- Generated media artifacts for the dubbing pipeline.
- artifacts.rawVideoobject | null
- Original source video reference.
- artifacts.rawAudioobject | null
- Extracted raw audio artifact.
- artifacts.videoWithoutAudioobject | null
- Video-only artifact used for final muxing.
- artifacts.vocalsAudioobject | null
- Separated vocals/speech artifact.
- artifacts.backgroundAudioobject | null
- Separated background/no-vocals artifact.
- artifacts.translatedSpeechAudioobject | null
- Timeline-aligned translated speech-only audio.
- artifacts.mixedFinalAudioobject | null
- Final audio mix of translated speech and background.
- artifacts.dubbedVideoobject | null
- Final dubbed video artifact.
- artifacts.*.bucketstring | null
- Artifact bucket.
- artifacts.*.keystring | null
- Artifact object key.
- artifacts.*.urlstring | null
- Artifact URI or URL.
- artifacts.*.statusstring | null
- Artifact status: planned, available, or failed.
- artifacts.*.contentTypestring | null
- Artifact MIME type.
- artifacts.*.sizeBytesnumber | null
- Artifact size when known.
- artifacts.*.durationSecnumber | null
- Artifact duration when known.
- speakersarray
- Detected speakers and voice assignment details.
- speakers[].speakerstring
- Diarization speaker label, for example SPEAKER_00.
- speakers[].sampleAudioobject | null
- Extracted sample audio for voice cloning/assignment.
- speakers[].voiceProviderstring | null
- Voice provider used for this speaker, usually elevenlabs.
- speakers[].voiceIdstring | null
- Perchat voice ID assigned to this speaker.
- speakers[].voiceNamestring | null
- Display name for the assigned voice.
- speakers[].voiceSourcestring | null
- How the voice was assigned: manual, auto_created, auto_failed, or transcription_segment.
- speakers[].voiceStatusstring | null
- Voice assignment status: pending, assigned, manual_assignment_required, or failed.
- speakers[].sampleQualitystring | null
- Basic sample quality status: good, insufficient, or failed.
- speakers[].sampleDurationSecnumber | null
- Extracted speaker sample duration.
- speakers[].cleanTurnCountinteger | null
- Number of clean diarization turns used for the sample.
- diarizationobject | null, optional
- Speaker diarization metadata and speaker turns.
- speakerSamplesobject | null, optional
- Speaker sample extraction summary.
- voiceAssignmentsobject | null, optional
- Voice assignment summary and counts.
- ttsobject | null, optional
- TTS generation summary and provider metadata.
- speechAssemblyobject | null, optional
- Translated speech assembly summary.
- finalAudioMixobject | null, optional
- Final audio mix summary.
- finalVideoMuxobject | null, optional
- Final video mux summary.
- segmentsarray
- Dubbing segments used for TTS and timeline assembly.
- segments[].idstring
- Segment identifier, usually copied from the source transcript/translation segment.
- segments[].startnumber
- Segment start time in seconds.
- segments[].endnumber
- Segment end time in seconds.
- segments[].textstring
- Text synthesized for this segment, usually the translated text.
- segments[].sourceTextstring | null
- Original source text when available.
- segments[].translatedTextstring | null
- Translated text returned by the Translation service when available.
- segments[].speakerstring | null
- Speaker label assigned by diarization.
- segments[].voiceIdstring | null
- Perchat voice ID used for TTS on this segment.
- segments[].ttsStatusstring | null
- TTS status for this segment, for example available, skipped, or failed.
- segments[].ttsReasonstring | null, optional
- Reason for a skipped or failed TTS segment, for example speaker_voice_not_assigned.
- segments[].audioobject | null
- Generated per-segment TTS audio artifact.
- segments[].wordsarray, optional
- Optional word-level timing copied from source data when available.
- stepsobject | null, optional
- High-level dubbing pipeline step status map.
- vendorUsageobject | null, optional
- Provider usage metadata if available.
- createdAttimestamp
- Record creation time.
- updatedAttimestamp
- Last update time.
List dubbings for a transcript
GET
/v1/transcriptions/{transcriptionId}/dubbingsReturns Dubbing records generated from one transcription.
Requires permission
transcript:read
Parameters
- transcriptionIdstring
- Transcript id.
Returns
Array of Dubbing records.
See the the dubbing object for attribute details.
Retrieve a Dubbing record
GET
/v1/dubbings/{dubbingId}Returns the full stored Dubbing record, including artifacts, speakers, and generated output references.
Requires permission
transcript:read
Parameters
- dubbingIdstring
- Dubbing id.
Returns
Full Dubbing record.
See the the dubbing object for attribute details.