PricingAPI keys
  • Overview
  • Quickstart
  • Authentication
  • Overview
  • Audio detach
  • Create new avatar
  • Avatar video previews
  • Generate avatar video
  • Face swap (Beta)
  • Music 1.0
  • Music Router
  • Reference ingest
  • Remix media
  • Timeline 1.0
  • Timeline audio
  • Timeline compose
  • Trending videos
  • Video analyses
  • Video captions
  • Video filter
  • Video frames
  • Video inspect
  • Video trim

Media tools

Timeline audio

Concat or split Sume-hosted audio into durable media.sume.com files. Sample-domain join, no re-synthesis.

Note

Current SoT. Timeline 1.0 audio (sume/timeline-1.0/audio, #3516). It is available on dest and prod. This job mints a reusable audio file. If you need a join only inside one render, use Timeline 1.0 audio.parts[], and do not use this job.

Timeline audio joins Sume-hosted audio into one gapless file (operation: concat) or slices one file into ranges (operation: split). It returns durable media.sume.com URLs plus timings. The join is sample-domain, with no re-TTS and no silence at the seams. The server compiles ffmpeg on the same worker media runtime as the render (apps/api/src/routes.ts createTimelineV1Audio / submitSumeTimelineAudioJob).

text
POST /v1/timeline-1.0/audio

This surface has no GET /v1/timeline-1.0/audio/:id. Poll the job envelope:

text
GET /v1/jobs/:id/status
GET /v1/jobs/:id/result

The hosted MCP tool is timeline_audio (packages/mcp-server/src/mcp.ts). Writes need idempotency_key (and mcp:write under OAuth). The flow is timeline_audio → jobs_wait → jobs_result.

Concat

The required fields are operation: "concat" and parts[] (1–20, ordered). Each part is { url, source_in?, duration? }. Do not send url or ranges at the top level (audio_concat_takes_no_url / audio_concat_takes_no_ranges).

All URLs must already be this workspace’s media.sume.com audio. Import the files first (POST /v1/media-imports). Idempotency-Key is required.

The default mode is async. To wait up to 30 seconds for a 200 finished job, pass mode: "sync". Otherwise, you get 202. Then poll the job.

bash
curl -X POST https://api.sume.com/v1/timeline-1.0/audio \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: timeline-audio-concat-001" \
  -d '{
    "operation": "concat",
    "parts": [
      { "url": "https://media.sume.com/artifacts/artf_demo/line1.wav" },
      { "url": "https://media.sume.com/artifacts/artf_demo/line2.wav", "source_in": 0.1, "duration": 1.8 }
    ]
  }'

The result is kind: timeline_audio with one audio_url, duration_seconds, and segments[] (index, start, duration_seconds). The segments are the concat offsets that you use to re-base Timeline 1.0 video[].start. Use that file as audio.url on the render, or as Avatar 1.0 image-to-video audio.

All parts must have the same channel layout (audio_parts_channel_mismatch).

Split

The required fields are operation: "split", a top-level url, and ranges[] (1–20). Each range is { start, end? } (if you omit end, the range goes to the end of the file). Do not send parts (audio_split_takes_no_parts). Ranges can overlap.

bash
curl -X POST https://api.sume.com/v1/timeline-1.0/audio \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: timeline-audio-split-001" \
  -d '{
    "operation": "split",
    "url": "https://media.sume.com/artifacts/artf_demo/spine.wav",
    "ranges": [{ "start": 0, "end": 12.4 }, { "start": 12.4 }]
  }'

The result is kind: timeline_audio with segments[], and each segment has its own audio_url. For many ranges from a talking-head MP4, use audio detach one time. Then split the audio here.

Output format

The optional output.format is wav (default, pcm_s16le, sample-exact) or mp3 (smaller, adds priming padding again at every edge). Keep wav if you will join the file again or if the file drives lip-sync.

The produced audio is ≤ 1800 s.

Each job uses a flat number of credits. The API rate card lists the current credits. The job uses no provider inference, only worker ffmpeg.

Refusals (stable codes)

CodeWhen
audio_concat_requires_partsConcat without parts.
audio_concat_takes_no_url / audio_concat_takes_no_rangesConcat plus a split field.
audio_split_requires_url / audio_split_requires_rangesSplit without url or ranges.
audio_split_takes_no_partsSplit plus parts.
audio_range_end_before_startA range end ≤ start.
audio_parts_channel_mismatchConcat parts do not share a channel layout (worker).
unsupported_media_source / source_not_foundOff-host or dead URL.
Provider / ffmpeg keys400 — filtergraph, ffmpeg_args, codec, crf, and similar keys.

Sume rejects off-host URLs (https://example.com/…) at admit. Import the files first.

Not this surface

NeedUse
Audio track of one video as wav / mp3Audio detach
Join only for one renderTimeline 1.0 audio.parts[]
Sequence several clipsTimeline 1.0
Still + video in one frameTimeline compose
Speech-to-textPOST /v1/stt-1.0/transcribe

Related

  • Timeline 1.0
  • Timeline compose
  • Audio detach
  • Media inputs
  • Jobs and results
  • MCP tools and gates

On this page

  • Concat
  • Split
  • Output format
  • Refusals (stable codes)
  • Not this surface
  • Related