Self-hosted. Source quality. No cloud, no subscription. Runs entirely on your own hardware.
ytclip is a self-hosted web app that lets you cut any moment from any YouTube video — at the highest available quality — without touching a cloud server. Paste a URL, drag the handles, hit Create. Done.
Drop any YouTube link into the input. ytclip fetches the video metadata and loads the embedded player instantly.
Drag the timeline handles to your exact start and end. Type timestamps directly or use the ⏱ button to capture the current playback position.
Hit Create Clip. Watch real-time ffmpeg progress stream in. When it's done, click Download — the file goes straight to your device.
Merges the best available video and audio streams. Set a quality cap in config if you prefer. MKV mode stream-copies with zero re-encoding.
Downloads only the video segments that cover your clip window — not the full file. Dramatically reduces bandwidth for large videos.
MP4 (H.264), MKV (stream-copy, no re-encode), MP3, or AAC. Choose per clip. Set a default in config.
Real-time ffmpeg output piped to your browser via Server-Sent Events. No polling. No page refresh.
Run multiple clip jobs simultaneously. Configurable concurrency. Jobs persist across server restarts in SQLite.
Script it. Automate it. The ytclip clip command runs standalone — no server needed.
Drag a crop box over the video thumbnail — choose 9:16 portrait, 1:1 square, 4:5, 16:9 widescreen, or a fully custom region. Output resolution updates live as you drag. Perfect for repurposing landscape YouTube content into portrait-first social clips without leaving the browser.
The ytclip command runs yt-dlp and ffmpeg locally — no server, no UI required. Delegate to a running instance with --server-url.
ytclip is a personal-use tool. Downloading content from YouTube may violate their Terms of Service and/or copyright law depending on what you download and where you are. You are solely responsible for the content you clip. ytclip has substantial legitimate uses — your own videos, public domain content, Creative Commons licensed material, fair-use clips. The tool itself is legally equivalent to yt-dlp, which has existed as open-source software without successful legal challenge.
ytclip can create clips from most YouTube videos using yt-dlp. However, the embedded player preview may be unavailable for videos where the uploader has disabled embedding — this is a YouTube restriction and cannot be bypassed. When that happens, ytclip shows a "Preview unavailable" card but the timeline and clip creation still work normally using server-fetched duration data.
No. ytclip bundles a static ffmpeg build via static-ffmpeg as a fallback. If you have a system ffmpeg installed, it will be preferred. The Docker image includes a full ffmpeg installation. For bare Python installs, everything works out of the box without any manual ffmpeg setup.
Yes, but enable password auth first in your config.toml:enabled = true and password = "your-strong-password" under [auth]. Running behind a reverse proxy (Caddy, nginx) with HTTPS is strongly recommended. Note: SSE progress streaming requires proxy_buffering off in nginx.
No hard limit by default. Set max_clip_duration in your config to impose one (value in seconds, 0 = no limit). Very long clips may take a while depending on your hardware and network speed.
Export your YouTube cookies from your browser (using an extension like "Get cookies.txt LOCALLY") and point ytclip to the file via cookies_file in your config. This lets yt-dlp authenticate as your account and access restricted content you have permission to view.
Support is completely optional — ytclip will always be free and open source. But if you'd like to say thanks, here are a few ways.