The project's README from github.com/OpenSelena/omniget. As one markdown file: README.md.
English · Português (BR) · Русский · 简体中文
Download Udemy and Hotmart courses, YouTube, Instagram, X, Pinterest, TikTok and 1,800+ other sites.
Then transcribe, convert, read and study what you saved. One free desktop app, no terminal.
Free. Open source under GPL-3.0. No account, no ads, no telemetry on what you download. Your files stay on your computer.
Maintained by Igect under GPL-3.0 · Based on original architecture by tonhowtf
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.
| 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, 158 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. If you live in a terminal and only want files, yt-dlp alone is the right tool.
Pick your system. Every build is published 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, runs from anywhere)omniget_x.y.z_x64_en-US.msi (for IT deployments) |
winget install -e --id OpenSelena.OmniGet |
| macOS 10.15+ | omniget_x.y.z_aarch64.dmg for Apple Silicon (M1 and later)omniget_x.y.z_x64.dmg for Intel Macs |
brew install --cask OpenSelena/tap/omniget |
| Linux | .deb for Debian and Ubuntu (amd64 and arm64).rpm for Fedora, openSUSE and RHEL family (x86_64 and aarch64).AppImage for everything else (amd64 and aarch64) |
AppImage self-updates through the .zsync files |
OmniGet is not signed with a paid certificate, so each system shows a warning the first time. This is normal for open source desktop apps and 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.app
Then 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 # Arch
gstreamer1.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.
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.
OmniGet has native extractors for the platforms people use most, and hands everything else to yt-dlp, which covers roughly 1,800 sites.
| Category | Sites and formats |
|---|---|
| 38 supported platforms (Hotmart, Udemy, Kiwify, Rocketseat, Coursera, Domestika, Skillshare, and more) through the embedded Courses plugin. Every lesson, section selection, attachments, resume where you stopped. | |
| YouTube (videos, playlists, channels, live from start, chapters, SponsorBlock), Instagram, TikTok, X/Twitter, Reddit, Twitch (VODs, clips, live), Vimeo, Bluesky, Threads, Pinterest, Douyin | |
| 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 | |
| Whole galleries and profiles from 250+ sites through gallery-dl (DeviantArt, Pixiv, ArtStation, Flickr, Tumblr, Imgur, Kemono and more) | |
Paste many links or load a .txt, download whole subreddits, Reddit and X profiles, Instagram and Pinterest profiles, Facebook albums |
|
.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 |
|
Photos, videos, files and audio from any channel or group you belong to, saved into organized channel folders (OmniGram/<channel>/), through the embedded 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.
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.
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 drops temporary add-ons on restart, so repeat this until the extension is published on AMO. Safari is not supported yet because Safari extensions must ship through the App Store.
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 still queues the URL but cannot carry cookies. 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.
Status legend: no mark means ready, beta means it works but has not been tested against every account type, planned means the tile exists so you can see where things are going and does nothing yet.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
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.
Two doors, depending on where your agent lives.
Inside the app: the MCP server. Turn it on in Tools → AI → MCP server and OmniGet exposes 37 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. 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. beta
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 it
Setup 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.
Core plugins are embedded directly into the application binary, eliminating runtime download and ABI compatibility errors. The Marketplace page shows active plugins, what each plugin is allowed to do (events, notifications, settings, download folders, proxy, managed tools, download queue), and lets you configure or toggle them.
The embedded Courses plugin supports 38 learning platforms, including Hotmart, Udemy, Kiwify, Rocketseat, Coursera, Domestika, Skillshare, Alura, and Ebac. Sign in through a webview inside the app, with saved cookies from the extension, or with account credentials where available. OmniGet lists your purchases, opens the course outline so you can select the sections you want (DRM-protected lectures are skipped and reported), and downloads lessons and attachments with optional continuous numbering. Downloaded courses index into Study automatically.
Study turns the folder of files you downloaded into something you can actually finish.
.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 individual media or entire chat archives with a progress list. Media downloads are organized into {download_dir}/OmniGram/{channel_name}/ with sanitized folder names. 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.
OmniGet includes an optional Discord-style chat called OmniDisc for servers you self-host with omnidisc-server. Features include text channels, direct messages, friends, roles, voice, video, and screen sharing with hardware encoding. Direct messages and calls use MLS end-to-end encryption. Files sent through chat are encrypted at rest and deleted from the server after thirty minutes.
OmniDisc is disabled by default. Turn it on in Settings → Advanced → OmniDisc or type /omnidisc into the command palette (Ctrl+K).
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.
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.
New and marked beta or experimental: 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.
Free code signing on Windows provided by SignPath.io, certificate by SignPath Foundation.
Code changes and signed releases are reviewed and approved by the OpenSelena maintainers. See Privacy and what OmniGet refuses to do and the privacy documentation for how OmniGet handles data.
Is OmniGet free? Yes. GPL-3.0, no paid tier, no ads, no account.
Is OmniGet a yt-dlp GUI? Partly. yt-dlp handles the long tail of sites and OmniGet bundles it, verifies it and updates it. On top of that sit native extractors for courses, Instagram, X, Pinterest, Bilibili, Telegram and torrents, a queue with resume and retry, the Tools section, and the Study library.
Can OmniGet download a Udemy or Hotmart course I bought? Yes. The Courses plugin is embedded directly in the app. Sign in through the app, pick the course and sections, and download. Lessons and attachments land in a folder per course and appear in Study. 38 platforms are supported, including Hotmart, Udemy, Kiwify, Rocketseat, Coursera, Domestika, and more.
Can it download Instagram stories, close friends or highlights? Yes, using your own session captured by the browser extension. Stories are downloaded without being marked as seen.
Can it download an X video, a whole thread or all media from a profile? Yes. Public posts need no login. Bookmarks and your own follow lists need your X session.
Can it back up a Pinterest board in original quality? Yes, including videos, sections, secret boards with cookies, and incremental sync so you only fetch what is new.
Does it resume interrupted downloads? Yes. Partial files are kept and continued, and rate limits trigger retries with backoff.
Which formats can it save? 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.
Does it need Python, Node or a terminal? No. Download the app, open it, paste a link. The only terminal step is the one-time macOS Gatekeeper fix above.
macOS says the app is damaged. Run the two commands in the first launch section. It happens because the app is not notarized, and it happens once.
Can it read my Reddit, LinkedIn, Spotify, X or Instagram data export? 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.
Can an AI agent use OmniGet?
Yes, two ways. The MCP server in Tools → AI exposes 37 tools to Claude Code, Claude Desktop, Cursor, VS Code, Goose and Codex, and the claude-plugin/ folder ships a Claude Code plugin that fetches and transcribes media without the desktop app. See OmniGet for AI agents.
Can I transcribe a video to subtitles offline? Yes. Tools → Speech and subtitles → Transcribe uses whisper.cpp locally. Models download on demand.
Can I run it from a USB stick?
Yes, on Windows, with a portable.txt file next to the executable.
Which Linux package should I pick?
Debian and Ubuntu: .deb. Fedora, openSUSE, RHEL family: .rpm. Anything else: .AppImage. Both x86_64 and ARM64 are published. OmniGet is not on Flathub.
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
If 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/OpenSelena/omniget.git
cd omniget
pnpm install
pnpm tauri dev
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
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 courses, telegram, convert and study plugins live inside src-tauri/plugins/ and compile into the main binary. The plugin registry is omniget-plugins.
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 Telegram. Security inquiries and vulnerability reports: SECURITY.md or [email protected].
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.