Compatible files

What you can send, and what you can get back. Reading is the wider set — a container can be perfectly readable without being something worth encoding to — so the two lists differ per medium.

These tables are generated from the SDK itself, so they can't drift from what the engine actually does. If a format is listed, it works. How each medium behaves on the way through — the encode dials, what survives a pass, what gets dropped — is on its own page: Images, Video, Audio, Documents.

Images

DirectionFormats
Send uspng, jpg, jpeg, webp, gif, avif, tiff, tif
Get backpng, jpg, webp, gif, avif, tiff

Video

DirectionFormats
Send usmp4, m4v, webm, mov, mkv, avi, ogv, mpg, mpeg, ts, 3gp
Get backmp4, webm, mov, mkv

Audio

DirectionFormats
Send usmp3, m4a, m4b, aac, opus, ogg, oga, flac, wav, wave, aiff, aif, wma, amr, caf
Get backmp3, m4a, opus, flac, wav

Documents

DirectionFormats
Send uspdf
Get backtxt, md

One medium per pipeline

A graph operates on one medium: image.* nodes take images, video.* take video, document.* take PDFs. Mixing families in one graph is rejected at validation, before anything uploads.

  • The SDK types an input from its filename (or an explicit contentType). A name it doesn't recognise is refused at the call site, so a whole batch never uploads to find out.
  • Within a batch, one bad file fails only its own slot — the rest still complete, and only successful outputs are billed.
// A .txt in an image queue fails that one entry, before any upload.
const results = await tk.runQueue(files, 'image').convert({ format: 'webp' });

for (const r of results) {
  if (!r.ok) console.error(r.filename, r.error); // "Expected an image file, got notes.txt"
}

Next steps

  • Recipes — turn a format into a working call.