Skip to content

Creating a new asset

Request

Creating an asset is the first step to dubbing your video with Panjaya Dubbing Studio. This endpoint allows you to:

  • Upload a source video
  • Configure the necessary parameters to initiate the dubbing process

Uploading the Source Video

  • Use the media_url parameter to specify the publicly accessible URL of the source video you want to dub.
  • Set the locale field to indicate the original language of the source video.
  • It is recommended to set the speakers_count field to the number of distinct speakers in the video, to improve accuracy and quality of the final video.

Adding Target Languages

Define the languages into which you want to dub the video:

Panjaya's locale codes adhere to the IETF Language Tag standard, combining ISO 639-1 language codes and ISO 3166-1 country codes. Examples: en-US (English - United States), es-ES (Spanish - Spain), zh-CN (Chinese - China).

For each target language, you may optionally provide a valid SRT file, where applicable, in the designated srt field.

Trimming the Video

You can optionally use the start_time and end_time parameters to trim your video, allowing you to dub a specific section of your video.

Both parameters accept a number of seconds from the beginning of the video. For example, if you want to dub only the first 2 minutes of your video, set end_time to 120.

If not specified, start_time defaults to 0 (beginning of the video), and end_time defaults to the end of the video.

Status Updates via Callbacks

Optionally, you can configure a callback_url to receive real-time status updates about the dubbing process.

When a callback_url is specified, Panjaya will send updates whenever the status of an asset or any of its dubbing versions changes.

For detailed information on implementing callbacks, refer to the Callbacks section of this documentation.

Models

The lips_model field specifies which lips model to use when generating versions under this asset. This parameter is only applicable when lip correction is enabled. You can use it to fine-tune the balance between quality and performance.

  • real_face (Default): Our highest-quality lips model, suitable for most use cases.
  • real_face_turbo: Optimized for speed - up to 4× faster than real_face, while maintaining high quality.

Generate balance

If auto_generate is set to with_lips or no_lips, Panjaya checks your organization's remaining video-generation balance before creating the asset. If the balance is insufficient, the request is rejected with a 403 response and the insufficient balance error message.

Library voice

By default, each speaker is dubbed with a voice cloned from their original speech. To narrate all speakers with a specific library voice instead, set voice_library_id to the id of that voice (list available voices with the GET /voices endpoint). The library voice applies to the whole asset — every target language is narrated by that voice. The original speech is still replaced by the dubbed vocals unless voice-over is enabled.

Voice-over

By default, Panjaya replaces the original speech with the dubbed vocals. With voice-over enabled, the original audio is instead ducked (lowered in volume) and the dubbed vocals are delayed and mixed on top of it, preserving the original speaker's voice underneath.

To enable voice-over, set voice_over to true together with a voice_library_id (see Library voice). Voice-over applies to the whole asset — every target language is narrated by that voice.

Voice-over cannot be combined with lip correction: a request that enables voice-over together with synthesized lips (auto_generate=with_lips) is rejected.

Voice Anonymization

The voice_anonymization field allows you to control the degree of voice anonymization applied to the dubbed voices. This is a float between 0.0 (no anonymization, default) and 1.0 (maximum anonymization). This feature is useful for privacy or compliance requirements, or when you want to mask the original speaker's identity.

  • 0.0: No anonymization. The cloned voice will closely match the original speaker.
  • 1.0: Maximum anonymization. The voice will sound very different from the original.
  • Any value between 0.0 and 1.0 will apply a proportional level of anonymization.

Background Audio

Panjaya uses our SceneAware audio separation model to separate speech from background audio in the source video. This preserves the original background audio in the dubbed result, creating a more natural and immersive experience.

If you have a clean background audio track (e.g., music and sound effects without speech), you can provide a publicly accessible URL to it via the background_url field. Panjaya will then use this track directly instead of separating background audio from the source video.

If you have a clean speech audio track, you can provide a publicly accessible URL to it via the speech_url field. Panjaya will then use this track directly instead of separating speech audio from the source video.

Security
api_key
Bodyapplication/jsonrequired
namestring, [ 1 .. 255 ] charactersrequired

Display name of the dubbing project. Must not be empty. Names exceeding 255 characters will be automatically truncated.

