Convert uploads for web playback

Users upload MOV, MKV, AVI, WebM. Browsers want h264 + AAC in MP4. Converting uploads on ingest means every video plays everywhere, without relying on browser codec support.

API

curl -X POST https://api.ittybit.com/tasks \
  -H "Authorization: Bearer $ITTYBIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"input": "https://your-bucket.s3.amazonaws.com/uploads/video.mov", "kind": "video"}'
const res = await fetch("https://api.ittybit.com/tasks", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.ITTYBIT_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    input: "https://your-bucket.s3.amazonaws.com/uploads/video.mov",
    kind: "video",
  }),
});
const task = await res.json();
import requests

res = requests.post(
    "https://api.ittybit.com/tasks",
    headers={"Authorization": f"Bearer {api_key}"},
    json={
        "input": "https://your-bucket.s3.amazonaws.com/uploads/video.mov",
        "kind": "video",
    },
)
task = res.json()

No options needed — defaults produce MP4 with h264 + AAC.

Compress with quality:

{"input": "https://...", "kind": "video", "options": {"quality": "medium"}}

CLI

ittybit video -i upload.mov -o web.mp4
ittybit video -i upload.mov -o web.mp4 --quality medium

Resizing

ittybit video -i upload.mov -o web.mp4 --width 1280 --quality medium

Height auto-calculates to preserve aspect ratio.

Quality guide

LevelUse caseTypical savings
very_lowPreviews~90% smaller
lowMobile~85% smaller
mediumGeneral web~75% smaller
highStreaming~50% smaller
very_highArchival~30% smaller

S3 input/output

Process files directly from and to your own S3 storage using connections:

ittybit video -i s3://uploads/raw.mov -o s3://media/web.mp4 --connection my-s3 --quality medium

See also