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.
Mux is fast. Cloudflare Stream is cheap. Both compress hard and bill in confusing units. We prefer CRF-20 and a flat tier.
Resumable uploads at the network level. Connection drops? Pick up where you left off. Phone uploads, mobile networks, big files — just works.
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.
Adaptive bitrate ladders generated automatically. Player handles network changes, picks the right rung. Works on every browser; iOS plays HLS natively.
Stock embed: <video> + Hls.js, no UI lock-in.
Want Plyr, Vidstack, Video.js? They all consume HLS. We ship a
standard manifest.
Whisper-derived captions on every upload, free. Override with your own VTT if you want. Multi-language support on Pro tier.
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.
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();
import tus from 'tus-js-client'; import fs from 'fs'; const file = fs.createReadStream('lecture.mp4'); const upload = new tus.Upload(file, { endpoint: 'https://api.jandgstudios.fun/v1/video/upload', headers: { 'Authorization': `Bearer ${process.env.JG_API_KEY}` }, uploadSize: fs.statSync('lecture.mp4').size, }); upload.start();
# Single-shot upload for small files (skip tus, use multipart). curl -X POST 'https://api.jandgstudios.fun/v1/video/quick-upload' \ -H 'Authorization: Bearer $JG_API_KEY' \ -F 'file=@clip.mp4'
<!-- Stock embed --> <video controls playsinline style="width:100%"> <source src="https://stream.domainless.fun/abc123/playlist.m3u8" type="application/vnd.apple.mpegurl" /> </video> <!-- Browsers without native HLS need hls.js — see docs -->
No per-minute encode charges. No per-minute streaming charges. Storage and bandwidth, that’s it.
We’ll email you when the Video Upload API opens. Waitlist members get permanent early-bird rates.