localestring, [ 5 .. 6 ] characters^[a-z]{2,3}-[A-Z]{2}$required

A locale code of a supported locale. If the locale is not supported, an error response of status 400 will be returned.

languagesArray of objectsrequired

List of languages to translate and dub the asset to

callback_urlstring or null
Any of:

If specified, Panjaya will POST this url on dubbing status updates. Must be a valid, publicly accessible HTTPS URL.

[ 1 .. 2083 ] characters
string (uri)
speakers_countinteger or null
Any of:

Number of speakers in the source video. If not specified, Panjaya will attempt to automatically detect the number of speakers in the video.

[ 1 .. 35 ]
integer
start_timenumber or null
Any of:

Trim the source video from this time (in seconds). Must be within the video's total duration, otherwise, the asset will fail with an error code of invalid_input. Defaults to the start of the video.

>= 0
number
end_timenumber or null
Any of:

Trim the source video to this time (in seconds). Must be greater than start_time, if provided, and within the video's total duration, otherwise, the asset will fail with an error code of invalid_input. Defaults to the end of the video.

>= 0
number
auto_generatestring

If specified, Panjaya will generate the result video automatically, with or without synthesized lips according to the parameter's value. If not specified, Panjaya will not generate the result video automatically.

Default:"off"
Enum:"off""with_lips""no_lips"
source_srtstring or null
Any of:

Optional reference SRT file contents. Recommended to be in a valid SRT file format, but other textual formats are also accepted.

string
lips_modelLipsModel (string) or null
Any of:

The lips model to use. If not specified, Panjaya will use the default RealFace model.

string
Enum:"real_face""real_face_turbo"
voice_anonymizationnumber, [ 0 .. 1 ]

The degree of voice anonymization to apply, as a float between 0.0 (no anonymization, default) and 1.0 (maximum anonymization).

Default:0
voice_overboolean

Enable voice-over for the asset: instead of replacing the original speech, the original audio is ducked and the dubbed vocals are delayed and mixed on top. Requires voice_library_id, and cannot be combined with synthesized lips (auto_generate=with_lips).

Default:false
voice_library_idstring or null
Any of:

The library voice that narrates all speakers of the asset instead of their cloned voices (list available voices with the GET /voices endpoint). Can be used with or without voice_over; required when voice_over is true.

string
media_urlstring, (uri), [ 1 .. 2083 ] charactersrequired

Public URL (can be temporary) of the source video

background_urlstring or null
Any of:

Optional public URL (can be temporary) of a background audio file to be used as background music in the result video.

[ 1 .. 2083 ] characters
string (uri)
speech_urlstring or null
Any of:

Optional public URL (can be temporary) of a clean speech audio file to be used instead of extracting it from the media file.

[ 1 .. 2083 ] characters
string (uri)

Create a new asset with only required fields. Make sure to replace media URL with your own.

{ "name": "My Asset", "locale": "en-US", "languages": [ { … } ], "media_url": "https://my.storage.service.com/my-video.mp4" }

Responses

Asset was created successfully

Bodyapplication/json
asset_idstringrequired
namestringrequired
localestring, [ 5 .. 6 ] characters^[a-z]{2,3}-[A-Z]{2}$required

A locale code of a supported locale. If the locale is not supported, an error response of status 400 will be returned.

created_atstring, (date-time)required
statusstringrequired
Enum:"Dubbing""PendingReview""Ready""Failed"
durationnumber or nullrequired
Any of:

Duration of the source video in seconds. The field may be null while the asset is processing.

>= 0
number
errorApiAssetErrorInfo (object) or null
Any of:

In case of an error while processing the asset, the asset status will be Failed, and this field contains helpful information for identifying the issue.

source_video_urlstring or null
Any of:

The uploaded video before dubbing

[ 1 .. 2083 ] characters
string (uri)
thumbnail_urlstring or null
Any of:

A poster/thumbnail image for the asset, suitable for link previews. May be null while the asset is processing.

[ 1 .. 2083 ] characters
string (uri)
languagesArray of objectsrequired
Response
{ "asset_id": "7b9b9e3c3c7e322aec4c3d9b", "name": "My Asset", "locale": "en-US", "created_at": "2021-08-10T12:00:00Z", "status": "Dubbing", "languages": [ { … } ] }