Coming soon · Video Upload API

Resumable upload.
Quality-first transcode.

tus protocol for chunked, resumable uploads. CRF-20 quality-first H.264/H.265 transcode to adaptive HLS, 360p through 4K. The drop-in alternative to Mux + S3 + CloudFront for indie creators who care about quality.

0:42 / 3:18 1080p · HLS
What you get

Quality first. Predictable bill.

Mux is fast. Cloudflare Stream is cheap. Both compress hard and bill in confusing units. We prefer CRF-20 and a flat tier.

01 / Upload

tus protocol, chunked

Resumable uploads at the network level. Connection drops? Pick up where you left off. Phone uploads, mobile networks, big files — just works.

02 / Transcode

CRF-20 quality-first

Most platforms target a bandwidth budget. We target a quality budget. Your output looks better at the same size, costs more storage — we eat that.

03 / Playback

HLS, 360p–4K

Adaptive bitrate ladders generated automatically. Player handles network changes, picks the right rung. Works on every browser; iOS plays HLS natively.

04 / Player

Bring yours, or use ours

Stock embed: <video> + Hls.js, no UI lock-in. Want Plyr, Vidstack, Video.js? They all consume HLS. We ship a standard manifest.

05 / Captions

VTT extracted & auto-synced

Whisper-derived captions on every upload, free. Override with your own VTT if you want. Multi-language support on Pro tier.

06 / Privacy

No tracking, no ads

The player makes one request: the manifest. No analytics pixels, no third-party JS. The viewer’s IP hits your CDN and ours, nobody else.

Upload from code

tus client. Five lines.

Use any tus client (browser or Node). Get back a video ID. Embed when transcoding finishes (~30s after upload).

import { Upload } from 'tus-js-client';

const upload = new Upload(file, {
  endpoint: 'https://api.jandgstudios.fun/v1/video/upload',
  headers: { 'Authorization': `Bearer ${apiKey}` },
  metadata: { filename: file.name, filetype: file.type },
  onProgress: (sent, total) => render(sent / total),
  onSuccess: () => fetchPlaybackUrl(upload.url),
});
upload.start();
Pricing preview

Flat. By bandwidth, not by minute.

No per-minute encode charges. No per-minute streaming charges. Storage and bandwidth, that’s it.

Free
$0/mo
No card.
  • 1 GB storage
  • 10 GB bandwidth/mo
  • 360p – 1080p ladder
  • Whisper captions free
Pro
$45/mo
Or $450/yr.
  • 500 GB storage
  • 5 TB bandwidth/mo
  • Custom domain (CNAME)
  • Webhooks on transcode
  • Live streaming (beta)

Be first to ship video.

We’ll email you when the Video Upload API opens. Waitlist members get permanent early-bird rates.