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.
Add multiple clip segments to a queue, then hit Export All. Each runs as an independent job with live SSE progress — no waiting between clips.
Download and burn English subtitles directly into the video. Full style control: font size, colour, background (none/shadow/box), and position (top/bottom).
Save any combination of format, speed, crop, watermark, and subtitle settings as a named preset. Load back with one click. Stored server-side in SQLite.
Every completed clip gets a hosted /share/{id} page with embedded player and social share buttons.
Publish to YouTube Shorts, Instagram Reels, TikTok, and LinkedIn without leaving ytclip. Connect accounts once via OAuth, then publish any clip with two clicks.
Save named brand profiles — logo, watermark position, subtitle style, default format. Switch between brands or clients in a single click.
Crop for Reels. Slow down for drama. Brand every clip. Export as GIF. Four tools that turn one YouTube video into content for any platform — no third-party apps, no re-uploads.
Drag a crop box over the thumbnail. Pick 9:16 for Reels & Shorts, 1:1 for Instagram feed, 4:5 for portrait, or draw a custom region. Output resolution updates live.
Slow down to 0.25× for cinematic highlights, or ramp up to 2× for time-lapses. Audio pitch is automatically preserved at every speed.
One-click animated GIF with two-pass palette optimisation for vivid colours and small files. WebP for Discord, Notion, and modern web embeds.
Stamp your handle, channel name, or upload a logo PNG. Four corner positions. The app remembers your last 5 watermarks for instant re-use — no re-uploading.
Connect your accounts once via OAuth in Settings. When a clip finishes, click the platform icon and hit Publish — ytclip uploads directly, no download-then-re-upload loop.
Save a complete brand profile — logo, watermark position, subtitle style, and default format — under one name. Switch between brands or clients in a single click.
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.
Each platform requires a free developer app. Create an app on the platform's developer portal, add {your-ytclip-url}/publish/callback/{platform} as an OAuth redirect URI, then copy the client ID and secret into config.toml under [platforms.youtube], [platforms.instagram], etc. Also set public_url to your ytclip address. Restart ytclip, go to Settings → Platform Connections, and click Connect. Full step-by-step setup is in the README.
Not in a single action, but you can click each platform's publish button in quick succession. Each upload runs as a background task independently. The status (uploading → published / failed) updates live on the job card for each platform separately.
A preset saves a full form state — start/end times, speed, crop, and all other per-clip settings. A brand kit is identity-focused: logo, watermark position, subtitle style, and default format as a reusable profile. Apply a brand kit to stamp consistent branding on every clip, then adjust clip-specific settings on top. Manage brand kits at Settings → Brand Kits.
Instead of clicking Create Clip immediately, click Add to Queue. The current form state is captured and added to the queue panel. Repeat for as many segments as you like. Click Export All to fire every queued item as an independent job with its own real-time progress card. You can continue adding more clips while previous ones are processing.
When subtitles are enabled, ytclip downloads the English subtitle file via yt-dlp and passes it through ffmpeg's subtitles filter, which renders the text permanently into the video. You control font size (16–36px), colour, background style (none / shadow / box), and vertical position (top or bottom). The burn-in is permanent — intentional for social clips where captions are expected without user interaction.
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.