CompMaker
A web app for YouTube creators who build compilation videos. Paste links, trim intros and outros per clip, choose transitions, and export a single file—without tying up the browser or installing desktop encoders. Heavy lifting runs on a background job pipeline so the UI stays responsive while exports finish on the server.
Compilations do not belong in the browser tab
Creators stitch multiple YouTube clips into one upload. Doing that locally means large downloads, fragile ffmpeg setups, and a machine that freezes for the length of an encode.
CompMaker separates concerns: the browser is the editing surface—URLs, trim ranges, transitions, and export settings—while a dedicated worker pipeline downloads, trims, and stitches on the server. Creators get a fast UI and a finished file when the job completes.
From paste to download
Paste a YouTube URL and load metadata in one step. Set in/out points per clip, add up to 30 segments within a five-hour total runtime cap, then choose resolution, container format, and transition style before starting a render.
Browser → configure clips & export API validates limits → job enters queue Worker: acquire sources → trim → stitch → deliver Poll progress → download finished compilation
Per-clip control before export
Each clip has its own trim sliders and a visual region on the timeline. Transitions include hard cuts, crossfade, slide, and wipe—with adjustable overlap up to three seconds—so pacing can match the creator’s style.
Exports support up to 1080p with MP4 (H.264), MKV, or WebM (VP9), chosen up front so the pipeline encodes once to the target the creator needs for upload.
Split UI and compute
A pnpm monorepo with a Next.js front end, a queue-backed worker, and shared packages for validation and media orchestration—designed to deploy on a single VPS without sacrificing clarity.
Web application
Next.js App Router UI with accessible controls, real-time job status, and API routes that enqueue work and fetch video metadata without blocking the main thread on long-running encodes.
Job queue & progress
BullMQ on Redis serializes heavy renders so one small host stays predictable under load. This avoids CPU contention and unpredictable encode times when multiple users submit jobs simultaneously. Progress and status are persisted for polling, so users see queue position and encode phase without a persistent WebSocket layer.
Media worker
A staged pipeline: acquire each source, trim with stream copy where possible, stitch with concat or transition filters, then write the final export. Intermediate assets are removed after success to control disk use.
Guardrails at the edge
Shared schemas enforce maximum clip count, total trimmed duration, and valid in/out ranges before any job is accepted—so the worker never starts work that cannot succeed.
Built for a constrained host
The platform is designed around modest infrastructure: sequential rendering by default, tolerance for long-running jobs, and automatic cleanup of temporary assets after each export.
Rights and platform limits
CompMaker only processes URLs the user supplies. Creators must have rights to the footage they compile. The tool works with publicly available sources and does not position itself as a way to bypass YouTube’s access rules.
It is a productivity layer for people who already edit compilations—not a content library or re-hosting service.
What this project demonstrates
Max trimmed runtime
Max export resolution
Predictable hosting
“Treat the browser as the control plane and the server as the factory floor. That split keeps creator workflows responsive while still producing high-quality exports from modest infrastructure.”— CompMaker architecture
Summary & core learnings
Offload compute, not creative decisions
Trim points, transitions, and format choices stay in the client; only deterministic media steps run remotely.
Queue before you scale hardware
Fair job ordering and visible progress set expectations when multiple creators share one encode host.
Validate before you encode
Duration and trim rules fail in the API so expensive ffmpeg work never starts on impossible inputs.