Search Documentation
Search across all documentation pages
Presets

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

AttributeTypeDescription
idstringUnique identifier with pst_ prefix (e.g., "pst_x9y8z7w6v5").
app_idstringParent app that owns this preset, with app_ prefix (e.g., "app_k1l2m3n4o5"). Empty for system presets. Server-set.
slugstringURL-safe slug. Lowercase letters, numbers, and underscores only.
namestringHuman-readable name.
descriptionstringOptional description. Omitted if not set.
content_typestringContent type hint for encoder tuning. One of "film", "animation", "grain", "gaming", "sports", "stillimage".
containerstringContainer format. One of "mp4", "webm", "mkv", "ts", "mov".
faststartbooleanWhether faststart (moov atom at beginning) is enabled for progressive MP4.
delivery_formatstringDelivery format. One of "progressive", "hls", "dash", "cmaf".
videoobjectVideo encoding settings. See Video settings.
audioobjectAudio encoding settings. See Audio settings.
quality_tierstringQuality tier. One of "economy", "standard", "premium".
estimated_cost_per_minutenumberEstimated cost per minute of encoded video in EUR. Omitted if not calculated.
system_presetbooleantrue if this is a read-only system preset.
created_atstringISO 8601 timestamp.
updated_atstringISO 8601 timestamp.
variantsarrayMulti-variant ABR ladder for streaming presets. Empty array ([]) for single-rendition presets. See Variants.
disable_audiobooleantrue 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

AttributeTypeDescription
codecstringVideo codec. One of "h264", "h265", "vp9", "av1".
resolutionstringResolution preset. One of "480p", "720p", "1080p", "1440p", "2160p", "4320p".
widthintegerCustom width in pixels (128-7680). Use with height for non-standard dimensions.
heightintegerCustom height in pixels (128-4320).
framerateintegerTarget frame rate. 0 keeps the original. Max 240.
bitrate_modestringBitrate control mode. One of "crf", "cbr", "vbr".
crfintegerConstant Rate Factor. Range depends on codec: H.264 15-35, H.265 18-35, VP9 15-50, AV1 20-55.
bitrate_kbpsintegerTarget bitrate for CBR/VBR (100-100000 kbps).
max_bitrate_kbpsintegerMax bitrate for VBV buffering (100-240000 kbps).
buffer_size_kbpsintegerVBV buffer size (100-480000 kbps).
profilestringCodec profile (e.g., "baseline", "main", "high").
levelstringCodec level (e.g., "3.0", "4.0", "5.1").
encoder_presetstringEncoder speed/quality tradeoff. H.264/H.265: "ultrafast" to "slower". AV1: "3" to "12".
tunestringContent-aware tuning. H.264: "film", "animation", "grain", "stillimage", "fastdecode". H.265: "grain", "fastdecode". "zerolatency" is not allowed.
keyintintegerGOP size / keyframe interval in frames (1-600).
min_keyintintegerMinimum keyframe interval in frames (1-60).
bframesintegerNumber of B-frames (0-16).
refsintegerNumber of reference frames (1-16).
rc_lookaheadintegerRate control lookahead frames (0-250).
aq_modeintegerAdaptive quantization mode (0-3).
aq_strengthnumberAdaptive quantization strength (0.0-3.0).
psy_rdstringPsychovisual rate-distortion optimization in "strength:trellis" format (e.g., "1.0:0.0").
deblockstringDeblocking filter strength in "alpha:beta" format (e.g., "0:0", "-1:-1").

Audio settings

AttributeTypeDescription
codecstringAudio codec. One of "aac", "opus", "mp3".
bitrate_kbpsintegerTarget bitrate (32-512 kbps).
sample_rateintegerSample rate in Hz. 0 keeps the original. Common values: 44100, 48000.
channelsintegerNumber of channels. 0 keeps the original. Max 8.
normalizebooleanApply 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.

AttributeTypeDescription
resolutionstringTarget resolution for this variant. One of "480p", "720p", "1080p", "1440p", "2160p", "4320p".
widthintegerCustom output width in pixels (128-7680).
heightintegerCustom output height in pixels (128-4320).
bitrate_kbpsintegerTarget bitrate for this variant in kbps (100-240000).
max_bitrate_kbpsintegerMax bitrate for VBV buffering (100-240000 kbps).
buffer_size_kbpsintegerVBV buffer size (100-480000 kbps).
crfintegerConstant Rate Factor override for this variant (0-63). Codec-specific ranges apply.
qualitystringQuality tier override for this variant. One of "economy", "standard", "premium".
framerateintegerFrame 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/Create

Parameters

ParameterTypeRequiredDescription
slugstringYesURL-safe slug (3-64 chars). Lowercase letters, numbers, and underscores only. Must be unique per app.
namestringYesHuman-readable name (1-128 chars).
descriptionstringNoDescription (max 1024 chars).
content_typestringNoContent type hint: "film", "animation", "grain", "gaming", "sports", "stillimage".
containerstringYesContainer format: "mp4", "webm", "mkv", "ts", "mov".
faststartbooleanNoEnable faststart for progressive MP4. Default: true.
delivery_formatstringNoDelivery format: "progressive", "hls", "dash", "cmaf".
streamingobjectNoStreaming configuration for HLS/DASH outputs.
videoobjectYesVideo encoding settings. See Video settings.
audioobjectYesAudio encoding settings. See Audio settings.
quality_tierstringNoQuality tier: "economy", "standard", "premium".
variantsarrayNoMulti-variant ABR ladder (max 20). Only valid when delivery_format is "hls", "dash", or "cmaf". See Variants.
disable_audiobooleanNoProduce video-only outputs (no audio). Default: false.
app_idstringNoTarget 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/Get

Parameters

ParameterTypeRequiredDescription
idstringYesPreset 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/GetBySlug

Parameters

ParameterTypeRequiredDescription
slugstringYesPreset 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/List

Parameters

ParameterTypeRequiredDescription
include_systembooleanNoInclude system presets. Default: true.
content_typestringNoFilter by content type: "film", "animation", "grain", "gaming", "sports", "stillimage".
quality_tierstringNoFilter by quality tier: "economy", "standard", "premium".
video_codecstringNoFilter by video codec: "h264", "h265", "vp9", "av1".
delivery_formatstringNoFilter by delivery format: "progressive", "hls", "dash", "cmaf".
paginationobjectNoPagination 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/Update

Parameters

ParameterTypeRequiredDescription
idstringYesPreset ID.
slugstringNoNew slug (3-64 chars, must be unique).
namestringNoNew name (1-128 chars).
descriptionstringNoNew description (max 1024 chars).
content_typestringNoNew content type.
containerstringNoNew container format.
faststartbooleanNoNew faststart setting.
delivery_formatstringNoNew delivery format.
streamingobjectNoNew streaming configuration.
videoobjectNoNew video settings. Replaces the entire video config.
audioobjectNoNew audio settings. Replaces the entire audio config.
quality_tierstringNoNew quality tier.
variantsarrayNoReplace 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_audiobooleanNoProduce 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/Duplicate

Parameters

ParameterTypeRequiredDescription
source_idstringYesID of the preset to copy.
slugstringYesSlug for the new preset (3-64 chars, must be unique).
namestringYesName 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/Archive

Parameters

ParameterTypeRequiredDescription
idstringYesPreset 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"
  }
}