The Preset object
Presets are reusable encoding configurations that define video codec, resolution, quality, audio settings, and container format. Transcodely provides system presets for common use cases. You can create custom presets or duplicate system presets as a starting point.
Base path: transcodely.v1.PresetService Requires: X-Organization-ID header on all endpoints.
Attributes
| Attribute | Type | Description |
|---|---|---|
id | string | Unique identifier with pst_ prefix (e.g., "pst_x9y8z7w6v5"). |
app_id | string | Parent app that owns this preset, with app_ prefix (e.g., "app_k1l2m3n4o5"). Empty for system presets. Server-set. |
slug | string | URL-safe slug. Lowercase letters, numbers, and underscores only. |
name | string | Human-readable name. |
description | string | Optional description. Omitted if not set. |
content_type | string | Content type hint for encoder tuning. One of "film", "animation", "grain", "gaming", "sports", "stillimage". |
container | string | Container format. One of "mp4", "webm", "mkv", "ts", "mov". |
faststart | boolean | Whether faststart (moov atom at beginning) is enabled for progressive MP4. |
delivery_format | string | Delivery format. One of "progressive", "hls", "dash", "cmaf". |
video | object | Video encoding settings. See Video settings. |
audio | object | Audio encoding settings. See Audio settings. |
quality_tier | string | Quality tier. One of "economy", "standard", "premium". |
estimated_cost_per_minute | number | Estimated cost per minute of encoded video in EUR. Omitted if not calculated. |
system_preset | boolean | true if this is a read-only system preset. |
created_at | string | ISO 8601 timestamp. |
updated_at | string | ISO 8601 timestamp. |
variants | array | Multi-variant ABR ladder for streaming presets. Empty array ([]) for single-rendition presets. See Variants. |
disable_audio | boolean | true if outputs from this preset are video-only (audio dropped). |
{
"id": "pst_x9y8z7w6v5",
"app_id": "app_k1l2m3n4o5",
"slug": "web_1080p_standard",
"name": "Web 1080p Standard",
"description": "H.264 1080p for web streaming",
"content_type": "film",
"container": "mp4",
"faststart": true,
"delivery_format": "progressive",
"video": {
"codec": "h264",
"resolution": "1080p",
"bitrate_mode": "crf",
"crf": 23,
"profile": "high",
"level": "4.0",
"encoder_preset": "medium"
},
"audio": {
"codec": "aac",
"bitrate_kbps": 128,
"sample_rate": 48000,
"channels": 2
},
"quality_tier": "standard",
"estimated_cost_per_minute": 0.053,
"system_preset": false,
"created_at": "2025-01-15T10:30:00Z",
"updated_at": "2025-01-15T10:30:00Z",
"variants": [],
"disable_audio": false
}Video settings
| Attribute | Type | Description |
|---|---|---|
codec | string | Video codec. One of "h264", "h265", "vp9", "av1". |
resolution | string | Resolution preset. One of "480p", "720p", "1080p", "1440p", "2160p", "4320p". |
width | integer | Custom width in pixels (128-7680). Use with height for non-standard dimensions. |
height | integer | Custom height in pixels (128-4320). |
framerate | integer | Target frame rate. 0 keeps the original. Max 240. |
bitrate_mode | string | Bitrate control mode. One of "crf", "cbr", "vbr". |
crf | integer | Constant Rate Factor. Range depends on codec: H.264 15-35, H.265 18-35, VP9 15-50, AV1 20-55. |
bitrate_kbps | integer | Target bitrate for CBR/VBR (100-100000 kbps). |
max_bitrate_kbps | integer | Max bitrate for VBV buffering (100-240000 kbps). |
buffer_size_kbps | integer | VBV buffer size (100-480000 kbps). |
profile | string | Codec profile (e.g., "baseline", "main", "high"). |
level | string | Codec level (e.g., "3.0", "4.0", "5.1"). |
encoder_preset | string | Encoder speed/quality tradeoff. H.264/H.265: "ultrafast" to "slower". AV1: "3" to "12". |
tune | string | Content-aware tuning. H.264: "film", "animation", "grain", "stillimage", "fastdecode". H.265: "grain", "fastdecode". "zerolatency" is not allowed. |
keyint | integer | GOP size / keyframe interval in frames (1-600). |
min_keyint | integer | Minimum keyframe interval in frames (1-60). |
bframes | integer | Number of B-frames (0-16). |
refs | integer | Number of reference frames (1-16). |
rc_lookahead | integer | Rate control lookahead frames (0-250). |
aq_mode | integer | Adaptive quantization mode (0-3). |
aq_strength | number | Adaptive quantization strength (0.0-3.0). |
psy_rd | string | Psychovisual rate-distortion optimization in "strength:trellis" format (e.g., "1.0:0.0"). |
deblock | string | Deblocking filter strength in "alpha:beta" format (e.g., "0:0", "-1:-1"). |
Audio settings
| Attribute | Type | Description |
|---|---|---|
codec | string | Audio codec. One of "aac", "opus", "mp3". |
bitrate_kbps | integer | Target bitrate (32-512 kbps). |
sample_rate | integer | Sample rate in Hz. 0 keeps the original. Common values: 44100, 48000. |
channels | integer | Number of channels. 0 keeps the original. Max 8. |
normalize | boolean | Apply EBU R128 loudness normalization. |
Variants
Presets with a delivery_format of "hls", "dash", or "cmaf" can define a multi-variant ABR ladder. Each variant overrides per-resolution settings; shared settings (codec, profile, encoder preset, audio, etc.) are inherited from the parent preset. Progressive presets leave variants empty.
| Attribute | Type | Description |
|---|---|---|
resolution | string | Target resolution for this variant. One of "480p", "720p", "1080p", "1440p", "2160p", "4320p". |
width | integer | Custom output width in pixels (128-7680). |
height | integer | Custom output height in pixels (128-4320). |
bitrate_kbps | integer | Target bitrate for this variant in kbps (100-240000). |
max_bitrate_kbps | integer | Max bitrate for VBV buffering (100-240000 kbps). |
buffer_size_kbps | integer | VBV buffer size (100-480000 kbps). |
crf | integer | Constant Rate Factor override for this variant (0-63). Codec-specific ranges apply. |
quality | string | Quality tier override for this variant. One of "economy", "standard", "premium". |
framerate | integer | Frame rate override for this variant. 0 keeps the original. Max 240. |
Create a preset
Create a new custom preset with video and audio encoding settings.
POST /transcodely.v1.PresetService/CreateParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
slug | string | Yes | URL-safe slug (3-64 chars). Lowercase letters, numbers, and underscores only. Must be unique per app. |
name | string | Yes | Human-readable name (1-128 chars). |
description | string | No | Description (max 1024 chars). |
content_type | string | No | Content type hint: "film", "animation", "grain", "gaming", "sports", "stillimage". |
container | string | Yes | Container format: "mp4", "webm", "mkv", "ts", "mov". |
faststart | boolean | No | Enable faststart for progressive MP4. Default: true. |
delivery_format | string | No | Delivery format: "progressive", "hls", "dash", "cmaf". |
streaming | object | No | Streaming configuration for HLS/DASH outputs. |
video | object | Yes | Video encoding settings. See Video settings. |
audio | object | Yes | Audio encoding settings. See Audio settings. |
quality_tier | string | No | Quality tier: "economy", "standard", "premium". |
variants | array | No | Multi-variant ABR ladder (max 20). Only valid when delivery_format is "hls", "dash", or "cmaf". See Variants. |
disable_audio | boolean | No | Produce video-only outputs (no audio). Default: false. |
app_id | string | No | Target app (app_ prefix). Portal/JWT callers use it to create in a specific app; API-key callers may omit it. Omitting selects the org’s first active app. |
Returns
The created Preset object.
Example
curl -X POST https://api.transcodely.com/transcodely.v1.PresetService/Create
-H "Authorization: Bearer {{API_KEY}}"
-H "X-Organization-ID: {{ORG_ID}}"
-H "Content-Type: application/json"
-d '{
"slug": "web_1080p_standard",
"name": "Web 1080p Standard",
"description": "H.264 1080p for web streaming",
"content_type": "film",
"container": "mp4",
"faststart": true,
"delivery_format": "progressive",
"video": {
"codec": "h264",
"resolution": "1080p",
"bitrate_mode": "crf",
"crf": 23,
"profile": "high",
"level": "4.0",
"encoder_preset": "medium"
},
"audio": {
"codec": "aac",
"bitrate_kbps": 128,
"sample_rate": 48000,
"channels": 2
},
"quality_tier": "standard"
}'const preset = await client.presets.create({
slug: "web_1080p_standard",
name: "Web 1080p Standard",
description: "H.264 1080p for web streaming",
contentType: ContentType.FILM,
container: Container.MP4,
faststart: true,
deliveryFormat: DeliveryFormat.PROGRESSIVE,
video: {
codec: VideoCodec.H264,
resolution: Resolution.RESOLUTION_1080P,
bitrateMode: BitrateMode.CRF,
crf: 23,
profile: "high",
level: "4.0",
encoderPreset: "medium",
},
audio: {
codec: AudioCodec.AAC,
bitrateKbps: 128,
sampleRate: 48000,
channels: 2,
},
qualityTier: QualityTier.STANDARD,
});preset = client.presets.create(
slug="web_1080p_standard",
name="Web 1080p Standard",
description="H.264 1080p for web streaming",
content_type="film",
container="mp4",
faststart=True,
delivery_format="progressive",
video={
"codec": "h264",
"resolution": "1080p",
"bitrate_mode": "crf",
"crf": 23,
"profile": "high",
"level": "4.0",
"encoder_preset": "medium",
},
audio={
"codec": "aac",
"bitrate_kbps": 128,
"sample_rate": 48000,
"channels": 2,
},
quality_tier="standard",
)preset, err := client.Presets.Create(ctx, &transcodely.PresetCreateParams{
Slug: "web_1080p_standard",
Name: "Web 1080p Standard",
Description: proto.String("H.264 1080p for web streaming"),
ContentType: transcodely.ContentTypeFilm,
Container: transcodely.ContainerMP4,
Faststart: proto.Bool(true),
DeliveryFormat: transcodely.DeliveryFormatProgressive,
Video: &transcodely.VideoSettings{
Codec: transcodely.VideoCodecH264,
Resolution: transcodely.Resolution1080P,
BitrateMode: transcodely.BitrateModeCRF,
Crf: proto.Int32(23),
Profile: proto.String("high"),
Level: proto.String("4.0"),
EncoderPreset: proto.String("medium"),
},
Audio: &transcodely.AudioSettings{
Codec: transcodely.AudioCodecAAC,
BitrateKbps: 128,
SampleRate: proto.Int32(48000),
Channels: proto.Int32(2),
},
QualityTier: transcodely.QualityTierStandard,
}){
"preset": {
"id": "pst_x9y8z7w6v5",
"app_id": "app_k1l2m3n4o5",
"slug": "web_1080p_standard",
"name": "Web 1080p Standard",
"description": "H.264 1080p for web streaming",
"content_type": "film",
"container": "mp4",
"faststart": true,
"delivery_format": "progressive",
"video": {
"codec": "h264",
"resolution": "1080p",
"bitrate_mode": "crf",
"crf": 23,
"profile": "high",
"level": "4.0",
"encoder_preset": "medium"
},
"audio": {
"codec": "aac",
"bitrate_kbps": 128,
"sample_rate": 48000,
"channels": 2
},
"quality_tier": "standard",
"estimated_cost_per_minute": 0.053,
"system_preset": false,
"created_at": "2025-01-15T10:30:00Z",
"updated_at": "2025-01-15T10:30:00Z",
"variants": [],
"disable_audio": false
}
}Retrieve a preset
Retrieve a preset by ID.
POST /transcodely.v1.PresetService/GetParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Preset ID (e.g., "pst_x9y8z7w6v5"). |
Returns
The Preset object.
Example
curl -X POST https://api.transcodely.com/transcodely.v1.PresetService/Get
-H "Authorization: Bearer {{API_KEY}}"
-H "X-Organization-ID: {{ORG_ID}}"
-H "Content-Type: application/json"
-d '{"id": "pst_x9y8z7w6v5"}'const preset = await client.presets.get("pst_x9y8z7w6v5");preset = client.presets.get("pst_x9y8z7w6v5")preset, err := client.Presets.Get(ctx, "pst_x9y8z7w6v5"){
"preset": {
"id": "pst_x9y8z7w6v5",
"app_id": "app_k1l2m3n4o5",
"slug": "web_1080p_standard",
"name": "Web 1080p Standard",
"description": "H.264 1080p for web streaming",
"content_type": "film",
"container": "mp4",
"faststart": true,
"delivery_format": "progressive",
"video": {
"codec": "h264",
"resolution": "1080p",
"bitrate_mode": "crf",
"crf": 23,
"profile": "high",
"level": "4.0",
"encoder_preset": "medium"
},
"audio": {
"codec": "aac",
"bitrate_kbps": 128,
"sample_rate": 48000,
"channels": 2
},
"quality_tier": "standard",
"estimated_cost_per_minute": 0.053,
"system_preset": false,
"created_at": "2025-01-15T10:30:00Z",
"updated_at": "2025-01-15T10:30:00Z",
"variants": [],
"disable_audio": false
}
}Retrieve a preset by slug
Retrieve a preset by its slug instead of ID.
POST /transcodely.v1.PresetService/GetBySlugParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
slug | string | Yes | Preset slug (e.g., "web_1080p_standard"). 1-64 chars. |
Returns
The Preset object.
Example
curl -X POST https://api.transcodely.com/transcodely.v1.PresetService/GetBySlug
-H "Authorization: Bearer {{API_KEY}}"
-H "X-Organization-ID: {{ORG_ID}}"
-H "Content-Type: application/json"
-d '{"slug": "web_1080p_standard"}'const preset = await client.presets.getBySlug("web_1080p_standard");preset = client.presets.get_by_slug("web_1080p_standard")preset, err := client.Presets.GetBySlug(ctx, "web_1080p_standard"){
"preset": {
"id": "pst_x9y8z7w6v5",
"app_id": "app_k1l2m3n4o5",
"slug": "web_1080p_standard",
"name": "Web 1080p Standard",
"description": "H.264 1080p for web streaming",
"content_type": "film",
"container": "mp4",
"faststart": true,
"delivery_format": "progressive",
"video": {
"codec": "h264",
"resolution": "1080p",
"bitrate_mode": "crf",
"crf": 23,
"profile": "high",
"level": "4.0",
"encoder_preset": "medium"
},
"audio": {
"codec": "aac",
"bitrate_kbps": 128,
"sample_rate": 48000,
"channels": 2
},
"quality_tier": "standard",
"estimated_cost_per_minute": 0.053,
"system_preset": false,
"created_at": "2025-01-15T10:30:00Z",
"updated_at": "2025-01-15T10:30:00Z",
"variants": [],
"disable_audio": false
}
}List presets
List presets including both system presets and custom presets.
POST /transcodely.v1.PresetService/ListParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
include_system | boolean | No | Include system presets. Default: true. |
content_type | string | No | Filter by content type: "film", "animation", "grain", "gaming", "sports", "stillimage". |
quality_tier | string | No | Filter by quality tier: "economy", "standard", "premium". |
video_codec | string | No | Filter by video codec: "h264", "h265", "vp9", "av1". |
delivery_format | string | No | Filter by delivery format: "progressive", "hls", "dash", "cmaf". |
pagination | object | No | Pagination parameters. See Pagination. |
Returns
A list of Preset objects and pagination metadata.
Example
curl -X POST https://api.transcodely.com/transcodely.v1.PresetService/List
-H "Authorization: Bearer {{API_KEY}}"
-H "X-Organization-ID: {{ORG_ID}}"
-H "Content-Type: application/json"
-d '{
"video_codec": "h264",
"quality_tier": "standard",
"pagination": {"limit": 20}
}'for await (const preset of client.presets.list({
videoCodec: VideoCodec.H264,
qualityTier: QualityTier.STANDARD,
pagination: { limit: 20 },
}).autoPage()) {
console.log(preset.id, preset.slug);
}for preset in client.presets.list(limit=20).auto_paging_iter():
print(preset.id, preset.slug)iter := client.Presets.List(ctx, &transcodely.PresetListParams{
VideoCodec: transcodely.VideoCodecH264.Enum(),
QualityTier: transcodely.QualityTierStandard.Enum(),
Pagination: &transcodely.PaginationRequest{Limit: 20},
})
for iter.Next() {
preset := iter.Current()
fmt.Println(preset.GetId(), preset.GetSlug())
}
if err := iter.Err(); err != nil {
log.Fatal(err)
}{
"presets": [
{
"id": "pst_x9y8z7w6v5",
"slug": "web_1080p_standard",
"name": "Web 1080p Standard",
"content_type": "film",
"container": "mp4",
"quality_tier": "standard",
"estimated_cost_per_minute": 0.053,
"system_preset": false,
"created_at": "2025-01-15T10:30:00Z",
"updated_at": "2025-01-15T10:30:00Z"
}
],
"pagination": {
"next_cursor": "",
"total_count": 1
}
}Update a preset
Update a custom preset. System presets cannot be modified — use Duplicate to create a customizable copy.
POST /transcodely.v1.PresetService/UpdateParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Preset ID. |
slug | string | No | New slug (3-64 chars, must be unique). |
name | string | No | New name (1-128 chars). |
description | string | No | New description (max 1024 chars). |
content_type | string | No | New content type. |
container | string | No | New container format. |
faststart | boolean | No | New faststart setting. |
delivery_format | string | No | New delivery format. |
streaming | object | No | New streaming configuration. |
video | object | No | New video settings. Replaces the entire video config. |
audio | object | No | New audio settings. Replaces the entire audio config. |
quality_tier | string | No | New quality tier. |
variants | array | No | Replace the ABR ladder (max 20). Send an empty array to clear all variants. Only valid when delivery_format is "hls", "dash", or "cmaf". See Variants. |
disable_audio | boolean | No | Produce video-only outputs (no audio). |
Returns
The updated Preset object.
Example
curl -X POST https://api.transcodely.com/transcodely.v1.PresetService/Update
-H "Authorization: Bearer {{API_KEY}}"
-H "X-Organization-ID: {{ORG_ID}}"
-H "Content-Type: application/json"
-d '{
"id": "pst_x9y8z7w6v5",
"name": "Web 1080p Standard (v2)",
"video": {
"codec": "h264",
"resolution": "1080p",
"bitrate_mode": "crf",
"crf": 21,
"profile": "high",
"level": "4.1",
"encoder_preset": "slow"
}
}'const preset = await client.presets.update({
id: "pst_x9y8z7w6v5",
name: "Web 1080p Standard (v2)",
video: {
codec: VideoCodec.H264,
resolution: Resolution.RESOLUTION_1080P,
bitrateMode: BitrateMode.CRF,
crf: 21,
profile: "high",
level: "4.1",
encoderPreset: "slow",
},
});preset = client.presets.update(
id="pst_x9y8z7w6v5",
name="Web 1080p Standard (v2)",
video={
"codec": "h264",
"resolution": "1080p",
"bitrate_mode": "crf",
"crf": 21,
"profile": "high",
"level": "4.1",
"encoder_preset": "slow",
},
)preset, err := client.Presets.Update(ctx, &transcodely.PresetUpdateParams{
Id: "pst_x9y8z7w6v5",
Name: proto.String("Web 1080p Standard (v2)"),
Video: &transcodely.VideoSettings{
Codec: transcodely.VideoCodecH264,
Resolution: transcodely.Resolution1080P,
BitrateMode: transcodely.BitrateModeCRF,
Crf: proto.Int32(21),
Profile: proto.String("high"),
Level: proto.String("4.1"),
EncoderPreset: proto.String("slow"),
},
}){
"preset": {
"id": "pst_x9y8z7w6v5",
"app_id": "app_k1l2m3n4o5",
"slug": "web_1080p_standard",
"name": "Web 1080p Standard (v2)",
"description": "H.264 1080p for web streaming",
"content_type": "film",
"container": "mp4",
"faststart": true,
"delivery_format": "progressive",
"video": {
"codec": "h264",
"resolution": "1080p",
"bitrate_mode": "crf",
"crf": 21,
"profile": "high",
"level": "4.1",
"encoder_preset": "slow"
},
"audio": {
"codec": "aac",
"bitrate_kbps": 128,
"sample_rate": 48000,
"channels": 2
},
"quality_tier": "standard",
"estimated_cost_per_minute": 0.061,
"system_preset": false,
"created_at": "2025-01-15T10:30:00Z",
"updated_at": "2025-02-28T15:00:00Z",
"variants": [],
"disable_audio": false
}
}Duplicate a preset
Copy a preset (system or custom) as a new custom preset. This is the recommended way to customize a system preset.
POST /transcodely.v1.PresetService/DuplicateParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
source_id | string | Yes | ID of the preset to copy. |
slug | string | Yes | Slug for the new preset (3-64 chars, must be unique). |
name | string | Yes | Name for the new preset (1-128 chars). |
Returns
The newly created Preset object (copy of the source).
Example
curl -X POST https://api.transcodely.com/transcodely.v1.PresetService/Duplicate
-H "Authorization: Bearer {{API_KEY}}"
-H "X-Organization-ID: {{ORG_ID}}"
-H "Content-Type: application/json"
-d '{
"source_id": "pst_system_h264_1080p",
"slug": "my_custom_1080p",
"name": "My Custom 1080p"
}'const preset = await client.presets.duplicate({
sourceId: "pst_system_h264_1080p",
slug: "my_custom_1080p",
name: "My Custom 1080p",
});preset = client.presets.duplicate(
source_id="pst_system_h264_1080p",
slug="my_custom_1080p",
name="My Custom 1080p",
)preset, err := client.Presets.Duplicate(ctx, "pst_system_h264_1080p", "my_custom_1080p", "My Custom 1080p"){
"preset": {
"id": "pst_a1b2c3d4e5",
"app_id": "app_k1l2m3n4o5",
"slug": "my_custom_1080p",
"name": "My Custom 1080p",
"content_type": "film",
"container": "mp4",
"faststart": true,
"delivery_format": "progressive",
"video": {
"codec": "h264",
"resolution": "1080p",
"bitrate_mode": "crf",
"crf": 23,
"profile": "high",
"level": "4.0",
"encoder_preset": "medium"
},
"audio": {
"codec": "aac",
"bitrate_kbps": 128,
"sample_rate": 48000,
"channels": 2
},
"quality_tier": "standard",
"estimated_cost_per_minute": 0.053,
"system_preset": false,
"created_at": "2025-02-28T15:00:00Z",
"updated_at": "2025-02-28T15:00:00Z",
"variants": [],
"disable_audio": false
}
}Archive a preset
Soft-delete a custom preset. System presets cannot be archived. Archived presets are not available for new jobs.
POST /transcodely.v1.PresetService/ArchiveParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Preset ID. |
Returns
The archived Preset object.
Example
curl -X POST https://api.transcodely.com/transcodely.v1.PresetService/Archive
-H "Authorization: Bearer {{API_KEY}}"
-H "X-Organization-ID: {{ORG_ID}}"
-H "Content-Type: application/json"
-d '{"id": "pst_x9y8z7w6v5"}'const preset = await client.presets.archive("pst_x9y8z7w6v5");preset = client.presets.archive("pst_x9y8z7w6v5")err := client.Presets.Archive(ctx, "pst_x9y8z7w6v5"){
"preset": {
"id": "pst_x9y8z7w6v5",
"slug": "web_1080p_standard",
"name": "Web 1080p Standard",
"system_preset": false,
"created_at": "2025-01-15T10:30:00Z",
"updated_at": "2025-02-28T15:00:00Z"
}
}