Udemy & Hotmart course downloader, YouTube downloader (yt-dlp GUI, 1,800+ sites) + desktop app for AI agents: Claude Code, Codex, Gemini CLI, Ollama. Permissions, undo, jobs, loops until tests pass, MCP server, 156 tools, course player. Free and open source for Windows, macOS and Linux. No terminal. Your files stay on your computer.
<a id="agents-and-the-world"></a>
Claude Code, run through OmniGet, fixes a failing test in about 15 seconds from one command. It asks permission with the diff on screen, and one click takes the whole turn back. New in 0.10 and now the centre of the app, OmniGet is a desktop app for AI coding agents. It carries the whole system that goes around an agent: a coding harness with permissions and undo, a durable job queue with loops and triggers, a roster that takes your local models, your API keys and the agent CLIs you already pay for, a project memory, and a small world where those agents live and where you can watch them work. It runs on your machine. Nothing talks to the network until you add a key, start a local model or open your house.
| 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 |
| Leave work running | LLM → Jobs, Loops | The turn survives closing the window and a crash; a Loop repeats until your check command passes |
| Start work on a schedule or from another program | LLM → Jobs → Triggers | A cron line or a webhook on the local bridge starts a job |
| A GUI for Claude Code, Codex or Gemini CLI | LLM → Accounts | They join the roster as agents, keep their login, ask permission through OmniGet |
| Agents on a local model, offline | LLM → Models | Ollama, LM Studio or llama-server runs the same tools with no key |
| Several agents in parallel | LLM → Jobs, World | Two jobs run at once, agents delegate to each other, each at its own workbench |
| See who is doing what | World | Each agent walks to its own workbench, shows the tool in a balloon and waves when it needs you |
| Show a friend | World → Open the house | A code, a visit, a chat. Your app stays the authority |
<a id="talk-and-code-llm-in-the-sidebar"></a>
Pick an agent, attach a folder, ask for a change.
fs_read, fs_list, fs_glob, fs_grep, fs_edit, fs_write, fs_apply_patch, shell_exec, todo_write, plus kb_search and kb_write. Every path is resolved inside the folder you attached; a path outside it becomes its own question (external_directory) and the answer covers that one call. Each conversation has its own folder.fs_edit falls back from an exact match to a block match anchored on the first and last line, and refuses when the block it found is out of proportion to what was asked. fs_apply_patch takes the V4A envelope with a context fuzz ladder and keeps the file's own context lines. A small model that invents a container path such as /workspace is put back at the folder root instead of failing.shell_exec runs under seatbelt: no network, writes only inside the folder. The chip next to the folder always shows whether the sandbox is on.git status *, npm run test *, node *. A chained line (git status && rm -rf x) needs a rule for every segment, and $(…), backticks and > never ride on a rule. The rules are listed in the inspector on the right, where you edit the pattern, switch a rule to ask or deny, or delete it; the next call asks again.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 from one command; an 8B local model (qwen3:8b on Ollama) does the same in about 3 minutes, asking permission with the diff.
A fresh install is local first. Point OmniGet at Ollama, LM Studio or llama-server and the agents run on your machine, offline, with the same eleven tools, the same permission prompts and the same undo. On the demo project an 8B model (qwen3:8b on Ollama) finds and fixes the bug in about 3 minutes. Add API keys later and the router uses them as the next step of the chain; the local model stays first for as long as you want.
<a id="leave-it-working-jobs-loops-and-triggers"></a>
queued, running, waiting_approval, done, failed, cancelled), its log, and what it cost: model, tokens in and out, cache reads, and the cost when the provider reports one. Two jobs run at a time. A job that needs a permission shows Allow / Always allow / Deny right on its row.npm test, cargo test, node test/cart.test.js); the check runs under the same sandbox, and the Loop ends with check_passed, or when the rounds or minutes you set run out.@hourly, @daily, local time), checked once a minute with no duplicate fire, or a webhook: POST /v1/hooks/<id> on the local bridge with your token, where the body becomes {{body}} in the prompt.omniget agent run "Fix the failing test in src/cart.js" --agent claude-code --workspace .
omniget agent loop "Make the tests pass" --agent omni --workspace . --check "npm test" --rounds 5
omniget agent jobs # list, show one, --cancel
omniget agent loops
omniget agent agents<p align="center">
<img src="assets/readme/agents-loop.gif" alt="OmniGet LLM Loops page: a Loop run by Claude Code goes from Running to Done with the stop reason check_passed after one of three rounds" width="900" />
</p>
<a id="bring-your-own-agents-and-let-them-work-as-a-team"></a>
agent_delegate. One agent hands a task to another and gets the answer back as a tool result, in a child conversation you can open. A local coordinator that delegates the hard part to Claude Code costs exactly one run of the CLI.AGENTS.md (or CLAUDE.md) plus markdown notes in .omniget/kb/, inside your project, in git if you want. The index goes into every prompt, and the agents search and write notes with kb_search and kb_write.owner/repo and owner/repo@skill as in npx skills add, and pass through a scanner first.<a id="the-world-watch-them-work"></a>
A house is made on your first visit and the agents of your roster move in, CLI and ACP agents included. A fresh install starts with three: Omni (coordinator), Builder (code) and Scout (reading and research), all editable. Add or remove an agent and the house follows.
fs_edit cart.js, shell_exec). When it needs your permission it stops and waves at you. When its budget is spent it sits down, tired. Jobs and Loops move the agents exactly like chat does./world?demo=1, or the Demo button, plays a scripted run with three agents and a permission request without spending a token. It is what the clip below shows.Open the house gives you a code such as ZZCJ-YA09. A friend types it and walks into your house: they see your map, your agents at work and the other guests, walk around, and what they say shows up as a balloon.
wss://chat.tonho.wtf/v1/room. To host your own, omniworld-server is a single binary with a Dockerfile and a docker-compose.yml in scripts/omniworld-server/; put it behind a proxy that terminates TLS and set the address in Settings → World → Room server.The pet. A floating Omni reacts to what the agents do, including Claude Code or Codex running in a terminal outside the app, and answers permission prompts with Allow, Always or Deny.
The limits strip. A thin strip on a screen edge with one ring per coding assistant: how much of each usage limit is gone, when it resets, and whether the assistant is working, waiting or done. Off until you switch it on in LLM → Accounts, and every assistant is its own checkbox that says what it reads. A reader opens only the login that tool already keeps on your machine, read-only, asks that tool's own service for your usage at most once every five minutes, and never writes, refreshes or logs a token. Local runtimes (Ollama, LM Studio) show the models they have loaded. Claude Code is verified; the other remote readers are marked beta.
<a id="why-omniget"></a>
You bought a course and want it on your disk before the platform pulls it. You keep a yt-dlp cheat sheet because the flags never stick. You have one site for Instagram stories, another for X videos, a Chrome extension for Pinterest, a Python script for subtitles, and none of them remember your login.
OmniGet puts all of that behind one text box. Paste a link, see a preview with quality options, click download. The same window then plays the course, reads the PDF, transcribes the audio and backs up the Pinterest board. yt-dlp and FFmpeg install themselves and stay updated, so there is nothing to configure and no terminal to open.
<p align="center"> <img src="assets/readme/workflow.png" alt="How OmniGet works in three steps: paste a link, OmniGet detects the site and picks a native extractor or yt-dlp, the file lands in your folder and opens in the built-in player." width="100%" /> </p>| OmniGet | yt-dlp alone | Single-site web downloaders | Paid course downloaders | |
|---|---|---|---|---|
| Sites | Courses, Instagram, X, Pinterest, Bilibili, Telegram, torrents natively, plus 1,800+ through yt-dlp | 1,800+ | One | One or two platforms |
| Setup | Download one file, open it | Python, PATH, FFmpeg, flags | None | Installer, license key |
| Logged-in content | Cookies from your browser through the extension | Manual --cookies export | Rarely | Sometimes |
| Queue | Resume, retry with backoff, rules, followed channels | One command at a time | No | Varies |
| After the download | Player, reader, flashcards, notes, 156 tools | Files | Files, often re-encoded | Files |
| Price and license | Free, GPL-3.0 | Free, Unlicense | Free with ads | Subscription |
yt-dlp is the engine OmniGet runs on, and OmniGet would not exist without it.
Pick your system. Every build is published on the Releases page. Updates arrive inside the app.
<table> <tr> <th align="left">System</th> <th align="left">What to download</th> <th align="left">Other ways</th> </tr> <tr> <td><b>Windows 10 / 11</b></td> <td><code>omniget_x.y.z_x64-setup.exe</code> (installer)<br/><code>omniget_x.y.z_x64-portable.exe</code> (no install, runs from anywhere)<br/><code>omniget_x.y.z_x64_en-US.msi</code> (for IT deployments)</td> <td><code>winget install -e --id tonhowtf.OmniGet</code></td> </tr> <tr> <td><b>macOS 10.15+</b></td> <td><code>omniget_x.y.z_aarch64.dmg</code> for Apple Silicon (M1 and later)<br/><code>omniget_x.y.z_x64.dmg</code> for Intel Macs</td> <td><code>brew install --cask tonhowtf/tap/omniget</code></td> </tr> <tr> <td><b>Linux</b></td> <td><code>.deb</code> for Debian and Ubuntu (amd64 and arm64)<br/><code>.rpm</code> for Fedora, openSUSE and RHEL family (x86_64 and aarch64)<br/><code>.AppImage</code> for everything else (amd64 and aarch64)</td> <td>AppImage self-updates through the <code>.zsync</code> files</td> </tr> </table>Like most open source desktop apps, 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 refuses to open the app and may say it is "damaged". After you drag OmniGet into Applications, open Terminal (Spotlight, type "Terminal") and paste these two lines:
xattr -cr /Applications/omniget.app
codesign --force --deep --sign - /Applications/omniget.appThen open OmniGet from Launchpad as usual.
Linux, AppImage on Debian 12+ or Ubuntu 24.04+. Those releases ship without FUSE 2, which AppImage needs. If the file fails with a libfuse error, run sudo apt install libfuse2, or launch it with ./omniget.AppImage --appimage-extract-and-run. The .deb avoids this entirely.
OmniGet draws its window with WebKitGTK, and WebKitGTK plays every <video> and <audio> through GStreamer. If the GStreamer plugins are missing, WebKitGTK does not fail the media quietly: it aborts its own web process the moment a player appears, and you are left with an empty window. Most desktop distributions already have the plugins. Arch and the minimal server images treat them as optional, so install them once:
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 # Archgstreamer1.0-plugins-good (gst-plugins-good) is the one that stops the crash, because the audio sink WebKitGTK insists on lives there. The other two carry the H.264 and AAC decoders, so without them a player opens but stays silent or black. The .deb and .rpm ask for all three, so this only comes up with the AppImage or a package built by hand.
Create an empty file named portable.txt (or .portable) next to the Windows .exe and relaunch. Settings, the database, cookies, plugins, caches, yt-dlp and FFmpeg all move to a data folder next to the executable. Nothing touches AppData, so the whole install fits on a USB stick.
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. Rate-limited sites get retried with backoff, and connections per site adapt on their own, so YouTube gets up to 16 parallel fragments while a site that answers 429 gets fewer. When a Python 3.10 or newer is present, yt-dlp runs as a zipapp on it and starts in under a second instead of unpacking the bundled binary on every launch.
<p align="center"> <img src="assets/readme/downloads.png" alt="OmniGet Downloads page with an active 4K YouTube download showing phase, speed, ETA and the exact yt-dlp command, plus queued and finished items" width="900" /> </p>Copy a link anywhere on your system and press Ctrl+Shift+D (Cmd+Shift+D on macOS). OmniGet reads the clipboard and starts the download in the background. A second hotkey, Ctrl+Shift+M, grabs audio only, so a YouTube link becomes an MP3 without opening anything. It is off until you enable it, and both shortcuts can be rebound in Settings → Downloads → Clipboard & hotkeys.
<a id="what-omniget-downloads"></a>
OmniGet has native extractors for the platforms people use most, and hands everything else to yt-dlp, which covers roughly 1,800 sites.
OmniGet downloads the courses you bought on Udemy, Hotmart, Kiwify, Rocketseat and Meta-Analysis Academy. Sign in inside the app, tick the sections you want, and every lesson and attachment lands in a folder per course, numbered in order, resuming where it stopped. The course then opens in the built-in player with timestamped notes. Details in Courses.
Paste a YouTube link and pick the quality, up to 4K, or audio only as MP3, M4A, Opus, FLAC or WAV. Playlists, channels, live streams from the start, chapters, subtitles and SponsorBlock are switches in a window instead of yt-dlp flags. OmniGet installs yt-dlp and FFmpeg, verifies them and keeps them updated, and every download keeps the exact yt-dlp command it ran, which you can edit and retry.
Reels, posts, carousels, stories and highlights from Instagram; TikTok and Douyin videos; X videos, GIFs and whole threads; Reddit video with its sound; Pinterest pins and boards in original quality. Public posts need no login, and the browser extension lends your own session for stories, close friends and private accounts.
| Category | Sites and formats |
|---|---|
| Online courses | Hotmart, Udemy, Kiwify, Rocketseat and Meta-Analysis Academy through the Courses plugin. Every lesson, section selection, attachments, resume where you stopped. |
| Video and audio | YouTube (videos, playlists, channels, live from start, chapters, SponsorBlock), Instagram, TikTok, X/Twitter, Reddit, Twitch (VODs, clips, live), Vimeo, Bluesky, Threads, Pinterest, Douyin |
| Bilibili, signed in | 4K, HDR, Dolby Vision, Hi-Res lossless and Dolby Atmos according to your subscription. Danmaku comments as XML, ASS or JSON, NFO files for Kodi and Jellyfin, custom naming templates, 11 URL types including bangumi, courses, favorites, watch later and history |
| Image galleries | Whole galleries and profiles from 250+ sites through gallery-dl (DeviantArt, Pixiv, ArtStation, Flickr, Tumblr, Imgur, Kemono and more) |
| Bulk | Paste many links or load a .txt, download whole subreddits, Reddit and X profiles, Instagram and Pinterest profiles |
| Files and transfer | .torrent files and magnet links with a built-in BitTorrent client, direct HTTP files, HLS and DASH manifests, and person-to-person transfer between two OmniGet installs with a short word code |
| Telegram | Photos, videos, files and audio from any channel or group you belong to, through the Telegram plugin |
Options you set once and forget: default quality, audio-only format (MP3, M4A, Opus, FLAC or WAV), subtitle languages and format (SRT, VTT, ASS, embedded or sidecar), thumbnail and metadata embedding, filename template, organize by platform, skip existing files, split by chapters, speed limit, concurrent downloads, proxy. Rules send a given channel or host to a folder and quality of your choice without asking again. Followed channels are checked in the background and can download new uploads automatically with a tray notification.
<p align="center"> <img src="assets/readme/settings.png" alt="OmniGet settings: grouped sidebar with Appearance, Downloads, Network, Cookies, Channels, AI, Plugins and Advanced, and a download section with Output, Quality, Subtitles, Clipboard and hotkeys, Per-platform options" width="900" /> </p>The extension does two jobs. On sites it recognizes (YouTube, Instagram, TikTok, X, Reddit, Twitch, Pinterest, Bluesky, Telegram, Vimeo, Udemy, Hotmart, Rocketseat, Bilibili, SoundCloud) it sends the page to OmniGet with one click or with Alt+O. On any other site it watches network traffic for MP4, HLS, DASH, WebM and audio streams and lists them in its popup. In both cases it forwards your cookies and referer, which is what lets OmniGet download private content you are logged into, such as Instagram stories, a paid course, or a members-only video. Cookies are grouped by real site, so a Brazilian .com.br domain gets its own entry instead of sharing one with every other .com.br site. The popup also has a Force H.264 switch for YouTube, for computers that stutter on VP9 and AV1.
For the sites the sniffer cannot see, there is Deep search, a switch in the popup that hooks the page's own video player and catches playlists that never show up as network requests. It asks for permission on all sites the first time and stays off until then. Around it, the sniffer estimates the size of an HLS stream before you download, pairs the separate video and audio tracks a site serves so you get one file, checks the first bytes of what it found so an HTML error page is never saved as a video, and lets you edit the capture rules in the options page. The same options page can back up the list of extensions you have installed, ahead of Chrome dropping Manifest V2 extensions; that needs the optional "management" permission and asks for it only when you use it.
Pick the level that matches how comfortable you are.
<p align="center"> <img src="assets/readme/extension.png" alt="Loop plugging a cable from a browser window into the OmniGet app window, with cookies travelling along it and a padlock and a house above it: the pairing stays on your own machine." width="100%" /> </p>chrome://extensions in the address bar.From now on, visit any supported page and click the icon. The page, its cookies and its title go to OmniGet and the download starts. Your cookies also show up in Settings → Cookies, where the Courses plugin and the Instagram, X and Pinterest tools reuse them.
Every release ships omniget-chrome-extension-vX.Y.Z.zip. Download it from the latest release, unzip it, then follow steps 3 to 7 above pointing Load unpacked at the unzipped folder. Use this if you keep the app on one machine and the browser on another, or if you are installing for someone else.
Firefox: Settings → Plugins → Browser extension → Update / Install next to Firefox, then open about:debugging#/runtime/this-firefox, click Load Temporary Add-on and pick manifest.json in the exported folder. Firefox keeps a temporary add-on until it restarts, so load it again after a restart.
Manual pairing: if Pair extension times out, open the extension's options page (right-click the icon → Options), then in OmniGet reveal and copy the Pairing token and paste it into the options page. The endpoint URL is detected automatically. The app listens on 127.0.0.1 ports 47720 to 47729 and the token is generated per install, so nothing leaves your machine.
If the extension is installed but OmniGet is closed, clicks fall back to the omniget:// link scheme, which queues the URL right away; with the app open, cookies travel too. Tick "Always allow" the first time Chrome asks.
Tools is the part of OmniGet that grew beyond downloading. Each tile is one job: an isolated Rust command with JSON in and JSON out, which is also what lets AI agents drive them through the built-in MCP server. The hub has a search box that understands English and Portuguese ("legenda" finds subtitle tools) and a platform filter, and tools that only run on Windows say so on the tile and stay hidden elsewhere. Everything below runs on your machine; the only tools that touch the network are the ones that fetch from the site they are named after.
<p align="center"> <img src="assets/readme/illustration-tools.png" alt="Loop, the OmniGet mascot, opening a toolbox full of tool tiles: microphone, subtitles, scissors, PDF, photo, gear, folder, magnet, phone, AI, music, globe, keyboard, chat and wrench" width="900" /> </p> <p align="center"> <img src="assets/readme/tools.png" alt="OmniGet Tools hub with 24 categories: YouTube, Speech and subtitles, Video editing, Audio, Instagram, X, Reddit, Pinterest, Twitch, Bilibili, Spotify, Music, LinkedIn, Games, PDF, Documents, Images, System, Files, Downloads, Automation, Phone, AI and CTF and analysis" width="900" /> </p>Status legend: no mark means ready, beta marks the newest tools, planned marks what is next on the roadmap.
<table> <tr> <td><img src="assets/readme/tools-instagram.png" alt="Instagram tools in OmniGet: download post, bulk download, reel audio, stories, highlights, story viewers, profile viewer, HD avatar, profile download, unfollowers, fans, mutuals, who unfollowed, ghost followers, whitelist, data export, analytics, compare profiles, hashtag explorer, comments, likers, giveaway picker, publish and schedule" /></td> <td><img src="assets/readme/tools-x.png" alt="X / Twitter tools in OmniGet: download post, unroll thread, post to image, profile X-ray, profile media, advanced search, export bookmarks, who doesn't follow back, your X archive and Grok" /></td> </tr> <tr> <td><img src="assets/readme/tools-pinterest.png" alt="Pinterest tools in OmniGet: download pin, board backup, profile backup, search without AI or ads, similar pins, find the source, duplicates, color palette, offline gallery and keyword ideas" /></td> <td><img src="assets/readme/tools-pdf.png" alt="PDF tools in OmniGet: merge, split, compress, convert, OCR, repair, password and permissions, watermark and numbering, crop margins, table of contents, check redaction, safe PDF and PDF to Markdown" /></td> </tr> <tr> <td><img src="assets/readme/tools-linkedin.png" alt="LinkedIn tools in OmniGet: data overview, connections, messages and profile score, all read from the official data export" /></td> <td><img src="assets/readme/tools-ctf.png" alt="CTF and analysis tools in OmniGet: hash and HMAC, what is this file, classic ciphers, XOR, encodings and frequency analysis" /></td> </tr> </table>All of these run on your own Instagram session captured by the browser extension, so stories, close friends and your own lists work. Reads are paced and write actions stop on the first sign of a rate limit.
.txt and get everything.Public data comes through the FxTwitter API without login. Anything private (bookmarks, your follows, Grok on X) uses your X session from the cookie manager.
Works without login for anything public. Cookies are only needed for secret boards and for unsaving.
Video downloads from Bilibili live on the home screen. These two are about the floating comments.
.m3u8 and .pls for any local player..lrc next to each track.All four read the official data export LinkedIn lets you request, on your own machine. Nothing logs in.
favicon.ico, the web PNGs, apple-touch-icon and a macOS .icns..reg backup before removal. Windows. beta.m3u8 or .mpd with Referer and cookie. FFmpeg saves an MP4..env file.Six small offline utilities for capture-the-flag puzzles, forensics homework and "what is this file" moments.
Every tool that talks to an AI uses the provider you set in Settings → AI: OpenAI, Anthropic, or any OpenAI-compatible local endpoint such as Ollama or LM Studio. The key is stored locally and never logged. The auto clicker, dictation and the replay buffer can each get a global shortcut of their own.
<a id="omniget-for-ai-agents-mcp-server-and-claude-code-plugin"></a>
Three doors, depending on where your agent lives.
Inside the app: the MCP server. Turn it on in Tools → AI → MCP server and OmniGet exposes 49 of its tools over the Model Context Protocol on the same local bridge the browser extension uses, behind the same per-install token. An agent can queue a URL and watch, pause, resume or cancel it in the Downloads panel, merge, split, render, extract text from or sanitize PDFs, transcribe a file with whisper.cpp, run text to speech and OCR, resize images, find duplicates, search files, read X posts, threads, profiles, searches and trends, look up an Instagram profile through your session, compare LLM prices, humanize text, scan disks and caches, list startup items and installed apps, and pull large files or galleries with aria2 and gallery-dl. New in 0.10, the same server carries the coding tools of the built-in harness, confined to the folder you attached in the app (read, list, glob, grep, edit, write, apply a patch, run a sandboxed command, keep a plan), the project knowledge base (kb_search, kb_write) and agent_delegate, which hands a task to an agent of your roster. The page prints the config snippet for Claude Code, Claude Desktop, Cursor, VS Code, Goose and Codex, so it is a paste, not a setup.
The other way round: MCP servers for your agents. In LLM → MCP you plug external MCP servers into OmniGet, over stdio or streamable HTTP, and their tools show up next to the built-in ones as mcp:<server>:<tool>. Each agent gets them one by one, as auto, ask or deny, and a server can never shadow a built-in tool. Secrets in a server's environment or headers are stored as references and resolved only when the server starts. Nothing connects until you enable a server.
Inside Claude Code: the omniget plugin. The claude-plugin/ folder ships a plugin for Claude Code that needs no desktop app at all. Paste a video, audio or social post URL with a request and the omniget-fetch and omniget-transcribe skills trigger on their own. The slash commands are there when you want to be explicit:
/plugin marketplace add /path/to/omniget/claude-plugin
/plugin install 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 plus transcript distilled into a Markdown note with [mm:ss] references
/omniget:doctor # what is installed, what is missing, how to add itSetup downloads the prebuilt omniget-cli for your OS, which gives the skill OmniGet's native Instagram, X, Bilibili and Threads extractors. A download that fails on a login wall is retried once with the cookies of the browser you name in OMNIGET_COOKIES_FROM_BROWSER. API keys go into ~/.config/ai-keys.env from your own terminal and are never printed back.
Plugins are separate Rust libraries loaded at startup. OmniGet installs its official set on first launch and updates them by itself. The Marketplace page shows what is installed, what each plugin is allowed to do (events, notifications, settings, download folders, proxy, managed tools, download queue), and lets you hide, disable or uninstall any of them.
<p align="center"> <img src="assets/readme/marketplace.png" alt="OmniGet Marketplace listing the Courses, Study, Telegram and Convert plugins with version, author, permissions and enable switches" width="900" /> </p>Sign in to Hotmart, Udemy, Kiwify, Rocketseat or Meta-Analysis Academy through a browser window inside the app, with saved cookies from the extension, or with email and password where the platform allows it. OmniGet lists your purchases, opens the course outline so you can tick the sections you want (it tells you how many lectures are DRM-protected and will be skipped), and downloads every lesson and attachment with continuous lecture numbers if you want them. Hotmart uses the current OIDC login flow, so it keeps working after Hotmart's 2026 auth change, and free courses and courses delivered outside Hotmart Club are listed too. Downloaded courses appear in Study automatically.
Study turns the folder of files you downloaded into something you can actually finish.
<p align="center"> <img src="assets/readme/illustration-study.png" alt="Loop with headphones reading a book on a cushion, surrounded by a paused video lesson, flashcards, a notebook with a knowledge graph, a pomodoro timer and a vinyl record" width="900" /> </p>.md or PDF. Any note can become a flashcard..apkg, .txt and CSV, filtered decks, presets, note types, tags, media, stats and a review log.Sign in with a QR code or your phone number. Browse every channel and group you belong to, filter by photo, video, document or audio, search files, and download one item or the whole chat with a progress list. Videos from channels can be imported straight into the Study library.
FFmpeg conversions with GPU acceleration where the machine has it: container, codec, resolution, bitrate and compression for video and audio, no internet required.
A League menu sits in the sidebar. It reads your running League client locally, with no account and no third-party build site, and does nothing until the client is open. If you never play, switch it off in Settings → Advanced → League of Legends and the menu disappears.
<p align="center"> <img src="assets/readme/illustration-league.png" alt="Loop in a gaming chair with a headset, looking at a monitor with a three-lane map and a ten-player scoreboard, with trophy, dice, chart and AI tiles beside it" width="900" /> </p>Match scouting for both teams with rank, recent form, KDA and the champions each player actually plays. Win probability that shrinks win rates toward the baseline by sample size and always shows a range. Live gold, CS and level for all ten players. Goals per role you can edit. Runes and summoner spells recommended by the client itself, applied in one click and only ever replacing the page OmniGet created. Champion tiers by role. Player search by Riot ID. Opt-in automation: accept matches, pick and ban from your priority list, grab a champion off the ARAM bench. Every automation has its own switch.
Also in the League menu: a Profile tab that edits what other players see (rank shown in chat, challenge medals and title, banner and crest, chat icon, bulk friend management); a skin, chroma and ward roulette that rolls an owned skin the moment you lock in, with rerolls; a champion and lane raffle for when you want the queue to decide, plus an optional random pick in champion select; full match history and ranked stats for any player through the client's own backend gateway, with replay download; and an AI coach that reviews a game, spots trends over your last matches or answers a question about the current champ select, using your configured AI provider and OP.GG's public data.
cookies.txt, with a test button per domain.Everything runs on your computer. There is no account, no server of ours in the middle, and no telemetry about what you download. Cookies and API keys live in your local profile. The only network calls OmniGet makes on its own are to the sites you asked it to download from, to GitHub for updates and plugins, and to the AI provider you configured, when you use an AI tool.
OmniGet downloads what your own logged-in session can already open. It does not bypass DRM, break paywalls, or share credentials, and DRM-protected lectures are skipped and reported. You are responsible for respecting copyright and each platform's terms of service. The full text is in the app under About → Terms and ethics.
Yes. OmniGet is free and open source under GPL-3.0, with no paid tier, no ads and no account.
Yes. OmniGet bundles yt-dlp, verifies it, keeps it updated and puts its options in a window. On top of that sit native extractors for courses, Instagram, X, Pinterest, Bilibili, Telegram and torrents, a queue with resume and retry, 156 tools, the Study library and the AI agents.
Yes. The Courses plugin comes preinstalled: sign in through the app, pick the course and its sections, and download. Lessons and attachments land in a folder per course and appear in Study. Kiwify, Rocketseat and Meta-Analysis Academy work the same way.
Paste the link on the home screen, pick the quality and press Enter. Playlists, channels, subtitles, chapters and audio-only MP3 are options in the same window, and yt-dlp runs underneath without you typing a flag.
Yes, using your own session captured by the browser extension. Stories are downloaded without being marked as seen.
Yes. Public posts need no login. Bookmarks and your own follow lists use your X session.
Yes, including videos, sections, secret boards with cookies, and incremental sync that fetches what is new.
Yes. Add your Claude Code account in LLM → Accounts and it becomes an agent in the app: you chat in a window, attach a folder, see every diff before it is written, and undo a turn with one click. It keeps the login your terminal already has. Codex works the same way, and Gemini CLI, goose and opencode join through the Agent Client Protocol.
Yes. A Loop takes a prompt and a check command such as npm test or cargo test, and repeats rounds until the check exits 0 or your round or minute budget ends. It keeps running with the window closed, and omniget agent loop starts one from a terminal.
Yes. A fresh install is local first: point it at Ollama, LM Studio or llama-server and the agents run on your machine with no key and no internet. qwen3:8b fixes the demo bug in about 3 minutes.
Your code goes to the model you chose and nowhere else. With a local model it never leaves your computer. OmniGet has no server in the middle and no telemetry, and nothing talks to the network until you add a key, start a local model or open your house.
Yes. Tools → AI → MCP server exposes 49 tools over the Model Context Protocol, and the page prints the config snippet for Claude Code, Claude Desktop, Cursor, VS Code, Goose and Codex. The claude-plugin/ folder also ships a Claude Code plugin that fetches and transcribes media without the desktop app. See MCP server.
Yes. agent_delegate lets one agent hand a task to another and get the answer back as a tool result, the team shares a project memory in AGENTS.md and .omniget/kb/, and the World shows each agent at its own workbench while it works.
Yes. Partial files are kept and continued, and rate limits trigger retries with backoff.
Video as MP4, MKV or WebM. Audio as MP3, M4A, Opus, FLAC or WAV. Subtitles as SRT, VTT or ASS, embedded or beside the file.
No. Download the app, open it, paste a link. yt-dlp and FFmpeg install themselves and stay updated.
Run the two commands in the first launch section. You do it once.
Yes. Request the export from the platform, then open the zip in the matching tool. It is parsed on your machine and nothing is uploaded.
Yes. Tools → Speech and subtitles → Transcribe uses whisper.cpp locally. Models download on demand.
Yes, on Windows, with a portable.txt file next to the executable.
Debian and Ubuntu: .deb. Fedora, openSUSE, RHEL family: .rpm. Anything else: .AppImage. Both x86_64 and ARM64 are published.
omniget-cli ships with every release for Windows, macOS (Intel and Apple Silicon) and Linux. Grab omniget-cli-<version>-<target> from the latest release.
omniget info <url> # title, formats and size, downloads nothing
omniget download <url> -q 1080 -o ~/Videos
omniget download <url> --audio-only --subs en,pt
omniget batch links.txt -m 3 # one URL per line, 3 at a time
omniget import-cookies cookies.txt # Netscape format
# agents, through the running desktop app
omniget agent run "fix the failing test in src/cart.js" # current folder is the workspace
omniget agent loop "make the suite pass" --check "npm test" --minutes 30
omniget agent jobs # recent jobs; `omniget agent jobs <id>` follows oneIf you only want to use OmniGet, grab a release. To build it you need Rust (the exact toolchain is pinned in rust-toolchain.toml because the plugin ABI depends on it), Node.js 18+ and pnpm.
git clone https://github.com/tonhowtf/omniget.git
cd omniget
pnpm install
pnpm tauri dev<details>
<summary>Linux build dependencies</summary>
sudo apt-get install -y libwebkit2gtk-4.1-dev build-essential curl wget file libxdo-dev libssl-dev \
libayatana-appindicator3-dev librsvg2-dev patchelf libasound2-dev libpipewire-0.3-dev clang libclang-dev</details>
Production build:
pnpm tauri build --config '{"bundle":{"createUpdaterArtifacts":false}}'Releases sign their updater artifacts with a private key only the maintainer holds, so a plain pnpm tauri build stops with "A public key has been found, but no private key". The flag above turns those artifacts off for a local build and changes nothing else.
The plugins live in their own repositories: omniget-plugin-courses, omniget-plugin-telegram, omniget-plugin-convert and omniget-study-release. The registry is omniget-plugins. pnpm plugins:deploy builds the sibling plugin checkouts and copies them into your local data folder.
Stack: Tauri 2, Rust, SvelteKit with Svelte 5, SQLite, yt-dlp, FFmpeg, librqbit for torrents, whisper.cpp, aria2, gallery-dl.
Bug reports and pull requests go to Issues and Pull requests. Questions and quick help live on Discord.
Translations are managed on Weblate. Pick your language and translate in the browser. New strings appear there a few hours after they land in main.
OmniGet is built on yt-dlp, FFmpeg, gallery-dl, whisper.cpp, aria2, SponsorBlock, Return YouTube Dislike, FxTwitter, Spicetify, cat-catch (parts of the extension's media sniffer) and Tauri. Thank you to everyone who maintains them.
Loop, the creature on the home screen, is OmniGet's mascot. Fan art is welcome. The original artwork may not be used commercially or redistributed modified. The illustrations in this README were generated with Higgsfield from the original Loop artwork.
<p align="center"> <a href="https://star-history.com/#tonhowtf/omniget&Date"><img src="https://api.star-history.com/svg?repos=tonhowtf/omniget&type=Date" alt="Star history of tonhowtf/omniget" width="600" /></a> </p> <p align="center"> <a href="https://github.com/tonhowtf/omniget/releases/latest"><b>Download OmniGet</b></a> · <a href="LICENSE">GPL-3.0</a> </p>OmniGet reads a lot of open source before it writes its own. Thank you to the projects whose ideas shaped the agents, the jobs and the World: opencode, Codex, aider, cline, compozy, codex-loop, cc-loop, the Agent Client Protocol, mem0, letta, headroom, yoshi, fast-jev-compaction, ai-town, smallville and the generative agents paper. And to yt-dlp, FFmpeg, Tauri and Svelte, which everything else stands on.
tonhowtf/omniget
February 11, 2026
September 21, 2026
Rust