English · Português (BR) · Русский · 简体中文
The easiest way to download OmniGet. Open the site, click download and install. No need to find your way around GitHub.
Paste a link from almost any site and get the file. Or ask Claude to do it for you.
A free, open source video downloader for Windows, macOS and Linux: YouTube, Instagram, TikTok, X, Reddit, Twitch, torrents and the sites yt-dlp supports.
Its MCP server lets Claude Code, Cursor, VS Code and Codex queue downloads for you, and it runs Claude Code, Codex, Gemini CLI and local models as agents in a window.
Free and open source under GPL-3.0. No account, no ads, no telemetry on what you download. Your files stay on your computer.
- Let Claude download it: OmniGet as an MCP server
- The downloader
- AI agents in a window: a desktop app for Claude Code, Codex and Gemini CLI
- The World: watch your agents work
- Tools: coming back
Also: Download and install · Superpowers · Everything else · Privacy · Support OmniGet · FAQ · Command line · Build from source · Platform owners · Contributing
Turn on OmniGet's MCP server and let Claude Code download videos for you. Claude Code, Cursor, VS Code, Codex, Goose and Claude Desktop can look at a link, queue it, wait for it to finish and tell you what failed and why. The download runs in OmniGet, with its queue, retries and the cookies you already gave it, so the agent never has to install yt-dlp or guess its flags.
Things you can ask, in plain English:
Download this playlist as audio and tell me when every file is done: <url>
Check which formats this video has, then download the best one up to 1080p.
Here are 12 links. Queue them all, wait, and tell me which ones failed and why.
Is anything stuck in my OmniGet queue? Retry what can be retried.
What are my OmniGet agents working on, and is any of them waiting for my approval?
- In OmniGet, open LLM → MCP → Your endpoint and turn the server on.
- Create a connection for your client and tick what it may do: only read the queue, or also add, pause and cancel downloads, read finished files, or start work for your agents. Each connection gets its own token.
- Copy the snippet the page prints for your client. For Claude Code it is one command, with the address the page shows:
read -rs OMNIGET_MCP_TOKEN && export OMNIGET_MCP_TOKEN
claude mcp add --transport http --scope project omniget <address from the page> --header 'Authorization: Bearer ${OMNIGET_MCP_TOKEN}'The token never goes on the command line, so it stays out of your shell history. Cursor, VS Code, Codex and Goose get a config block; Claude Desktop uses the omniget-mcp adapter that ships with each release.
| Group | Tools |
|---|---|
| Queue downloads | Add one link or up to 20 at once, as video (up to 2160p) or audio |
| Follow them | List the queue, read one download, wait for a change, pause, resume, cancel, retry |
| Before downloading | List a video's formats; page through a playlist's entries; check the link and free space |
| When something fails | Read cleaned-up engine logs, get a diagnosis from what the download left behind, get recovery options |
| After downloading | Read the finished files' details and get temporary access to them |
| Your agents | List agents and folders, start, pause, resume or cancel a mission, read its events and results, see pending approvals |
- The server is off until you turn it on, and it only listens on
127.0.0.1. Requests from a web page are refused. - Each client has its own token and only the permissions you ticked. Revoke one without touching the others.
- Approvals for your agents are answered in the OmniGet window, never through MCP.
The claude-plugin/ folder is a plugin for Claude Code that works without the app. Paste a video or social post link with a request, and its skills fetch or transcribe it. The commands are there when you want to be explicit:
/plugin marketplace add tonhowtf/omniget
/plugin install omniget@omniget
/omniget:setup # installs yt-dlp, ffmpeg and omniget-cli after one confirmation
/omniget:fetch <url> [--audio] # the media file, to ~/Downloads/omniget
/omniget:transcribe <url|file> # captions, then local whisper.cpp, then Gemini or OpenAI if you added a key
/omniget:research <url> # caption and transcript turned into a Markdown note with [mm:ss] references
/omniget:doctor # what is installed, what is missing, how to add it
If the desktop app is installed, the plugin reuses the yt-dlp and FFmpeg it already manages.
You keep one site for Instagram, another for X videos, a yt-dlp cheat sheet because the flags never stick, and none of them remember your login. OmniGet puts that behind one box: paste a link, see the title and the qualities, press Enter. yt-dlp and FFmpeg install themselves and stay updated, so there is nothing to configure and no terminal to open. It's a yt-dlp GUI and a download manager in one: a queue that resumes, retries and uses the logins you already have.
OmniGet has its own extractors for the sites people use most and hands the rest to yt-dlp, which covers roughly 1,800 sites.
| Category | Sites and formats |
|---|---|
| Video and audio | YouTube (videos, playlists, channels, live streams from the start, chapters, SponsorBlock), Instagram, TikTok, X/Twitter, Reddit, Twitch, Vimeo, Bluesky, Threads, Pinterest, Douyin |
| Bilibili | Signed in, up to the quality your subscription allows, with danmaku comments |
| Image galleries | Whole galleries and profiles from the sites gallery-dl supports (DeviantArt, Pixiv, ArtStation, Flickr, Tumblr, Imgur and more) |
| Files | .torrent files and magnet links with a built-in BitTorrent client, direct HTTP files, HLS and DASH streams |
| Person to person | Send a file to another OmniGet with a short word code |
| Everything else | The long tail through yt-dlp |
Video up to 4K, or audio only as MP3, M4A, Opus, FLAC or WAV. Subtitles as SRT or VTT, embedded or beside the file.
- Open OmniGet. The first screen asks for your language, then installs yt-dlp and FFmpeg with one click. yt-dlp is checked against its SHA-256 before it runs.
- Copy a link: a YouTube video, an Instagram reel, an X post, a Pinterest board, a magnet link, a direct file URL.
- Paste it on the home screen, pick a quality and press Enter.
The Downloads page shows speed, phase and ETA read straight from the downloader, so a stalled download looks stalled instead of frozen at "3 seconds left". Interrupted downloads resume where they stopped, and rate-limited sites are retried with backoff. Every download keeps the exact yt-dlp command it ran: open it, change a flag, retry.
Copy a link anywhere and press Ctrl+Shift+D (Cmd+Shift+D on macOS): OmniGet reads the clipboard and downloads in the background. Ctrl+Shift+M grabs audio only, so a YouTube link becomes an MP3 without opening anything. Both are off until you enable them in Settings → Downloads, where you can also rebind them.
Settings you choose once: default quality, audio format, subtitle languages, filename template, folders per platform, skip existing files, split by chapters, speed limit, concurrent downloads and proxy. Rules send a channel or a site to the folder and quality you picked, and followed channels are checked in the background for new uploads.
| OmniGet | yt-dlp alone | Download websites | |
|---|---|---|---|
| Sites | Its own extractors, torrents and direct files, plus everything yt-dlp supports | About 1,800 | Usually one |
| Setup | Download one file, open it | Python or a binary, FFmpeg, PATH, flags | None |
| Content behind your login | Your browser cookies, through the extension | Export cookies by hand | Rarely |
| Queue | Resume, retry with backoff, rules, followed channels | One command at a time | No |
| AI agents can use it | Yes, through MCP | Through a shell | No |
| Price | Free, GPL-3.0 | Free, Unlicense | Free with ads |
yt-dlp is the engine OmniGet runs on, and OmniGet would not exist without it.
For Chrome and Firefox. On sites it recognizes it sends the page to OmniGet with one click or Alt+O. On any other site it watches the page's traffic for MP4, HLS, DASH, WebM and audio streams and lists them in its popup. Either way it forwards your cookies, which is what lets OmniGet download what you can see while logged in, such as Instagram stories or a members-only video. When the sniffer can't see a player, Deep search hooks it and catches the playlist. For computers that stutter on VP9 and AV1, the popup has a Force H.264 switch for YouTube.
Install and pair the extension
From inside the app (easiest).
- In OmniGet, go to Settings → Network → Browser extension and click Update / Install next to Chrome. OmniGet copies the extension to a folder and opens it.
- In Chrome (Edge, Brave and other Chromium browsers work the same way), open
chrome://extensionsand turn on Developer mode. - Click Load unpacked and pick the folder OmniGet opened.
- Back in OmniGet, click Pair extension. Within a few seconds the app says "Extension connected". Done.
Your cookies then show up in Settings → Cookies, one entry per site, with a test button each.
From the release zip. Every release ships omniget-chrome-extension-vX.Y.Z.zip. Unzip it and follow steps 2 to 4. Useful when the app and the browser are on different machines.
Firefox. Export it the same way, open about:debugging#/runtime/this-firefox, click Load Temporary Add-on and pick manifest.json in the exported folder. Firefox forgets temporary add-ons on restart, so load it again after one.
Manual pairing. If Pair extension times out, open the extension's options page, copy the Pairing token from OmniGet and paste it there. The app listens on 127.0.0.1 ports 47720 to 47729 and the token is made per install, so nothing leaves your machine. With OmniGet closed, clicks fall back to the omniget:// link scheme and queue the URL.
Claude Code, Codex, Gemini CLI and local models become agents in a desktop window. You attach a folder, ask for a change, read the diff before anything is written, and undo the whole turn with one click. The agent keeps the login and the plan you already pay for.
| You want to | Open | What happens |
|---|---|---|
| Have an agent change code in a folder | LLM → Chat | It reads, edits and runs commands inside that folder only, asks before it writes, and one click undoes the turn |
| Use Claude Code or Codex with your own account | LLM → Accounts | Detected CLIs join as agents, several accounts can coexist, and each one's usage is on screen |
| Run agents on a local model, offline | LLM → Models | Ollama, LM Studio or llama-server, with no key |
| Leave work running | LLM → Jobs, Loops | A job survives closing the window and a crash; a Loop repeats until your check command passes |
| Give an agent a bigger goal | LLM → Missions | A mission has completion criteria and keeps its events and results |
| Start work on a schedule | LLM → Jobs → Triggers | A cron line or a webhook on the local bridge starts a job |
| Use other MCP servers in your agents | LLM → MCP → Servers you use | Each tool is granted per agent as auto, ask or deny |
- Claude Code and Codex accounts plug in with the login your terminal already has, and their quota shows on screen.
- OmniGet is an Agent Client Protocol client. Gemini CLI, claude-code-acp, codex-acp, goose and opencode join from LLM → Accounts. The agent keeps its login and model, and its permission requests show up in OmniGet.
- Your own keys for OpenAI, Anthropic, OpenRouter, Gemini, DeepSeek, Groq, xAI, Mistral and others, with a router that moves to the next one when a quota runs out.
The command line ships with every release. It talks to the running app, so jobs you start from a terminal show up in the window.
omniget-cli claude # open Claude Code on one of the app's accounts
omniget-cli claude --list # the Claude accounts, with e-mail and plan
omniget-cli usage --watch 60 # 5 h and 7 day windows and spend, per Claude Code and Codex account
omniget-cli agent run "Fix the failing test in src/cart.js" --agent claude-code --workspace .
omniget-cli agent loop "Make the tests pass" --workspace . --check "npm test" --rounds 5
omniget-cli agent jobs # recent jobs; pass an id to follow one, --cancel to stop itomniget-cli claude skips Claude Code's permission prompts by default; add --safe to keep them.
- Eleven tools, one folder.
fs_read,fs_list,fs_glob,fs_grep,fs_edit,fs_write,fs_apply_patch,shell_exec,todo_write,kb_searchandkb_write. Every path is resolved inside the folder you attached; a path outside it becomes its own question. - A sandboxed shell. On macOS
shell_execruns under seatbelt: no network, writes only inside the folder. - Permission with the evidence on screen. Anything that writes asks first and shows the command or the diff. Always stores a rule by command prefix (
git status *,npm run test *). A chained line needs a rule for every part, and$(…), backticks and>never ride on a rule. - Undo takes the whole turn back. Before the first write of a turn OmniGet snapshots the folder into a shadow git that never touches your repository. It covers edits made by Claude Code and ACP agents too.
- A memory the team shares.
AGENTS.md(orCLAUDE.md) plus notes in.omniget/kb/, inside your project. - Skills install from a folder, a zip or
owner/repo, after a scan. - Budgets per agent: dollars per day, tokens per turn, tool calls per turn.
Measured on the demo project (one failing test, a one-character bug), release build, Apple Silicon: Claude Code through OmniGet fixes it in about 15 seconds; qwen3:8b on Ollama does the same in about 3 minutes.
- A job is an agent turn that outlives the window. It lives in a SQLite queue with its state, its log and what it cost. A job that needs a permission shows Allow / Always allow / Deny on its row.
- A Loop repeats rounds until a check passes. Give it a prompt and a command (
npm test,cargo test); it ends when the check exits 0 or the rounds or minutes run out. Close the window and it keeps running from the tray; kill the process and the next launch picks the round up again. - Triggers. A five-field cron line or a webhook,
POST /v1/hooks/<id>on the local bridge, where the body becomes{{body}}in the prompt.
- The limits strip. A thin strip on a screen edge with one ring per coding assistant: how much of each limit is gone, when it resets, and whether it is working or waiting. Off until you turn it on in LLM → Accounts. Each reader only opens the login that tool already keeps on your machine, read-only.
- A menu bar icon with the same numbers in a small panel, and
omniget-cli usagein the terminal.
Your agents live in an isometric house. Each one has its own desk and workbench, walks to it when a turn starts, shows the tool it is running in a balloon (fs_edit cart.js, shell_exec) and waves at you when it needs permission. When its quota runs out it goes to bed. The Activity panel beside the house lists who is doing what. /world?demo=1 plays a scripted run without spending a token.
- Visits. Open the house gives you a code such as
ZZCJ-YA09. A friend types it and walks in: they see your agents at work and can talk, and that is all they can do. The relay only passes frames along; your keys and your agents stay on your machine. The public relay iswss://chat.tonho.wtf/v1/room, andomniworld-serverinscripts/omniworld-server/lets you host your own. - The City. A shared town on a server, with an account on that instance. Claim a plot and your house gets a permanent address; give it residents who keep their own routine after you close the app. Set the server in Settings → World.
- The pet. A floating Omni that reacts to what your agents do, including Claude Code or Codex running in a terminal, and answers their permission prompts.
The simulation is a Rust crate and the renderer is WebGL2. With eight agents working at once it held a median of 64 frames per second on the test machine.
The Tools section is being rebuilt and is not in the current app. When it returns, it will be in the release notes first.
Every build is on the Releases page. Updates arrive inside the app.
| System | What to download | Other ways |
|---|---|---|
| Windows 10 / 11 | omniget_x.y.z_x64-setup.exe (installer)omniget_x.y.z_x64-portable.exe (no install)omniget_x.y.z_x64_en-US.msi (for IT deployments) |
winget install -e --id tonhowtf.OmniGet |
| macOS 10.15+ | omniget_x.y.z_aarch64.dmg for Apple Siliconomniget_x.y.z_x64.dmg for Intel Macs |
brew install --cask tonhowtf/tap/omniget |
| Linux | .deb for Debian and Ubuntu.rpm for Fedora, openSUSE and the RHEL family.AppImage for everything else(x86_64 and ARM64) |
The AppImage updates itself through its .zsync file |
OmniGet ships without a paid code-signing certificate, so each system asks for confirmation the first time. You handle it once.
Windows. SmartScreen shows a blue box. Click More info, then Run anyway.
macOS. Gatekeeper may say the app is "damaged". After you drag OmniGet into Applications, open Terminal and paste:
xattr -cr /Applications/omniget.app
codesign --force --deep --sign - /Applications/omniget.appLinux, AppImage on Debian 12+ or Ubuntu 24.04+. If the file fails with a libfuse error, run sudo apt install libfuse2, or start it with ./omniget.AppImage --appimage-extract-and-run. The .deb avoids this.
Linux: an empty window when a video player opens
WebKitGTK plays media through GStreamer and closes its own web process when the plugins are missing. Most desktop distributions have them; Arch and minimal images treat them as optional:
sudo apt install gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-libav # Debian, Ubuntu
sudo dnf install gstreamer1-plugins-good gstreamer1-plugins-bad-free gstreamer1-plugin-libav # Fedora
sudo pacman -S gst-plugins-good gst-plugins-bad gst-libav # ArchPortable mode (Windows). Put an empty file named portable.txt next to the .exe. Settings, the database, cookies, yt-dlp and FFmpeg move to a data folder beside it, so the whole install fits on a USB stick.
Extra abilities you switch on when you need them, in Superpowers in the sidebar. Today there is one: a League of Legends helper that reads your running client locally, with match scouting, live gold and levels, runes applied in one click and opt-in automation such as accepting matches. Nothing runs until you turn it on in Settings → Advanced.












