Files

1523 lines
128 KiB
HTML

<!DOCTYPE html>
<html lang="en" data-theme="light">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>OmniGet — paste a link, get the file</title>
<meta name="description" content="OmniGet downloads courses, video, audio, images and torrents from 1,800+ sites, then transcribes, converts, reads and studies what you saved. Free, open source, no account." />
<meta name="color-scheme" content="light dark" />
<meta name="theme-color" content="#F7F8FA" media="(prefers-color-scheme: light)" />
<meta name="theme-color" content="#0B0C0E" media="(prefers-color-scheme: dark)" />
<link rel="icon" type="image/png" href="static/loop.png" />
<!-- Set the theme before first paint so there is no flash of the wrong one. -->
<script>
(function () {
try {
var saved = localStorage.getItem('omniget-theme') || localStorage.getItem('omniget_docs_theme') || localStorage.getItem('omni-theme') || localStorage.getItem('theme');
var dark = (saved === 'dark' || saved === 'light') ? saved === 'dark' : matchMedia('(prefers-color-scheme: dark)').matches;
document.documentElement.setAttribute('data-theme', dark ? 'dark' : 'light');
if (dark) document.documentElement.classList.add('dark');
} catch (e) {}
})();
</script>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@600;700&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@500&display=swap" />
<style>
/* ============================================================
Tokens
============================================================ */
:root {
color-scheme: light;
--brand: #FF7D38;
--brand-hover: #F06A1D;
--brand-press: #DE5C12;
--on-brand: #0F172A;
--link: #0369A1;
--emerald: #059669;
--violet: #7C3AED;
--bg: #F7F8FA;
--surface: #FFFFFF;
--hover: rgba(15, 23, 42, .05);
--fg: #0F172A;
--body: #334155;
--dim: #4B5668;
--line: #E2E8F0;
--line-strong: #CBD5E1;
--nav: rgba(247, 248, 250, .78);
--glass: rgba(255, 255, 255, .50);
--tile: rgba(255, 255, 255, .74);
--field: rgba(15, 23, 42, .055);
--c-orange: rgba(244, 124, 48, .66);
--c-deep: rgba(232, 90, 28, .58);
--c-yellow: rgba(234, 190, 92, .55);
--c-pink: rgba(232, 168, 196, .68);
--c-mint: rgba(150, 210, 205, .68);
--c-sage: rgba(110, 176, 150, .66);
--grain: .20;
--shadow: 0 1px 2px rgba(15, 23, 42, .06), 0 10px 28px -14px rgba(15, 23, 42, .16);
--shadow-sm: 0 1px 2px rgba(15, 23, 42, .05);
--sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
--display: 'Space Grotesk', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
--mono: 'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;
--r-sm: 8px;
--r-md: 14px;
--r-full: 9999px;
}
:root[data-theme="dark"] {
color-scheme: dark;
--link: #38BDF8;
--emerald: #34D399;
--violet: #A78BFA;
--bg: #0B0C0E;
--surface: #131418;
--hover: rgba(255, 255, 255, .07);
--fg: #F4F4F5;
--body: #A1A1AA;
--dim: #8B8B95;
--line: rgba(255, 255, 255, .10);
--line-strong: rgba(255, 255, 255, .20);
--nav: rgba(11, 12, 14, .72);
--glass: rgba(19, 20, 24, .50);
--tile: rgba(255, 255, 255, .06);
--field: rgba(255, 255, 255, .08);
--c-orange: rgba(244, 124, 48, .46);
--c-deep: rgba(232, 90, 28, .40);
--c-yellow: rgba(234, 190, 92, .26);
--c-pink: rgba(232, 168, 196, .26);
--c-mint: rgba(150, 210, 205, .22);
--c-sage: rgba(110, 176, 150, .32);
--grain: .30;
--shadow: 0 1px 2px rgba(0, 0, 0, .4), 0 12px 28px -14px rgba(0, 0, 0, .7);
--shadow-sm: 0 1px 2px rgba(0, 0, 0, .35);
}
/* ============================================================
Base
============================================================ */
*, ::before, ::after { box-sizing: border-box; border: 0 solid; margin: 0; padding: 0; }
html {
background: var(--bg);
color: var(--fg);
font-family: var(--sans);
font-size: 16px;
line-height: 1.6;
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: 100%;
scroll-behavior: smooth;
scroll-padding-top: 88px;
interpolate-size: allow-keywords;
}
body { background: transparent; min-height: 100vh; overflow-x: clip; }
/* Soft blurred colour fields with film grain, fixed behind the page. */
body::before {
content: ""; position: fixed; inset: -12%; z-index: -2; pointer-events: none;
background:
radial-gradient(34% 30% at 50% 78%, var(--c-orange), transparent 72%),
radial-gradient(22% 26% at 56% 96%, var(--c-deep), transparent 72%),
radial-gradient(26% 22% at 64% 24%, var(--c-yellow), transparent 72%),
radial-gradient(18% 34% at 22% 28%, var(--c-pink), transparent 72%),
radial-gradient(18% 26% at 34% 14%, var(--c-mint), transparent 72%),
radial-gradient(20% 30% at 86% 58%, var(--c-pink), transparent 72%),
radial-gradient(28% 34% at 2% 88%, var(--c-sage), transparent 72%),
radial-gradient(26% 34% at 98% 16%, var(--c-sage), transparent 72%);
filter: blur(70px);
transform: translateZ(0);
}
body::after {
content: ""; position: fixed; inset: 0; z-index: -1; pointer-events: none;
opacity: var(--grain);
background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/><feColorMatrix type='saturate' values='0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
background-size: 240px 240px;
}
h1, h2, h3 { font-family: var(--display); font-weight: 700; letter-spacing: -.025em; line-height: 1.12; text-wrap: balance; }
h1 { font-size: 56px; letter-spacing: -.03em; }
h2 { font-size: 38px; }
h3 { font-size: 18px; letter-spacing: -.01em; }
p { text-wrap: pretty; }
a { color: inherit; text-decoration: none; }
img { max-width: 100%; display: block; }
code { font-family: inherit; }
:focus-visible { outline: 2px solid var(--brand); outline-offset: 3px; }
.sr { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
.skip {
position: absolute; left: 16px; top: -48px; z-index: 200;
background: var(--fg); color: var(--bg); padding: 10px 16px;
border-radius: var(--r-sm); font-size: 14px; font-weight: 600;
}
.skip:focus { top: 12px; }
.ic { width: 20px; height: 20px; flex-shrink: 0; }
.wrap { width: 100%; max-width: 1168px; margin-inline: auto; padding-inline: 24px; }
.narrow { max-width: 46rem; }
.sec { padding-block: 88px; }
.sec-lg { padding-block: 128px; }
.sec-sm { padding-block: 64px; }
.bleed {
border-block: 1px solid var(--line); background: var(--glass);
-webkit-backdrop-filter: blur(20px); backdrop-filter: blur(20px);
}
.bleed + .bleed { border-top: 0; }
.lead { font-size: 18px; color: var(--body); line-height: 1.62; }
.muted { color: var(--body); }
.dim { color: var(--dim); }
.small { font-size: 14px; }
.mono { font-family: var(--mono); }
.wall-line {
max-width: 52rem; margin: 0 auto 30px; text-align: center;
font-size: 15.5px; line-height: 1.6; color: var(--body);
}
a.ul { color: var(--link); text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 3px; }
a.ul:hover { text-decoration-thickness: 2px; }
/* ============================================================
Buttons
============================================================ */
.btn {
display: inline-flex; align-items: center; justify-content: center; gap: 8px;
height: 36px; min-height: 36px; padding: 8px 16px; border-radius: 8px;
font-family: var(--sans); font-size: 14px; font-weight: 500; line-height: 1.3;
cursor: pointer; white-space: nowrap;
transition: background-color .15s, border-color .15s, color .15s;
}
.btn svg, .btn .ic, .btn .si { width: 16px; height: 16px; flex-shrink: 0; }
.btn-sm { height: 36px; min-height: 36px; padding: 0 16px; font-size: 14px; border-radius: 8px; }
.btn-brand { background: var(--brand); color: var(--on-brand); border: 1px solid transparent; }
.btn-brand:hover { background: var(--brand-hover); }
.btn-brand:active { background: var(--brand-press); }
.btn-secondary { background: transparent; border: 1px solid transparent; color: var(--fg); border-radius: 8px; }
.btn-secondary:hover { background: var(--hover); }
.btn-ghost { border: 1px solid var(--line-strong); color: var(--fg); background: var(--glass); -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px); border-radius: 8px; }
.btn-ghost:hover { background: var(--hover); }
/* ============================================================
Nav
============================================================ */
.nav {
position: sticky; top: 0; z-index: 100;
background: var(--nav);
border-bottom: 1px solid var(--line);
-webkit-backdrop-filter: blur(20px) saturate(150%);
backdrop-filter: blur(20px) saturate(150%);
transition: box-shadow .2s;
}
.nav.scrolled { box-shadow: 0 6px 18px -12px rgba(0, 0, 0, .25); }
.nav-in {
display: grid;
grid-template-columns: 1fr auto 1fr;
align-items: center;
height: 64px;
}
.brand {
display: flex; align-items: center; gap: 9px;
font-family: var(--display); font-weight: 700; font-size: 17px; letter-spacing: -.02em;
justify-self: start;
}
.brand img { width: 26px; height: 26px; border-radius: 7px; }
.nav-links {
display: flex; align-items: center; justify-content: center; gap: 4px;
margin-inline: auto;
}
.nav-links a {
font-size: 14.5px; font-weight: 500; color: var(--body);
padding: 8px 12px; border-radius: var(--r-sm);
transition: color .15s, background-color .15s;
}
.nav-links a:hover { color: var(--fg); background: var(--hover); }
.nav-act {
display: flex; align-items: center; gap: 8px;
justify-self: end; margin-left: auto;
}
.nav-gh {
display: inline-flex; align-items: center; gap: 7px;
height: 36px; min-height: 36px; padding: 0 12px; border-radius: var(--r-sm);
border: 1px solid var(--line); background: transparent; color: var(--fg);
font-family: var(--sans); font-size: 13.5px; font-weight: 500; text-decoration: none;
transition: background-color .15s, border-color .15s, color .15s;
}
.nav-gh:hover { background: var(--hover); border-color: var(--line-strong); }
.nav-gh .si { width: 16px; height: 16px; flex-shrink: 0; }
.nav-gh-count {
display: inline-flex; align-items: center;
font-size: 12px; font-weight: 600; color: var(--body);
background: var(--hover); padding: 1px 6px; border-radius: 5px;
}
.themebtn {
width: 36px; height: 36px; border-radius: var(--r-sm);
display: inline-flex; align-items: center; justify-content: center;
background: transparent; color: var(--body); cursor: pointer;
border: 1px solid var(--line); padding: 0;
transition: color .15s, background-color .15s, border-color .15s;
}
.themebtn:hover { color: var(--fg); border-color: var(--line-strong); background: var(--hover); }
.themebtn .t-sun, .themebtn .t-moon {
display: none; align-items: center; justify-content: center; width: 100%; height: 100%; line-height: 0;
}
.themebtn .t-moon { display: flex; }
:root[data-theme="dark"] .themebtn .t-sun,
html[data-theme="dark"] .themebtn .t-sun { display: flex; }
:root[data-theme="dark"] .themebtn .t-moon,
html[data-theme="dark"] .themebtn .t-moon { display: none; }
.mnav { display: none; position: relative; }
.mnav > summary {
list-style: none; width: 38px; height: 38px; border-radius: var(--r-sm);
display: grid; place-items: center; color: var(--fg); cursor: pointer;
}
.mnav > summary::-webkit-details-marker { display: none; }
.mnav > summary:hover, .mnav[open] > summary { background: var(--hover); }
.mnav-panel {
position: absolute; right: 0; top: 46px; width: 232px;
background: var(--surface); border: 1px solid var(--line);
border-radius: var(--r-md); box-shadow: var(--shadow);
padding: 8px; display: flex; flex-direction: column; gap: 2px;
}
.mnav-panel a { padding: 10px 12px; border-radius: var(--r-sm); font-size: 15px; font-weight: 500; color: var(--fg); }
.mnav-panel a:hover { background: var(--hover); }
.mnav-panel a:last-child { margin-top: 6px; background: var(--brand); color: var(--on-brand); font-weight: 600; text-align: center; }
.mnav-panel a:last-child:hover { background: var(--brand-hover); }
@media (max-width: 900px) {
.nav-in { display: flex; align-items: center; justify-content: space-between; }
.nav-links { display: none; }
.mnav { display: block; }
.nav-act .nav-gh { display: none; }
.nav-act .btn { display: none; }
}
/* ============================================================
Hero with theme-swapped banner
============================================================ */
.hero {
position: relative;
overflow: hidden;
padding-block: 76px 88px;
background-color: var(--bg);
background-image: url('assets/omniget-banner-light.png');
background-repeat: no-repeat;
background-position: center;
background-size: cover;
}
:root[data-theme="dark"] .hero,
html[data-theme="dark"] .hero {
background-image: url('assets/omniget-banner-dark.png');
}
.hero-grid {
display: grid;
grid-template-columns: minmax(0, 1fr);
position: relative;
z-index: 2;
}
.herocopy {
max-width: 620px;
text-align: left;
}
.hero h1 { margin-bottom: 18px; }
.hero .lead {
font-size: 16px;
line-height: 1.65;
margin-bottom: 26px;
max-width: 33rem;
color: var(--body);
}
.hero-cta {
display: flex;
flex-wrap: wrap;
gap: 12px;
justify-content: flex-start;
margin-top: 24px;
}
.stats {
display: flex;
gap: 24px;
flex-wrap: wrap;
justify-content: flex-start;
margin-top: 32px;
}
.stat {
display: inline-flex;
align-items: baseline;
gap: 6px;
white-space: nowrap;
}
.stat b {
font-size: 22px;
font-weight: 600;
color: var(--fg);
}
.stat span {
font-size: 13.5px;
color: var(--dim);
}
@media (max-width: 900px) {
h1 { font-size: 40px; }
h2 { font-size: 28px; }
.hero { background-position: 18% center; padding-block: 48px 56px; }
.stats { gap: 12px 20px; }
}
/* Screenshot frame */
.shot { border: 1px solid var(--line); border-radius: var(--r-md); overflow: hidden; background: var(--surface); }
.shot img { width: 100%; height: auto; }
.shot figcaption { padding: 10px 14px; font-size: 12.5px; color: var(--dim); border-top: 1px solid var(--line); }
.shot-sm { max-width: 520px; width: 100%; margin-inline: auto; }
.shot-wide { max-width: 900px; width: 100%; margin: 32px auto; }
/* Thumbnail strips. Each opens the full image in a new tab. */
.shots { display: grid; gap: 16px; margin-top: 34px; }
.shots.c2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.shots.c3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
@media (max-width: 700px) { .shots.c2, .shots.c3 { grid-template-columns: 1fr; } }
.shots a {
display: flex; flex-direction: column;
border: 1px solid var(--line); border-radius: var(--r-md); overflow: hidden; background: var(--surface);
transition: border-color .25s var(--ease);
}
.shots a:hover { border-color: var(--dim); }
.shots img {
display: block; width: 100%; height: auto;
aspect-ratio: 16 / 10; object-fit: cover; object-position: top center;
}
/* Keep the source ratio when every image in the strip shares one. */
.shots.nat img { aspect-ratio: auto; object-fit: fill; }
.shots b {
display: block; flex: 1; padding: 10px 13px; border-top: 1px solid var(--line);
font-size: 12.5px; font-weight: 500; color: var(--dim);
}
/* ============================================================
Platform wall
============================================================ */
.platforms { display: grid; grid-template-columns: repeat(auto-fill, minmax(148px, 1fr)); gap: 18px 24px; }
.pl { display: flex; align-items: center; gap: 10px; color: var(--body); }
.pl .ic { width: 19px; height: 19px; }
.pl-n { font-size: 14.5px; font-weight: 500; }
/* ============================================================
How it works
============================================================ */
.steps {
counter-reset: step; list-style: none;
display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; margin: 30px 0 0; padding: 0;
}
.steps li {
display: block; padding: 16px 0 0; border-top: 1px solid var(--line-strong);
}
.steps li::before {
counter-increment: step; content: counter(step, decimal-leading-zero);
display: block; margin-bottom: 10px;
font-family: var(--mono); font-size: 12.5px; font-weight: 500; color: var(--brand-hover);
}
.steps b { display: block; font-size: 16px; font-weight: 600; color: var(--fg); }
.steps span { display: block; margin-top: 3px; font-size: 14px; line-height: 1.5; color: var(--body); }
@media (max-width: 880px) { .steps { grid-template-columns: 1fr; gap: 12px; } }
/* ============================================================
Queue and settings
============================================================ */
.panel-grid { display: grid; grid-template-columns: 1.05fr 1fr; gap: 48px; align-items: center; }
@media (max-width: 1000px) { .panel-grid { grid-template-columns: 1fr; gap: 36px; } }
.ticks { display: flex; flex-direction: column; gap: 14px; margin-top: 26px; }
.tick { display: flex; gap: 12px; align-items: flex-start; }
.tick .ic { margin-top: 3px; color: var(--brand); }
.tick b { color: var(--fg); font-weight: 600; }
.tick span { color: var(--body); font-size: 15px; }
.formats { display: flex; flex-direction: column; align-items: flex-start; gap: 8px; margin-top: 28px; }
.format {
display: inline-flex; align-items: center; gap: 9px;
font-family: var(--mono); font-size: 12.5px; color: var(--body);
}
.format .ic { width: 15px; height: 15px; color: var(--brand); }
/* ============================================================
Tools
============================================================ */
.split { display: grid; grid-template-columns: 1.1fr 1fr; gap: 56px; align-items: start; }
@media (max-width: 1000px) { .split { grid-template-columns: 1fr; gap: 36px; } }
/* Column-major flow over a fixed 8-row grid keeps each column in descending order. */
.cats { display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: repeat(8, auto); grid-auto-flow: column; gap: 0 30px; margin: 18px 0 22px; }
@media (max-width: 900px) {
.cats { grid-template-columns: repeat(2, 1fr); grid-template-rows: repeat(12, auto); }
}
@media (max-width: 560px) { .cats { grid-template-columns: 1fr; grid-template-rows: none; grid-auto-flow: row; } }
.cat {
display: flex; align-items: center; gap: 9px; min-width: 0;
padding: 6px 0; border-bottom: 1px solid var(--line); font-size: 13.5px; color: var(--body);
}
.cat .ic { width: 15px; height: 15px; color: var(--dim); }
.cat b { font-weight: 500; color: var(--fg); flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cat i { font-family: var(--mono); font-style: normal; font-size: 12px; color: var(--dim); }
/* ============================================================
Plugins
============================================================ */
.plugins { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px 40px; }
@media (max-width: 860px) { .plugins { grid-template-columns: 1fr; } }
.plugin { padding-top: 20px; border-top: 1px solid var(--line-strong); }
.plugin .ic { color: var(--violet); width: 22px; height: 22px; margin-bottom: 12px; }
.plugin h3 { margin-bottom: 6px; }
.plugin p { font-size: 14.5px; color: var(--body); }
/* ============================================================
Privacy
============================================================ */
.priv-list { display: flex; flex-direction: column; gap: 12px; margin-top: 22px; }
.priv-list div { display: flex; gap: 12px; align-items: flex-start; font-size: 15px; color: var(--body); }
.priv-list .ic { margin-top: 3px; color: var(--emerald); }
.refuse { margin-top: 30px; padding-top: 22px; border-top: 1px solid var(--line-strong); }
.refuse h3 { font-size: 15px; margin-bottom: 10px; }
.refuse ul { list-style: none; display: flex; flex-direction: column; gap: 8px; }
.refuse li { display: flex; gap: 10px; font-size: 14.5px; color: var(--body); }
.refuse li .ic { margin-top: 4px; color: var(--dim); }
/* ============================================================
OS matrix
============================================================ */
.display { font-size: 44px; letter-spacing: -.03em; }
#os { padding-block: 96px; }
.sec-head { text-align: center; }
.sec-head .lead { max-width: 32rem; margin: 12px auto 40px; font-size: 16px; text-wrap: balance; }
.os-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; max-width: 960px; margin-inline: auto; }
@media (max-width: 900px) { .os-grid { grid-template-columns: 1fr; gap: 16px; } }
/* Large flat tiles: icon, name, note, button, command. */
.os-card {
display: flex; flex-direction: column; align-items: center; text-align: center; min-width: 0;
padding: 30px 22px 22px; border-radius: 24px; background: var(--tile);
}
.os-action { display: contents; }
.os-head { order: 0; display: flex; flex-direction: column; align-items: center; gap: 12px; margin-bottom: 10px; }
.os-head .ic { width: 32px; height: 32px; color: var(--fg); }
.os-head h3 { font-size: 18px; letter-spacing: -.02em; }
.os-note { order: 1; max-width: 16rem; margin-bottom: 18px; font-size: 13px; color: var(--body); line-height: 1.5; text-wrap: balance; }
.os-card .btn { order: 2; width: auto; min-width: 176px; min-height: 40px; padding: 8px 18px; font-size: 14px; margin-bottom: 22px; }
.cmd { order: 3; margin-top: auto; }
/* Rows (name, note, button, command) line up across all three tiles. */
@supports (grid-template-rows: subgrid) {
@media (min-width: 901px) {
.os-grid { row-gap: 0; }
.os-card { display: grid; grid-template-rows: subgrid; grid-row: span 4; row-gap: 0; justify-items: center; }
.os-card .cmd { margin-top: 0; align-self: stretch; }
}
}
@supports not (grid-template-rows: subgrid) {
.os-note { min-height: 3em; }
}
.cmd {
display: flex; align-items: center; gap: 6px; width: 100%; min-width: 0;
padding: 4px 4px 4px 14px; border-radius: 10px; background: var(--field);
font-family: var(--mono); font-size: 11.5px; line-height: 1.5; color: var(--body); text-align: left;
}
.cmd code { flex: 1; min-width: 0; padding-block: 4px; white-space: normal; overflow-wrap: anywhere; }
.copy {
flex: none; width: 30px; height: 30px; border-radius: 8px; background: transparent;
display: grid; place-items: center; color: var(--dim); cursor: pointer;
transition: color .15s, background-color .15s;
}
.copy:hover { color: var(--fg); background: var(--hover); }
.copy .ic { width: 16px; height: 16px; }
.copy .i-done { display: none; color: var(--emerald); }
.copy.done .i-done { display: block; }
.copy.done .i-copy { display: none; }
.more { margin-top: 26px; text-align: center; font-size: 15px; }
.more a { color: var(--link); }
.more a:hover { text-decoration: underline; text-underline-offset: 3px; }
/* ============================================================
FAQ
============================================================ */
.faq { border-top: 1px solid var(--line); }
.faq details { border-bottom: 1px solid var(--line); }
.faq summary {
cursor: pointer; padding: 20px 40px 20px 0; position: relative;
font-family: var(--display); font-weight: 600; font-size: 16px; letter-spacing: -.01em;
list-style: none;
}
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after {
content: "+"; position: absolute; right: 4px; top: 50%; transform: translateY(-50%);
font-family: var(--mono); font-weight: 500; color: var(--dim); font-size: 20px; line-height: 1;
transition: transform .35s var(--ease), color .2s;
}
.faq summary:hover::after { color: var(--fg); }
.faq details[open] summary::after { transform: translateY(-50%) rotate(45deg); color: var(--fg); }
@supports (interpolate-size: allow-keywords) {
.faq details::details-content {
block-size: 0; overflow: hidden;
transition: block-size .35s var(--ease), content-visibility .35s allow-discrete;
}
.faq details[open]::details-content { block-size: auto; }
}
.faq .a { padding: 0 40px 22px 0; color: var(--body); font-size: 15px; }
.faq .a p + p { margin-top: 10px; }
/* ============================================================
Contributor marquee
============================================================ */
.marquee {
display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; overflow: hidden; margin-top: 36px;
-webkit-mask-image: linear-gradient(90deg, transparent, #000 8% 92%, transparent);
mask-image: linear-gradient(90deg, transparent, #000 8% 92%, transparent);
}
.mq-row { display: flex; gap: 16px; width: max-content; padding-block: 6px; animation: mq 54s linear infinite; }
.mq-row.rev { animation-direction: reverse; }
.marquee:hover .mq-row, .marquee:focus-within .mq-row { animation-play-state: paused; }
.mq-dup { display: contents; }
@keyframes mq { to { transform: translateX(calc(-50% - 8px)); } }
.mq-card {
display: flex; align-items: center; gap: 12px;
min-width: 170px; padding: 6px 14px;
border: 1px solid transparent; border-radius: var(--r-full);
transition: background-color .15s, border-color .15s;
}
.mq-card:hover { background: var(--bg); border-color: var(--line); }
.mq-avatar {
position: relative; overflow: hidden; flex-shrink: 0;
width: 38px; height: 38px; border-radius: var(--r-full);
background: var(--bg); border: 1px solid var(--line);
display: grid; place-items: center;
font-weight: 600; font-size: 13px; color: var(--fg);
}
.mq-avatar img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; background: var(--surface); }
.mq-fallback { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; user-select: none; }
.mq-card b { display: block; font-size: 14px; font-weight: 600; color: var(--fg); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 160px; }
.mq-card i { display: block; font-style: normal; font-size: 12px; color: var(--body); }
/* ============================================================
Final CTA + footer
============================================================ */
.cta-final { text-align: center; }
.cta-final h2 { margin-bottom: 14px; }
.cta-final .lead { max-width: 34rem; margin-inline: auto; margin-bottom: 26px; }
.cta-actions { display: flex; flex-wrap: wrap; gap: 12px; justify-content: center; }
footer {
border-top: 1px solid var(--line); background: var(--glass);
-webkit-backdrop-filter: blur(20px); backdrop-filter: blur(20px);
}
.foot-grid { display: grid; grid-template-columns: 1.5fr 1fr 1fr 1fr; gap: 40px; padding-block: 56px 40px; }
@media (max-width: 900px) { .foot-grid { grid-template-columns: 1fr 1fr; gap: 32px; } }
@media (max-width: 560px) { .foot-grid { grid-template-columns: 1fr; } }
.foot-grid h3 { font-family: var(--sans); font-size: 12.5px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; color: var(--dim); margin-bottom: 14px; }
.foot-grid ul { list-style: none; display: flex; flex-direction: column; gap: 9px; }
.foot-grid li a { font-size: 14.5px; color: var(--body); display: inline-block; padding: 4px 0; }
.foot-grid li a:hover { color: var(--fg); }
.foot-brand p { font-size: 14.5px; color: var(--body); max-width: 26rem; margin-top: 14px; }
.foot-bottom {
border-top: 1px solid var(--line); padding-block: 22px 40px;
display: flex; flex-wrap: wrap; gap: 12px 24px; justify-content: space-between;
font-size: 13px; color: var(--dim);
}
.foot-links { display: flex; flex-wrap: wrap; gap: 8px 18px; }
.foot-links a { color: var(--dim); display: inline-block; padding: 4px 0; }
.foot-links a:hover { color: var(--fg); }
/* ============================================================
Motion
============================================================ */
:root { --ease: cubic-bezier(.22, 1, .36, 1); }
@keyframes rise { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: none; } }
@keyframes fade { from { opacity: 0; } to { opacity: 1; } }
@keyframes menu { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: none; } }
/* Hero entrance: CSS only, so it plays even if scripts fail. */
.hero h1, .hero .lead, .hero-cta, .hero .stats { animation: rise .9s var(--ease) both; }
.hero .lead { animation-delay: .08s; }
.hero-cta { animation-delay: .16s; }
.hero .stats { animation-delay: .24s; }
.nav { animation: fade .6s var(--ease) both; }
.mnav[open] .mnav-panel { animation: menu .2s var(--ease) both; }
/* Scroll reveal. Only elements the script tags are ever hidden. */
.rv { opacity: 0; transform: translateY(20px); }
.rv.in { opacity: 1; transform: none; }
/* Doubled class so it outranks component transitions such as .shots a. */
.rv.rv {
transition: opacity .8s var(--ease), transform .8s var(--ease), border-color .25s var(--ease);
transition-delay: var(--d, 0ms), var(--d, 0ms), 0ms;
}
/* Theme switch cross-fade (View Transitions where supported). */
::view-transition-old(root), ::view-transition-new(root) { animation-duration: .35s; animation-timing-function: ease; }
@media print { .rv { opacity: 1; transform: none; } }
/* ============================================================
Small screens
============================================================ */
@media (max-width: 700px) {
body::before { filter: blur(44px); }
.sec { padding-block: 64px; }
.sec-lg { padding-block: 80px; }
.sec-sm { padding-block: 48px; }
.hero { padding-block: 48px 56px; }
}
@media (prefers-reduced-motion: reduce) {
html { scroll-behavior: auto; }
*, ::before, ::after { transition-duration: .001ms !important; }
.hero h1, .hero .lead, .hero-cta, .hero .stats, .nav, .mnav[open] .mnav-panel { animation: none; }
.rv { opacity: 1; transform: none; }
::view-transition-group(*), ::view-transition-old(*), ::view-transition-new(*) { animation: none !important; }
/* Frozen marquee: show every card, wrapped, instead of clipping the row. */
.mq-row { animation: none; width: auto; flex-wrap: wrap; justify-content: center; padding-inline: 24px; }
.mq-dup { display: none; }
.marquee { -webkit-mask-image: none; mask-image: none; }
}
</style>
</head>
<body id="top">
<a class="skip" href="#main">Skip to content</a>
<header class="nav" id="nav">
<div class="wrap nav-in">
<a class="brand" href="./">
<img src="static/loop.png" alt="" width="26" height="26" />
<span>OmniGet</span>
</a>
<nav class="nav-links" aria-label="Main">
<a href="./docs/changelog/">Changelog</a>
<a href="./docs/">Docs</a>
<a href="./docs/installation/">Installation</a>
<a href="./docs/troubleshooting/">FAQ</a>
</nav>
<div class="nav-act">
<a class="nav-gh" href="https://github.com/OpenSelena/omniget" target="_blank" rel="noopener noreferrer">
<svg class="si" viewBox="0 0 24 24" aria-hidden="true" focusable="false" fill="currentColor"><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>
<span>Star</span>
<span class="nav-gh-count" id="ghStarCount">287</span>
</a>
<button class="themebtn" id="themeToggleBtn" onclick="toggleTheme()" aria-pressed="false" title="Switch to dark theme" aria-label="Switch between light and dark theme">
<span class="t-sun"><!-- @license lucide-static v1.52.0 - ISC --> <svg class="ic" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"> <circle cx="12" cy="12" r="4" /> <path d="M12 2v2" /> <path d="M12 20v2" /> <path d="m4.93 4.93 1.41 1.41" /> <path d="m17.66 17.66 1.41 1.41" /> <path d="M2 12h2" /> <path d="M20 12h2" /> <path d="m6.34 17.66-1.41 1.41" /> <path d="m19.07 4.93-1.41 1.41" /> </svg></span>
<span class="t-moon"><!-- @license lucide-static v1.52.0 - ISC --> <svg class="ic" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"> <path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401" /> </svg></span>
</button>
<a class="btn btn-brand btn-sm" href="https://github.com/OpenSelena/omniget/releases/latest">Download</a>
<details class="mnav" id="mnav">
<summary aria-label="Open menu"><!-- @license lucide-static v1.52.0 - ISC --> <svg class="ic" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"> <path d="M3 5h.01" /> <path d="M3 12h.01" /> <path d="M3 19h.01" /> <path d="M8 5h13" /> <path d="M8 12h13" /> <path d="M8 19h13" /> </svg></summary>
<div class="mnav-panel">
<a href="./docs/changelog/">Changelog</a>
<a href="./docs/">Docs</a>
<a href="./docs/installation/">Installation</a>
<a href="./docs/troubleshooting/">FAQ</a>
<a href="https://github.com/OpenSelena/omniget/releases/latest">Download</a>
</div>
</details>
</div>
</div>
</header>
<main id="main">
<!-- ── Hero ─────────────────────────────────────────────────── -->
<section class="hero" id="hero">
<div class="wrap hero-grid">
<div class="herocopy">
<h1>Paste the link,<br />get the file.</h1>
<p class="lead">
Download courses, video, audio, images and torrents from 1,800+ sites.
Then play, read and convert them.
</p>
<div class="hero-cta" id="dlSplit">
<a class="btn btn-brand" id="dlMenuPanel" href="https://github.com/OpenSelena/omniget/releases/latest">
<svg class="si" viewBox="0 0 24 24" aria-hidden="true" focusable="false" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 15V3" /><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" /><path d="m7 10 5 5 5-5" /></svg>
<span>Download</span>
</a>
<a class="btn btn-secondary" href="https://github.com/OpenSelena/omniget">
<svg class="si" viewBox="0 0 24 24" aria-hidden="true" focusable="false" fill="currentColor"><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>
<span>GitHub</span>
</a>
</div>
<div class="stats">
<div class="stat"><b><span class="count" data-to="1800" data-suffix="+">1,800+</span></b><span>sites</span></div>
<div class="stat"><b><span class="count" data-to="158">158</span></b><span>tools</span></div>
<div class="stat"><b><span class="count" data-to="25">25</span></b><span>categories</span></div>
<div class="stat"><b><span class="count" data-to="38">38</span></b><span>course sites</span></div>
</div>
</div>
</div>
</section>
<!-- ── Platforms ────────────────────────────────────────────── -->
<section class="sec-sm bleed">
<div class="wrap">
<p class="wall-line">
Downloads courses, Instagram, X, Pinterest, Bilibili, Telegram, torrents, and 1,800+ sites via yt-dlp.
</p>
<div class="platforms">
<span class="pl"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/></svg><span class="pl-n">YouTube</span></span>
<span class="pl"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M7.0301.084c-1.2768.0602-2.1487.264-2.911.5634-.7888.3075-1.4575.72-2.1228 1.3877-.6652.6677-1.075 1.3368-1.3802 2.127-.2954.7638-.4956 1.6365-.552 2.914-.0564 1.2775-.0689 1.6882-.0626 4.947.0062 3.2586.0206 3.6671.0825 4.9473.061 1.2765.264 2.1482.5635 2.9107.308.7889.72 1.4573 1.388 2.1228.6679.6655 1.3365 1.0743 2.1285 1.38.7632.295 1.6361.4961 2.9134.552 1.2773.056 1.6884.069 4.9462.0627 3.2578-.0062 3.668-.0207 4.9478-.0814 1.28-.0607 2.147-.2652 2.9098-.5633.7889-.3086 1.4578-.72 2.1228-1.3881.665-.6682 1.0745-1.3378 1.3795-2.1284.2957-.7632.4966-1.636.552-2.9124.056-1.2809.0692-1.6898.063-4.948-.0063-3.2583-.021-3.6668-.0817-4.9465-.0607-1.2797-.264-2.1487-.5633-2.9117-.3084-.7889-.72-1.4568-1.3876-2.1228C21.2982 1.33 20.628.9208 19.8378.6165 19.074.321 18.2017.1197 16.9244.0645 15.6471.0093 15.236-.005 11.977.0014 8.718.0076 8.31.0215 7.0301.0839m.1402 21.6932c-1.17-.0509-1.8053-.2453-2.2287-.408-.5606-.216-.96-.4771-1.3819-.895-.422-.4178-.6811-.8186-.9-1.378-.1644-.4234-.3624-1.058-.4171-2.228-.0595-1.2645-.072-1.6442-.079-4.848-.007-3.2037.0053-3.583.0607-4.848.05-1.169.2456-1.805.408-2.2282.216-.5613.4762-.96.895-1.3816.4188-.4217.8184-.6814 1.3783-.9003.423-.1651 1.0575-.3614 2.227-.4171 1.2655-.06 1.6447-.072 4.848-.079 3.2033-.007 3.5835.005 4.8495.0608 1.169.0508 1.8053.2445 2.228.408.5608.216.96.4754 1.3816.895.4217.4194.6816.8176.9005 1.3787.1653.4217.3617 1.056.4169 2.2263.0602 1.2655.0739 1.645.0796 4.848.0058 3.203-.0055 3.5834-.061 4.848-.051 1.17-.245 1.8055-.408 2.2294-.216.5604-.4763.96-.8954 1.3814-.419.4215-.8181.6811-1.3783.9-.4224.1649-1.0577.3617-2.2262.4174-1.2656.0595-1.6448.072-4.8493.079-3.2045.007-3.5825-.006-4.848-.0608M16.953 5.5864A1.44 1.44 0 1 0 18.39 4.144a1.44 1.44 0 0 0-1.437 1.4424M5.8385 12.012c.0067 3.4032 2.7706 6.1557 6.173 6.1493 3.4026-.0065 6.157-2.7701 6.1506-6.1733-.0065-3.4032-2.771-6.1565-6.174-6.1498-3.403.0067-6.156 2.771-6.1496 6.1738M8 12.0077a4 4 0 1 1 4.008 3.9921A3.9996 3.9996 0 0 1 8 12.0077"/></svg><span class="pl-n">Instagram</span></span>
<span class="pl"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M12.525.02c1.31-.02 2.61-.01 3.91-.02.08 1.53.63 3.09 1.75 4.17 1.12 1.11 2.7 1.62 4.24 1.79v4.03c-1.44-.05-2.89-.35-4.2-.97-.57-.26-1.1-.59-1.62-.93-.01 2.92.01 5.84-.02 8.75-.08 1.4-.54 2.79-1.35 3.94-1.31 1.92-3.58 3.17-5.91 3.21-1.43.08-2.86-.31-4.08-1.03-2.02-1.19-3.44-3.37-3.65-5.71-.02-.5-.03-1-.01-1.49.18-1.9 1.12-3.72 2.58-4.96 1.66-1.44 3.98-2.13 6.15-1.72.02 1.48-.04 2.96-.04 4.44-.99-.32-2.15-.23-3.02.37-.63.41-1.11 1.04-1.36 1.75-.21.51-.15 1.07-.14 1.61.24 1.64 1.82 3.02 3.5 2.87 1.12-.01 2.19-.66 2.77-1.61.19-.33.4-.67.41-1.06.1-1.79.06-3.57.07-5.36.01-4.03-.01-8.05.02-12.07z"/></svg><span class="pl-n">TikTok</span></span>
<span class="pl"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M14.234 10.162 22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299-.929-1.329L3.076 1.56h3.182l5.965 8.532.929 1.329 7.754 11.09h-3.182z"/></svg><span class="pl-n">X</span></span>
<span class="pl"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M12 0C5.373 0 0 5.373 0 12c0 3.314 1.343 6.314 3.515 8.485l-2.286 2.286C.775 23.225 1.097 24 1.738 24H12c6.627 0 12-5.373 12-12S18.627 0 12 0Zm4.388 3.199c1.104 0 1.999.895 1.999 1.999 0 1.105-.895 2-1.999 2-.946 0-1.739-.657-1.947-1.539v.002c-1.147.162-2.032 1.15-2.032 2.341v.007c1.776.067 3.4.567 4.686 1.363.473-.363 1.064-.58 1.707-.58 1.547 0 2.802 1.254 2.802 2.802 0 1.117-.655 2.081-1.601 2.531-.088 3.256-3.637 5.876-7.997 5.876-4.361 0-7.905-2.617-7.998-5.87-.954-.447-1.614-1.415-1.614-2.538 0-1.548 1.255-2.802 2.803-2.802.645 0 1.239.218 1.712.585 1.275-.79 2.881-1.291 4.64-1.365v-.01c0-1.663 1.263-3.034 2.88-3.207.188-.911.993-1.595 1.959-1.595Zm-8.085 8.376c-.784 0-1.459.78-1.506 1.797-.047 1.016.64 1.429 1.426 1.429.786 0 1.371-.369 1.418-1.385.047-1.017-.553-1.841-1.338-1.841Zm7.406 0c-.786 0-1.385.824-1.338 1.841.047 1.017.634 1.385 1.418 1.385.785 0 1.473-.413 1.426-1.429-.046-1.017-.721-1.797-1.506-1.797Zm-3.703 4.013c-.974 0-1.907.048-2.77.135-.147.015-.241.168-.183.305.483 1.154 1.622 1.964 2.953 1.964 1.33 0 2.47-.81 2.953-1.964.057-.137-.037-.29-.184-.305-.863-.087-1.795-.135-2.769-.135Z"/></svg><span class="pl-n">Reddit</span></span>
<span class="pl"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M11.571 4.714h1.715v5.143H11.57zm4.715 0H18v5.143h-1.714zM6 0L1.714 4.286v15.428h5.143V24l4.286-4.286h3.428L22.286 12V0zm14.571 11.143l-3.428 3.428h-3.429l-3 3v-3H6.857V1.714h13.714Z"/></svg><span class="pl-n">Twitch</span></span>
<span class="pl"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z"/></svg><span class="pl-n">Telegram</span></span>
<span class="pl"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M12.017 0C5.396 0 .029 5.367.029 11.987c0 5.079 3.158 9.417 7.618 11.162-.105-.949-.199-2.403.041-3.439.219-.937 1.406-5.957 1.406-5.957s-.359-.72-.359-1.781c0-1.663.967-2.911 2.168-2.911 1.024 0 1.518.769 1.518 1.688 0 1.029-.653 2.567-.992 3.992-.285 1.193.6 2.165 1.775 2.165 2.128 0 3.768-2.245 3.768-5.487 0-2.861-2.063-4.869-5.008-4.869-3.41 0-5.409 2.562-5.409 5.199 0 1.033.394 2.143.889 2.741.099.12.112.225.085.345-.09.375-.293 1.199-.334 1.363-.053.225-.172.271-.401.165-1.495-.69-2.433-2.878-2.433-4.646 0-3.776 2.748-7.252 7.92-7.252 4.158 0 7.392 2.967 7.392 6.923 0 4.135-2.607 7.462-6.233 7.462-1.214 0-2.354-.629-2.758-1.379l-.749 2.848c-.269 1.045-1.004 2.352-1.498 3.146 1.123.345 2.306.535 3.55.535 6.607 0 11.985-5.365 11.985-11.987C23.97 5.39 18.592.026 11.985.026L12.017 0z"/></svg><span class="pl-n">Pinterest</span></span>
<span class="pl"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M17.813 4.653h.854c1.51.054 2.769.578 3.773 1.574 1.004.995 1.524 2.249 1.56 3.76v7.36c-.036 1.51-.556 2.769-1.56 3.773s-2.262 1.524-3.773 1.56H5.333c-1.51-.036-2.769-.556-3.773-1.56S.036 18.858 0 17.347v-7.36c.036-1.511.556-2.765 1.56-3.76 1.004-.996 2.262-1.52 3.773-1.574h.774l-1.174-1.12a1.234 1.234 0 0 1-.373-.906c0-.356.124-.658.373-.907l.027-.027c.267-.249.573-.373.92-.373.347 0 .653.124.92.373L9.653 4.44c.071.071.134.142.187.213h4.267a.836.836 0 0 1 .16-.213l2.853-2.747c.267-.249.573-.373.92-.373.347 0 .662.151.929.4.267.249.391.551.391.907 0 .355-.124.657-.373.906zM5.333 7.24c-.746.018-1.373.276-1.88.773-.506.498-.769 1.13-.786 1.894v7.52c.017.764.28 1.395.786 1.893.507.498 1.134.756 1.88.773h13.334c.746-.017 1.373-.275 1.88-.773.506-.498.769-1.129.786-1.893v-7.52c-.017-.765-.28-1.396-.786-1.894-.507-.497-1.134-.755-1.88-.773zM8 11.107c.373 0 .684.124.933.373.25.249.383.569.4.96v1.173c-.017.391-.15.711-.4.96-.249.25-.56.374-.933.374s-.684-.125-.933-.374c-.25-.249-.383-.569-.4-.96V12.44c0-.373.129-.689.386-.947.258-.257.574-.386.947-.386zm8 0c.373 0 .684.124.933.373.25.249.383.569.4.96v1.173c-.017.391-.15.711-.4.96-.249.25-.56.374-.933.374s-.684-.125-.933-.374c-.25-.249-.383-.569-.4-.96V12.44c.017-.391.15-.711.4-.96.249-.249.56-.373.933-.373Z"/></svg><span class="pl-n">Bilibili</span></span>
<span class="pl"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M5.202 2.857C7.954 4.922 10.913 9.11 12 11.358c1.087-2.247 4.046-6.436 6.798-8.501C20.783 1.366 24 .213 24 3.883c0 .732-.42 6.156-.667 7.037-.856 3.061-3.978 3.842-6.755 3.37 4.854.826 6.089 3.562 3.422 6.299-5.065 5.196-7.28-1.304-7.847-2.97-.104-.305-.152-.448-.153-.327 0-.121-.05.022-.153.327-.568 1.666-2.782 8.166-7.847 2.97-2.667-2.737-1.432-5.473 3.422-6.3-2.777.473-5.899-.308-6.755-3.369C.42 10.04 0 4.615 0 3.883c0-3.67 3.217-2.517 5.202-1.026"/></svg><span class="pl-n">Bluesky</span></span>
<span class="pl"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M23.9765 6.4168c-.105 2.338-1.739 5.5429-4.894 9.6088-3.2679 4.247-6.0258 6.3699-8.2898 6.3699-1.409 0-2.578-1.294-3.553-3.881l-1.9179-7.1138c-.719-2.584-1.488-3.878-2.312-3.878-.179 0-.806.378-1.8809 1.132l-1.129-1.457a315.06 315.06 0 003.501-3.1279c1.579-1.368 2.765-2.085 3.5539-2.159 1.867-.18 3.016 1.1 3.447 3.838.465 2.953.789 4.789.971 5.5069.5389 2.45 1.1309 3.674 1.7759 3.674.502 0 1.256-.796 2.265-2.385 1.004-1.589 1.54-2.797 1.612-3.628.144-1.371-.395-2.061-1.614-2.061-.574 0-1.167.121-1.777.391 1.186-3.8679 3.434-5.7568 6.7619-5.6368 2.4729.06 3.6279 1.664 3.4929 4.7969z"/></svg><span class="pl-n">Vimeo</span></span>
<span class="pl"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M12 0L5.81 3.573v3.574l6.189-3.574 6.191 3.574V3.573zM5.81 10.148v8.144c0 1.85.589 3.243 1.741 4.234S10.177 24 11.973 24s3.269-.482 4.448-1.474c1.179-.991 1.768-2.439 1.768-4.314v-8.064h-3.242v7.85c0 2.036-1.509 3.055-2.948 3.055-1.428 0-2.947-.991-2.947-3.027v-7.878z"/></svg><span class="pl-n">Udemy</span></span>
</div>
</div>
</section>
<!-- ── How it works ─────────────────────────────────────────── -->
<section class="sec bleed" id="how">
<div class="wrap" style="text-align: center;">
<h2 style="margin-bottom: 12px; text-align: center;">How it works</h2>
<p class="lead" style="max-width: 46rem; margin-inline: auto; text-align: center;">
Paste any supported link. OmniGet detects the source, picks the extractor, and manages the download.
</p>
<figure class="shot shot-wide">
<img src="assets/readme/workflow.png" width="2000" height="857"
alt="Three numbered panels: 1, paste a link into the OmniGet box; 2, OmniGet detects the site and picks the extractor; 3, the file lands in your folder with a player window beside it." />
</figure>
<ol class="steps" style="text-align: left;">
<li>
<div><b>Paste link</b><span>Video, course, post, magnet link, or .torrent file.</span></div>
</li>
<li>
<div><b>Auto-detect</b><span>Routes to native extractors or yt-dlp automatically.</span></div>
</li>
<li>
<div><b>Download &amp; open</b><span>Saved to your folder and ready in the built-in player.</span></div>
</li>
</ol>
</div>
</section>
<!-- ── The queue ────────────────────────────────────────────── -->
<section class="sec-lg" id="downloads">
<div class="wrap panel-grid">
<div>
<h2 style="margin-bottom: 16px;">Download settings and queue control</h2>
<p class="lead">
Configure output naming, quality presets, subtitles, connection limits, and browser cookies.
</p>
<div class="ticks">
<div class="tick"><!-- @license lucide-static v1.52.0 - ISC --> <svg class="ic" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"> <path d="M12 19h8" /> <path d="m4 17 6-6-6-6" /> </svg><span><b>Command transparency:</b> Every job records the exact command used, editable for reruns.</span></div>
<div class="tick"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M224,48V96a8,8,0,0,1-8,8H168a8,8,0,0,1-5.66-13.66L180.65,72a79.48,79.48,0,0,0-54.72-22.09h-.45A79.52,79.52,0,0,0,69.59,72.71,8,8,0,0,1,58.41,61.27,96,96,0,0,1,192,60.7l18.36-18.36A8,8,0,0,1,224,48ZM186.41,183.29A80,80,0,0,1,75.35,184l18.31-18.31A8,8,0,0,0,88,152H40a8,8,0,0,0-8,8v48a8,8,0,0,0,13.66,5.66L64,195.3a95.42,95.42,0,0,0,66,26.76h.53a95.36,95.36,0,0,0,67.07-27.33,8,8,0,0,0-11.18-11.44Z"/></svg><span><b>Resumable downloads:</b> Interrupted transfers resume without starting over.</span></div>
<div class="tick"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M240,152v24a16,16,0,0,1-16,16H115.93a4,4,0,0,1-3.24-6.35L174.27,101a8.21,8.21,0,0,0-1.37-11.3,8,8,0,0,0-11.37,1.61l-72,99.06A4,4,0,0,1,86.25,192H32a16,16,0,0,1-16-16V153.13c0-1.79,0-3.57.13-5.33a4,4,0,0,1,4-3.8H48a8,8,0,0,0,8-8.53A8.17,8.17,0,0,0,47.73,128H23.92a4,4,0,0,1-3.87-5c12-43.84,49.66-77.13,95.52-82.28a4,4,0,0,1,4.43,4V72a8,8,0,0,0,8.53,8A8.17,8.17,0,0,0,136,71.73V44.67a4,4,0,0,1,4.43-4A112.18,112.18,0,0,1,236.23,123a4,4,0,0,1-3.88,5H208.27a8.17,8.17,0,0,0-8.25,7.47,8,8,0,0,0,8,8.53h27.92a4,4,0,0,1,4,3.86C240,149.23,240,150.61,240,152Z"/></svg><span><b>Adaptive connections:</b> Up to 16 parallel fragments, with automatic backoff on rate limits.</span></div>
<div class="tick"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M256,128a15.76,15.76,0,0,1-7.33,13.34L160.48,197.5A15.91,15.91,0,0,1,136,184.16v-37.3L56.48,197.5A15.91,15.91,0,0,1,32,184.16V71.84A15.91,15.91,0,0,1,56.48,58.5L136,109.14V71.84A15.91,15.91,0,0,1,160.48,58.5l88.19,56.16A15.76,15.76,0,0,1,256,128Z"/></svg><span><b>Fast startup:</b> Bundled runtime initializes in under a second.</span></div>
</div>
<div class="formats">
<span class="format"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M216,104H102.09L210,75.51a8,8,0,0,0,5.68-9.84l-8.16-30a15.93,15.93,0,0,0-19.42-11.13L35.81,64.74a15.75,15.75,0,0,0-9.7,7.4,15.51,15.51,0,0,0-1.55,12L32,111.56c0,.14,0,.29,0,.44v88a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V112A8,8,0,0,0,216,104ZM192.16,40l6,22.07L164.57,71,136.44,54.72ZM77.55,70.27l28.12,16.24-59.6,15.73-6-22.08Z"/></svg>Video: MP4, MKV, WebM</span>
<span class="format"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M212.92,17.71a7.89,7.89,0,0,0-6.86-1.46l-128,32A8,8,0,0,0,72,56V166.1A36,36,0,1,0,88,196V102.25l112-28V134.1A36,36,0,1,0,216,164V24A8,8,0,0,0,212.92,17.71Z"/></svg>Audio: MP3, M4A, Opus, FLAC, WAV</span>
<span class="format"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M224,48H32A16,16,0,0,0,16,64V192a16,16,0,0,0,16,16H224a16,16,0,0,0,16-16V64A16,16,0,0,0,224,48ZM56,128H72a8,8,0,0,1,0,16H56a8,8,0,0,1,0-16Zm96,48H56a8,8,0,0,1,0-16h96a8,8,0,0,1,0,16Zm48,0H184a8,8,0,0,1,0-16h16a8,8,0,0,1,0,16Zm0-32H104a8,8,0,0,1,0-16h96a8,8,0,0,1,0,16Z"/></svg>Subtitles: SRT, VTT, ASS</span>
</div>
</div>
<figure class="shot shot-sm">
<img src="assets/readme/settings.png" width="1800" height="1125"
alt="The OmniGet Settings screen with Output, Quality and format, Subtitles and extras, Clipboard and hotkeys and Per-platform options, plus Network, Cookies, Channels, AI, Plugins and Advanced." />
<figcaption>Output, quality presets, subtitles, clipboard, per-platform options, cookies.</figcaption>
</figure>
</div>
</section>
<!-- ── Tools ────────────────────────────────────────────────── -->
<section class="sec-lg" id="tools">
<div class="wrap">
<div class="narrow" style="margin-bottom: 34px;">
<h2 style="margin-bottom: 14px;">156 tools across 24 categories</h2>
<p class="lead">
Built-in offline tools for media conversion, document processing, and platform utilities. Everything runs locally on your machine.
</p>
</div>
<div class="cats">
<div class="cat"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M7.0301.084c-1.2768.0602-2.1487.264-2.911.5634-.7888.3075-1.4575.72-2.1228 1.3877-.6652.6677-1.075 1.3368-1.3802 2.127-.2954.7638-.4956 1.6365-.552 2.914-.0564 1.2775-.0689 1.6882-.0626 4.947.0062 3.2586.0206 3.6671.0825 4.9473.061 1.2765.264 2.1482.5635 2.9107.308.7889.72 1.4573 1.388 2.1228.6679.6655 1.3365 1.0743 2.1285 1.38.7632.295 1.6361.4961 2.9134.552 1.2773.056 1.6884.069 4.9462.0627 3.2578-.0062 3.668-.0207 4.9478-.0814 1.28-.0607 2.147-.2652 2.9098-.5633.7889-.3086 1.4578-.72 2.1228-1.3881.665-.6682 1.0745-1.3378 1.3795-2.1284.2957-.7632.4966-1.636.552-2.9124.056-1.2809.0692-1.6898.063-4.948-.0063-3.2583-.021-3.6668-.0817-4.9465-.0607-1.2797-.264-2.1487-.5633-2.9117-.3084-.7889-.72-1.4568-1.3876-2.1228C21.2982 1.33 20.628.9208 19.8378.6165 19.074.321 18.2017.1197 16.9244.0645 15.6471.0093 15.236-.005 11.977.0014 8.718.0076 8.31.0215 7.0301.0839m.1402 21.6932c-1.17-.0509-1.8053-.2453-2.2287-.408-.5606-.216-.96-.4771-1.3819-.895-.422-.4178-.6811-.8186-.9-1.378-.1644-.4234-.3624-1.058-.4171-2.228-.0595-1.2645-.072-1.6442-.079-4.848-.007-3.2037.0053-3.583.0607-4.848.05-1.169.2456-1.805.408-2.2282.216-.5613.4762-.96.895-1.3816.4188-.4217.8184-.6814 1.3783-.9003.423-.1651 1.0575-.3614 2.227-.4171 1.2655-.06 1.6447-.072 4.848-.079 3.2033-.007 3.5835.005 4.8495.0608 1.169.0508 1.8053.2445 2.228.408.5608.216.96.4754 1.3816.895.4217.4194.6816.8176.9005 1.3787.1653.4217.3617 1.056.4169 2.2263.0602 1.2655.0739 1.645.0796 4.848.0058 3.203-.0055 3.5834-.061 4.848-.051 1.17-.245 1.8055-.408 2.2294-.216.5604-.4763.96-.8954 1.3814-.419.4215-.8181.6811-1.3783.9-.4224.1649-1.0577.3617-2.2262.4174-1.2656.0595-1.6448.072-4.8493.079-3.2045.007-3.5825-.006-4.848-.0608M16.953 5.5864A1.44 1.44 0 1 0 18.39 4.144a1.44 1.44 0 0 0-1.437 1.4424M5.8385 12.012c.0067 3.4032 2.7706 6.1557 6.173 6.1493 3.4026-.0065 6.157-2.7701 6.1506-6.1733-.0065-3.4032-2.771-6.1565-6.174-6.1498-3.403.0067-6.156 2.771-6.1496 6.1738M8 12.0077a4 4 0 1 1 4.008 3.9921A3.9996 3.9996 0 0 1 8 12.0077"/></svg><b>Instagram</b><i>24</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M216,104H102.09L210,75.51a8,8,0,0,0,5.68-9.84l-8.16-30a15.93,15.93,0,0,0-19.42-11.13L35.81,64.74a15.75,15.75,0,0,0-9.7,7.4,15.51,15.51,0,0,0-1.55,12L32,111.56c0,.14,0,.29,0,.44v88a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V112A8,8,0,0,0,216,104ZM192.16,40l6,22.07L164.57,71,136.44,54.72ZM77.55,70.27l28.12,16.24-59.6,15.73-6-22.08Z"/></svg><b>Video editing</b><i>14</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M44,120H212a4,4,0,0,0,4-4V88a8,8,0,0,0-2.34-5.66l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40v76A4,4,0,0,0,44,120ZM152,44l44,44H152Zm72,108.53a8.18,8.18,0,0,1-8.25,7.47H192v16h15.73a8.17,8.17,0,0,1,8.25,7.47,8,8,0,0,1-8,8.53H192v15.73a8.17,8.17,0,0,1-7.47,8.25,8,8,0,0,1-8.53-8V152a8,8,0,0,1,8-8h32A8,8,0,0,1,224,152.53ZM64,144H48a8,8,0,0,0-8,8v55.73A8.17,8.17,0,0,0,47.47,216,8,8,0,0,0,56,208v-8h7.4c15.24,0,28.14-11.92,28.59-27.15A28,28,0,0,0,64,144Zm-.35,40H56V160h8a12,12,0,0,1,12,13.16A12.25,12.25,0,0,1,63.65,184ZM128,144H112a8,8,0,0,0-8,8v56a8,8,0,0,0,8,8h15.32c19.66,0,36.21-15.48,36.67-35.13A36,36,0,0,0,128,144Zm-.49,56H120V160h8a20,20,0,0,1,20,20.77C147.58,191.59,138.34,200,127.51,200Z"/></svg><b>PDF</b><i>13</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/></svg><b>YouTube</b><i>11</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M235.29,216.7C212.86,205.69,200,182.12,200,152V134.69a15.94,15.94,0,0,0-10.09-14.87l-28.65-11.46A8,8,0,0,1,156.79,98l22.32-56.67C184,28.79,178,14.21,165.34,9.51a24,24,0,0,0-30.7,13.71L112.25,80.08a8,8,0,0,1-10.41,4.5L73.11,73.08a15.91,15.91,0,0,0-17.38,3.66C34.68,98.4,24,123.71,24,152a111.53,111.53,0,0,0,31.15,77.53A8.06,8.06,0,0,0,61,232H232a8,8,0,0,0,8-7.51A8.21,8.21,0,0,0,235.29,216.7ZM115.11,216a87.52,87.52,0,0,1-24.26-41.71,8.21,8.21,0,0,0-9.25-6.18A8,8,0,0,0,75.28,178a105.33,105.33,0,0,0,18.36,38H64.44A95.62,95.62,0,0,1,40,152a85.92,85.92,0,0,1,7.73-36.3l137.8,55.13c3,18.06,10.55,33.5,21.89,45.19Z"/></svg><b>System</b><i>10</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M14.234 10.162 22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299-.929-1.329L3.076 1.56h3.182l5.965 8.532.929 1.329 7.754 11.09h-3.182z"/></svg><b>X / Twitter</b><i>10</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M12.017 0C5.396 0 .029 5.367.029 11.987c0 5.079 3.158 9.417 7.618 11.162-.105-.949-.199-2.403.041-3.439.219-.937 1.406-5.957 1.406-5.957s-.359-.72-.359-1.781c0-1.663.967-2.911 2.168-2.911 1.024 0 1.518.769 1.518 1.688 0 1.029-.653 2.567-.992 3.992-.285 1.193.6 2.165 1.775 2.165 2.128 0 3.768-2.245 3.768-5.487 0-2.861-2.063-4.869-5.008-4.869-3.41 0-5.409 2.562-5.409 5.199 0 1.033.394 2.143.889 2.741.099.12.112.225.085.345-.09.375-.293 1.199-.334 1.363-.053.225-.172.271-.401.165-1.495-.69-2.433-2.878-2.433-4.646 0-3.776 2.748-7.252 7.92-7.252 4.158 0 7.392 2.967 7.392 6.923 0 4.135-2.607 7.462-6.233 7.462-1.214 0-2.354-.629-2.758-1.379l-.749 2.848c-.269 1.045-1.004 2.352-1.498 3.146 1.123.345 2.306.535 3.55.535 6.607 0 11.985-5.365 11.985-11.987C23.97 5.39 18.592.026 11.985.026L12.017 0z"/></svg><b>Pinterest</b><i>10</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M216,40H72A16,16,0,0,0,56,56V72H40A16,16,0,0,0,24,88V200a16,16,0,0,0,16,16H184a16,16,0,0,0,16-16V184h16a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM172,72a12,12,0,1,1-12,12A12,12,0,0,1,172,72Zm12,128H40V88H56v80a16,16,0,0,0,16,16H184Zm32-32H72V120.69l30.34-30.35a8,8,0,0,1,11.32,0L163.31,140,189,114.34a8,8,0,0,1,11.31,0L216,130.07V168Z"/></svg><b>Images</b><i>9</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM72,152a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm32,32a8,8,0,0,1-16,0V72a8,8,0,0,1,16,0Zm32-16a8,8,0,0,1-16,0V88a8,8,0,0,1,16,0Zm32-16a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm32,8a8,8,0,0,1-16,0V96a8,8,0,0,1,16,0Z"/></svg><b>Speech &amp; subtitles</b><i>8</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M216.57,39.43A80,80,0,0,0,83.91,120.78L28.69,176A15.86,15.86,0,0,0,24,187.31V216a16,16,0,0,0,16,16H72a8,8,0,0,0,8-8V208H96a8,8,0,0,0,8-8V184h16a8,8,0,0,0,5.66-2.34l9.56-9.57A79.73,79.73,0,0,0,160,176h.1A80,80,0,0,0,216.57,39.43ZM180,92a16,16,0,1,1,16-16A16,16,0,0,1,180,92Z"/></svg><b>AI</b><i>6</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M216,32H152a8,8,0,0,0-6.34,3.12l-64,83.21L72,108.69a16,16,0,0,0-22.64,0l-8.69,8.7a16,16,0,0,0,0,22.63l22,22-32,32a16,16,0,0,0,0,22.63l8.69,8.68a16,16,0,0,0,22.62,0l32-32,22,22a16,16,0,0,0,22.64,0l8.69-8.7a16,16,0,0,0,0-22.63l-9.64-9.64,83.21-64A8,8,0,0,0,224,104V40A8,8,0,0,0,216,32Zm-8,68.06-81.74,62.88L115.32,152l50.34-50.34a8,8,0,0,0-11.32-11.31L104,140.68,93.07,129.74,155.94,48H208Z"/></svg><b>CTF and analysis</b><i>6</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M232,88V200.89A15.13,15.13,0,0,1,216.89,216H40a16,16,0,0,1-16-16V64A16,16,0,0,1,40,48H93.33a16.12,16.12,0,0,1,9.6,3.2L130.67,72H216A16,16,0,0,1,232,88Z"/></svg><b>Files</b><i>5</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM160,176H96a8,8,0,0,1,0-16h64a8,8,0,0,1,0,16Zm0-32H96a8,8,0,0,1,0-16h64a8,8,0,0,1,0,16Zm-8-56V44l44,44Z"/></svg><b>Documents</b><i>5</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 1 1 0-4.125 2.062 2.062 0 0 1 0 4.125zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg><b>LinkedIn</b><i>4</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M223.68,66.15,135.68,18a15.88,15.88,0,0,0-15.36,0l-88,48.17a16,16,0,0,0-8.32,14v95.64a16,16,0,0,0,8.32,14l88,48.17a15.88,15.88,0,0,0,15.36,0l88-48.17a16,16,0,0,0,8.32-14V80.18A16,16,0,0,0,223.68,66.15ZM128,120,47.65,76,128,32l80.35,44Zm8,99.64V133.83l80-43.78v85.76Z"/></svg><b>Games</b><i>3</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M212.92,17.71a7.89,7.89,0,0,0-6.86-1.46l-128,32A8,8,0,0,0,72,56V166.1A36,36,0 1,0,88,196V102.25l112-28V134.1A36,36,0 1,0,216,164V24A8,8,0,0,0,212.92,17.71Z"/></svg><b>Music</b><i>3</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M12 0C5.373 0 0 5.373 0 12c0 3.314 1.343 6.314 3.515 8.485l-2.286 2.286C.775 23.225 1.097 24 1.738 24H12c6.627 0 12-5.373 12-12S18.627 0 12 0Zm4.388 3.199c1.104 0 1.999.895 1.999 1.999 0 1.105-.895 2-1.999 2-.946 0-1.739-.657-1.947-1.539v.002c-1.147.162-2.032 1.15-2.032 2.341v.007c1.776.067 3.4.567 4.686 1.363.473-.363 1.064-.58 1.707-.58 1.547 0 2.802 1.254 2.802 2.802 0 1.117-.655 2.081-1.601 2.531-.088 3.256-3.637 5.876-7.997 5.876-4.361 0-7.905-2.617-7.998-5.87-.954-.447-1.614-1.415-1.614-2.538 0-1.548 1.255-2.802 2.803-2.802.645 0 1.239.218 1.712.585 1.275-.79 2.881-1.291 4.64-1.365v-.01c0-1.663 1.263-3.034 2.88-3.207.188-.911.993-1.595 1.959-1.595Zm-8.085 8.376c-.784 0-1.459.78-1.506 1.797-.047 1.016.64 1.429 1.426 1.429.786 0 1.371-.369 1.418-1.385.047-1.017-.553-1.841-1.338-1.841Zm7.406 0c-.786 0-1.385.824-1.338 1.841.047 1.017.634 1.385 1.418 1.385.785 0 1.473-.413 1.426-1.429-.046-1.017-.721-1.797-1.506-1.797Zm-3.703 4.013c-.974 0-1.907.048-2.77.135-.147.015-.241.168-.183.305.483 1.154 1.622 1.964 2.953 1.964 1.33 0 2.47-.81 2.953-1.964.057-.137-.037-.29-.184-.305-.863-.087-1.795-.135-2.769-.135Z"/></svg><b>Reddit</b><i>3</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M17.813 4.653h.854c1.51.054 2.769.578 3.773 1.574 1.004.995 1.524 2.249 1.56 3.76v7.36c-.036 1.51-.556 2.769-1.56 3.773s-2.262 1.524-3.773 1.56H5.333c-1.51-.036-2.769-.556-3.773-1.56S.036 18.858 0 17.347v-7.36c.036-1.511.556-2.765 1.56-3.76 1.004-.996 2.262-1.52 3.773-1.574h.774l-1.174-1.12a1.234 1.234 0 0 1-.373-.906c0-.356.124-.658.373-.907l.027-.027c.267-.249.573-.373.92-.373.347 0 .653.124.92.373L9.653 4.44c.071.071.134.142.187.213h4.267a.836.836 0 0 1 .16-.213l2.853-2.747c.267-.249.573-.373.92-.373.347 0 .662.151.929.4.267.249.391.551.391.907 0 .355-.124.657-.373.906zM5.333 7.24c-.746.018-1.373.276-1.88.773-.506.498-.769 1.13-.786 1.894v7.52c.017.764.28 1.395.786 1.893.507.498 1.134.756 1.88.773h13.334c.746-.017 1.373-.275 1.88-.773.506-.498.769-1.129.786-1.893v-7.52c-.017-.765-.28-1.396-.786-1.894-.507-.497-1.134-.755-1.88-.773zM8 11.107c.373 0 .684.124.933.373.25.249.383.569.4.96v1.173c-.017.391-.15.711-.4.96-.249.25-.56.374-.933.374s-.684-.125-.933-.374c-.25-.249-.383-.569-.4-.96V12.44c0-.373.129-.689.386-.947.258-.257.574-.386.947-.386zm8 0c.373 0 .684.124.933.373.25.249.383.569.4.96v1.173c-.017.391-.15.711-.4.96-.249.25-.56.374-.933.374s-.684-.125-.933-.374c-.25-.249-.383-.569-.4-.96V12.44c.017-.391.15-.711.4-.96.249-.249.56-.373.933-.373Z"/></svg><b>Bilibili</b><i>2</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M247.93,124.52C246.11,77.54,207.07,40,160.06,40A88.1,88.1,0,0,0,81.29,88.67h0A87.48,87.48,0,0,0,72,127.73,8.18,8.18,0,0,1,64.57,136,8,8,0,0,1,56,128a103.66,103.66,0,0,1,5.34-32.92,4,4,0,0,0-4.75-5.18A64.09,64.09,0,0,0,8,152c0,35.19,29.75,64,65,64H160A88.09,88.09,0,0,0,247.93,124.52Zm-50.27,25.14-32,32a8,8,0,0,1-11.32,0l-32-32a8,8,0,0,1,11.32-11.32L152,156.69V96a8,8,0,0,1,16,0v60.69l18.34-18.35a8,8,0,0,1,11.32,11.32Z"/></svg><b>Downloads</b><i>2</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M11.571 4.714h1.715v5.143H11.57zm4.715 0H18v5.143h-1.714zM6 0L1.714 4.286v15.428h5.143V24l4.286-4.286h3.428L22.286 12V0zm14.571 11.143l-3.428 3.428h-3.429l-3 3v-3H6.857V1.714h13.714Z"/></svg><b>Twitch</b><i>2</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M12 0C5.4 0 0 5.4 0 12s5.4 12 12 12 12-5.4 12-12S18.66 0 12 0zm5.521 17.34c-.24.359-.66.48-1.021.24-2.82-1.74-6.36-2.101-10.561-1.141-.418.122-.779-.179-.899-.539-.12-.421.18-.78.54-.9 4.56-1.021 8.52-.6 11.64 1.32.42.18.479.659.301 1.02zm1.44-3.3c-.301.42-.841.6-1.262.3-3.239-1.98-8.159-2.58-11.939-1.38-.479.12-1.02-.12-1.14-.6-.12-.48.12-1.021.6-1.141C9.6 9.9 15 10.561 18.72 12.84c.361.181.54.78.241 1.2zm.12-3.36C15.24 8.4 8.82 8.16 5.16 9.301c-.6.179-1.2-.181-1.38-.721-.18-.601.18-1.2.72-1.381 4.26-1.26 11.28-1.02 15.721 1.621.539.3.719 1.02.419 1.56-.299.421-1.02.599-1.559.3z"/></svg><b>Spotify</b><i>2</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M212.92,17.71a7.89,7.89,0,0,0-6.86-1.46l-128,32A8,8,0,0,0,72,56V166.1A36,36,0 1,0,88,196V102.25l112-28V134.1A36,36,0 1,0,216,164V24A8,8,0,0,0,212.92,17.71Z"/></svg><b>Audio</b><i>2</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M176,16H80A24,24,0,0,0,56,40V216a24,24,0,0,0,24,24h96a24,24,0,0,0,24-24V40A24,24,0,0,0,176,16ZM80,32h96a8,8,0,0,1,8,8v8H72V40A8,8,0,0,1,80,32Zm96,192H80a8,8,0,0,1-8-8v-8H184v8A8,8,0,0,1,176,224Z"/></svg><b>Phone</b><i>1</i></div>
<div class="cat"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M220.49,190.83a12,12,0,0,1,0,17L207.8,220.49a12,12,0,0,1-17,0l-56.56-56.57L115,214.09c0,.1-.08.21-.13.32a15.83,15.83,0,0,1-14.6,9.59l-.79,0a15.83,15.83,0,0,1-14.41-11L32.8,52.92A16,16,0,0,1,52.92,32.8L213,85.07a16,16,0,0,1,1.41,29.8l-.32.13-50.17,19.27ZM96,32a8,8,0,0,0,8-8V16a8,8,0,0,0-16,0v8A8,8,0,0,0,96,32ZM16,104h8a8,8,0,0,0,0-16H16a8,8,0,0,0,0,16ZM124.42,39.16a8,8,0,0,0,10.74-3.58l8-16a8,8,0,0,0-14.31-7.16l-8,16A8,8,0,0,0,124.42,39.16Zm-96,81.69-16,8a8,8,0,0,0,7.16,14.31l16-8a8,8,0,1,0-7.16-14.31Z"/></svg><b>Automation</b><i>1</i></div>
</div>
<div style="margin-top: 24px;">
<a class="btn btn-ghost" href="https://omniget.nav.bd/docs/">Browse all 156 tools <!-- @license lucide-static v1.52.0 - ISC --> <svg class="ic" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"> <path d="M5 12h14" /> <path d="m12 5 7 7-7 7" /> </svg></a>
</div>
<div class="shots c3" style="margin-top: 32px;">
<a href="assets/readme/tools.png" target="_blank" rel="noopener">
<img src="assets/readme/tools.png" width="1800" height="1406" loading="lazy"
alt="The OmniGet Tools hub showing all 24 categories." />
<b>Tools hub (24 categories)</b>
</a>
<a href="assets/readme/tools-instagram.png" target="_blank" rel="noopener">
<img src="assets/readme/tools-instagram.png" width="1800" height="1125" loading="lazy"
alt="Instagram tools in OmniGet." />
<b>Instagram (24 tools)</b>
</a>
<a href="assets/readme/tools-speech.png" target="_blank" rel="noopener">
<img src="assets/readme/tools-speech.png" width="1800" height="1125" loading="lazy"
alt="Speech and subtitle tools in OmniGet." />
<b>Speech &amp; subtitles (8 tools)</b>
</a>
</div>
<div class="split" style="margin-top: 48px;">
<div>
<h3 style="margin-bottom: 10px;">Model Context Protocol (MCP) support</h3>
<p class="lead">
37 tools are exposed locally over MCP with token authentication. Ready for Claude Code,
Claude Desktop, Cursor, and VS Code.
</p>
</div>
<figure class="shot shot-sm">
<img src="assets/readme/illustration-agents.png" width="2000" height="1116"
alt="Illustration of OmniGet MCP local bridge connection." />
<figcaption>37 local tools accessible via MCP.</figcaption>
</figure>
</div>
</div>
</section>
<!-- ── Study ────────────────────────────────────────────────── -->
<section class="sec-lg bleed" id="study">
<div class="wrap">
<div class="narrow" style="margin-bottom: 34px;">
<h2 style="margin-bottom: 14px;">The folder you downloaded becomes something you finish.</h2>
<p class="lead">
Point Study at your course folders and nothing is copied or moved. The player resumes to the
second, and <span class="mono">N</span> captures a note at the current timestamp.
</p>
<p class="lead" style="margin-top: 14px;">
Beside it: a reader for PDF, EPUB, DJVU, MOBI, AZW3, FB2, CBZ and CBR, a Markdown and LaTeX notes
editor, Anki spaced repetition, Pomodoro timers, and a music library with synced lyrics.
</p>
</div>
<div class="shots c2 nat">
<a href="assets/screenshot-courses.png" target="_blank" rel="noopener">
<img src="assets/screenshot-courses.png" width="2560" height="1032" loading="lazy"
alt="The OmniGet course player: the lesson list for Game Engine Development with C++ and OpenGL on the left, the lesson video with its timeline in the middle, and a Notes for this lesson panel below it reading, press N while watching to capture a note at the current time." />
<b>The player keeps your place, and <span class="mono">N</span> drops a note at the current time</b>
</a>
<a href="assets/screenshot-reader.png" target="_blank" rel="noopener">
<img src="assets/screenshot-reader.png" width="2560" height="1032" loading="lazy"
alt="The OmniGet reader showing O Programador Pragmático open at page 1 of 348, with an outline, bookmarks and highlights panel beside the page and annotation controls above it." />
<b>The reader, with outline, bookmarks and highlights beside the page</b>
</a>
</div>
<div class="plugins" style="margin-top: 52px;">
<div class="plugin">
<!-- @license lucide-static v1.52.0 - ISC --> <svg class="ic" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"> <path d="M21.42 10.922a1 1 0 0 0-.019-1.838L12.83 5.18a2 2 0 0 0-1.66 0L2.6 9.08a1 1 0 0 0 0 1.832l8.57 3.908a2 2 0 0 0 1.66 0z" /> <path d="M22 10v6" /> <path d="M6 12.5V16a6 3 0 0 0 12 0v-3.5" /> </svg>
<h3>Courses</h3>
<p>36 learning platforms, including Hotmart, Udemy, Kiwify, Rocketseat, Skool, Gumroad, Teachable, Thinkific, MasterClass and Pluralsight. DRM-protected lectures are reported and skipped.</p>
</div>
<div class="plugin">
<svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M231.4,44.34s0,.1,0,.15l-58.2,191.94a15.88,15.88,0,0,1-14,11.51q-.69.06-1.38.06a15.86,15.86,0,0,1-14.42-9.15L107,164.15a4,4,0,0,1,.77-4.58l57.92-57.92a8,8,0,0,0-11.31-11.31L96.43,148.26a4,4,0,0,1-4.58.77L17.08,112.64a16,16,0,0,1,2.49-29.8l191.94-58.2.15,0A16,16,0,0,1,231.4,44.34Z"/></svg>
<h3>Telegram</h3>
<p>Sign in with a QR code or your phone number. Browse your channels and groups, filter by type, and save whole archives into organised folders.</p>
</div>
<div class="plugin">
<svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M216,104H102.09L210,75.51a8,8,0,0,0,5.68-9.84l-8.16-30a15.93,15.93,0,0,0-19.42-11.13L35.81,64.74a15.75,15.75,0,0,0-9.7,7.4,15.51,15.51,0,0,0-1.55,12L32,111.56c0,.14,0,.29,0,.44v88a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V112A8,8,0,0,0,216,104ZM192.16,40l6,22.07L164.57,71,136.44,54.72ZM77.55,70.27l28.12,16.24-59.6,15.73-6-22.08Z"/></svg>
<h3>Convert</h3>
<p>FFmpeg conversions with GPU acceleration where the machine has it: container, codec, resolution and bitrate, with no internet required.</p>
</div>
</div>
<div class="shots c2">
<a href="assets/readme/marketplace.png" target="_blank" rel="noopener">
<img src="assets/readme/marketplace.png" width="1800" height="1125" loading="lazy"
alt="The OmniGet Marketplace listing the Courses, Study, Telegram and Convert plugins with version, author, permissions and enable switches." />
<b>Plugins compile into the binary — no runtime download</b>
</a>
<a href="assets/readme/telegram.png" target="_blank" rel="noopener">
<img src="assets/readme/telegram.png" width="1024" height="776" loading="lazy"
alt="The OmniGet Telegram plugin showing a channel archive in progress with a per-file progress list." />
<b>Telegram channels and groups, archived file by file</b>
</a>
</div>
</div>
</section>
<!-- ── Privacy ──────────────────────────────────────────────── -->
<section class="sec-lg priv" id="privacy">
<div class="wrap split">
<div>
<h2 style="margin-bottom: 16px;">What you download stays on your computer.</h2>
<p class="lead">
Everything runs locally. There is no account, no server of ours in the middle, and no telemetry
about what you download.
</p>
<div class="priv-list">
<div><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M208,40H48A16,16,0,0,0,32,56v56c0,52.72,25.52,84.67,46.93,102.19,23.06,18.86,46,25.26,47,25.53a8,8,0,0,0,4.2,0c1-.27,23.91-6.67,47-25.53C198.48,196.67,224,164.72,224,112V56A16,16,0,0,0,208,40Zm-34.32,69.66-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35a8,8,0,0,1,11.32,11.32Z"/></svg><span>Cookies and API keys live in your local profile, in the operating system's keyring.</span></div>
<div><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M208,40H48A16,16,0,0,0,32,56v56c0,52.72,25.52,84.67,46.93,102.19,23.06,18.86,46,25.26,47,25.53a8,8,0,0,0,4.2,0c1-.27,23.91-6.67,47-25.53C198.48,196.67,224,164.72,224,112V56A16,16,0,0,0,208,40Zm-34.32,69.66-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35a8,8,0,0,1,11.32,11.32Z"/></svg><span>Its only network calls go to the sites you asked for, to GitHub for updates, and to your AI provider.</span></div>
<div><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M208,40H48A16,16,0,0,0,32,56v56c0,52.72,25.52,84.67,46.93,102.19,23.06,18.86,46,25.26,47,25.53a8,8,0,0,0,4.2,0c1-.27,23.91-6.67,47-25.53C198.48,196.67,224,164.72,224,112V56A16,16,0,0,0,208,40Zm-34.32,69.66-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35a8,8,0,0,1,11.32,11.32Z"/></svg><span>The browser extension pairs over <span class="mono">127.0.0.1</span> with a per-install token, so it never leaves your machine.</span></div>
<div><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M208,40H48A16,16,0,0,0,32,56v56c0,52.72,25.52,84.67,46.93,102.19,23.06,18.86,46,25.26,47,25.53a8,8,0,0,0,4.2,0c1-.27,23.91-6.67,47-25.53C198.48,196.67,224,164.72,224,112V56A16,16,0,0,0,208,40Zm-34.32,69.66-56,56a8,8,0,0,1-11.32,0l-24-24a8,8,0,0,1,11.32-11.32L112,148.69l50.34-50.35a8,8,0,0,1,11.32,11.32Z"/></svg><span>Webviews run under a locked-down content security policy, and the file protocol refuses to open <span class="mono">.ssh</span>, <span class="mono">.aws</span> and <span class="mono">.git</span>.</span></div>
</div>
<div class="refuse">
<h3>What OmniGet refuses to do</h3>
<ul>
<li><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M96.68,57.87a4,4,0,0,1,2.08-6.6A130.13,130.13,0,0,1,128,48c34.88,0,66.57,13.26,91.66,38.35,18.83,18.83,27.3,37.62,27.65,38.41a8,8,0,0,1,0,6.5c-.35.79-8.82,19.57-27.65,38.4q-4.28,4.26-8.79,8.07a4,4,0,0,1-5.55-.36ZM213.92,210.62a8,8,0,1,1-11.84,10.76L180,197.13A127.21,127.21,0,0,1,128,208c-34.88,0-66.57-13.26-91.66-38.34C17.51,150.83,9,132.05,8.69,131.26a8,8,0,0,1,0-6.5C9,124,17.51,105.18,36.34,86.35a135,135,0,0,1,25-19.78L42.08,45.38A8,8,0,1,1,53.92,34.62Zm-65.49-48.25-52.69-58a40,40,0,0,0,52.69,58Z"/></svg><span>It does not bypass DRM. Content marked with Widevine, FairPlay or PlayReady encryption is reported and skipped.</span></li>
<li><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M96.68,57.87a4,4,0,0,1,2.08-6.6A130.13,130.13,0,0,1,128,48c34.88,0,66.57,13.26,91.66,38.35,18.83,18.83,27.3,37.62,27.65,38.41a8,8,0,0,1,0,6.5c-.35.79-8.82,19.57-27.65,38.4q-4.28,4.26-8.79,8.07a4,4,0,0,1-5.55-.36ZM213.92,210.62a8,8,0,1,1-11.84,10.76L180,197.13A127.21,127.21,0,0,1,128,208c-34.88,0-66.57-13.26-91.66-38.34C17.51,150.83,9,132.05,8.69,131.26a8,8,0,0,1,0-6.5C9,124,17.51,105.18,36.34,86.35a135,135,0,0,1,25-19.78L42.08,45.38A8,8,0,1,1,53.92,34.62Zm-65.49-48.25-52.69-58a40,40,0,0,0,52.69,58Z"/></svg><span>It does not break paywalls or share credentials. It downloads what your own logged-in session can already open.</span></li>
<li><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M96.68,57.87a4,4,0,0,1,2.08-6.6A130.13,130.13,0,0,1,128,48c34.88,0,66.57,13.26,91.66,38.35,18.83,18.83,27.3,37.62,27.65,38.41a8,8,0,0,1,0,6.5c-.35.79-8.82,19.57-27.65,38.4q-4.28,4.26-8.79,8.07a4,4,0,0,1-5.55-.36ZM213.92,210.62a8,8,0,1,1-11.84,10.76L180,197.13A127.21,127.21,0,0,1,128,208c-34.88,0-66.57-13.26-91.66-38.34C17.51,150.83,9,132.05,8.69,131.26a8,8,0,0,1,0-6.5C9,124,17.51,105.18,36.34,86.35a135,135,0,0,1,25-19.78L42.08,45.38A8,8,0,1,1,53.92,34.62Zm-65.49-48.25-52.69-58a40,40,0,0,0,52.69,58Z"/></svg><span>It does not fingerprint you. Telemetry is opt-out and carries no URLs, device identifiers or IP addresses.</span></li>
</ul>
</div>
<p class="small dim" style="margin-top: 22px;">
Free code signing on Windows is provided by <a class="ul" href="https://about.signpath.io">SignPath.io</a>,
made possible by the <a class="ul" href="https://signpath.org">SignPath Foundation</a>.
</p>
</div>
<figure class="shot shot-sm">
<img src="assets/readme/extension.png" width="2000" height="1116"
alt="Loop, the OmniGet mascot, holding one end of an orange cable plugged into a browser window and the other end plugged into the OmniGet window. A padlock, a house icon, two cookies and a key tag float behind." />
<figcaption>The extension hands over the session on 127.0.0.1, with a per-install token.</figcaption>
</figure>
</div>
</section>
<!-- ── Operating systems ────────────────────────────────────── -->
<section class="sec-lg bleed" id="os">
<div class="wrap">
<div class="sec-head">
<h2 class="display">Built for every desktop</h2>
<p class="lead">Official releases for Windows, macOS and Linux. Pick your platform, or install from the terminal.</p>
</div>
<div class="os-grid">
<div class="os-card" data-os="windows">
<div class="os-head"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path fill="currentColor" d="M0 0h11.377v11.372H0zm12.623 0H24v11.372H12.623zM0 12.623h11.377V24H0zm12.623 0H24V24H12.623z"/></svg><h3>Windows 10 / 11</h3></div>
<div class="os-action">
<a class="btn btn-brand" href="https://github.com/OpenSelena/omniget/releases/latest"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0Zm-101.66,5.66a8,8,0,0,0,11.32,0l40-40A8,8,0,0,0,168,96H136V32a8,8,0,0,0-16,0V96H88a8,8,0,0,0-5.66,13.66Z"/></svg>Download for Windows</a>
<span class="os-note">Installer, portable (.exe), and MSI available.</span>
</div>
<div class="cmd"><code>winget install -e --id OpenSelena.OmniGet</code><button class="copy" type="button" data-copy="winget install -e --id OpenSelena.OmniGet" aria-label="Copy command" title="Copy"><svg class="ic i-copy" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></svg><svg class="ic i-done" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M20 6 9 17l-5-5"/></svg></button></div>
</div>
<div class="os-card" data-os="macos">
<div class="os-head"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path fill="currentColor" d="M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701"/></svg><h3>macOS 10.15+</h3></div>
<div class="os-action">
<a class="btn btn-brand" href="https://github.com/OpenSelena/omniget/releases/latest"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0Zm-101.66,5.66a8,8,0,0,0,11.32,0l40-40A8,8,0,0,0,168,96H136V32a8,8,0,0,0-16,0V96H88a8,8,0,0,0-5.66,13.66Z"/></svg>Download for macOS</a>
<span class="os-note">Disk image (.dmg) for Apple Silicon and Intel.</span>
</div>
<div class="cmd"><code>brew install --cask OpenSelena/tap/omniget</code><button class="copy" type="button" data-copy="brew install --cask OpenSelena/tap/omniget" aria-label="Copy command" title="Copy"><svg class="ic i-copy" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></svg><svg class="ic i-done" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M20 6 9 17l-5-5"/></svg></button></div>
</div>
<div class="os-card" data-os="linux">
<div class="os-head"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path fill="currentColor" d="M12.504 0c-.155 0-.315.008-.48.021-4.226.333-3.105 4.807-3.17 6.298-.076 1.092-.3 1.953-1.05 3.02-.885 1.051-2.127 2.75-2.716 4.521-.278.832-.41 1.684-.287 2.489a.424.424 0 00-.11.135c-.26.268-.45.6-.663.839-.199.199-.485.267-.797.4-.313.136-.658.269-.864.68-.09.189-.136.394-.132.602 0 .199.027.4.055.536.058.399.116.728.04.97-.249.68-.28 1.145-.106 1.484.174.334.535.47.94.601.81.2 1.91.135 2.774.6.926.466 1.866.67 2.616.47.526-.116.97-.464 1.208-.946.587-.003 1.23-.269 2.26-.334.699-.058 1.574.267 2.577.2.025.134.063.198.114.333l.003.003c.391.778 1.113 1.132 1.884 1.071.771-.06 1.592-.536 2.257-1.306.631-.765 1.683-1.084 2.378-1.503.348-.199.629-.469.649-.853.023-.4-.2-.811-.714-1.376v-.097l-.003-.003c-.17-.2-.25-.535-.338-.926-.085-.401-.182-.786-.492-1.046h-.003c-.059-.054-.123-.067-.188-.135a.357.357 0 00-.19-.064c.431-1.278.264-2.55-.173-3.694-.533-1.41-1.465-2.638-2.175-3.483-.796-1.005-1.576-1.957-1.56-3.368.026-2.152.236-6.133-3.544-6.139zm.529 3.405h.013c.213 0 .396.062.584.198.19.135.33.332.438.533.105.259.158.459.166.724 0-.02.006-.04.006-.06v.105a.086.086 0 01-.004-.021l-.004-.024a1.807 1.807 0 01-.15.706.953.953 0 01-.213.335.71.71 0 00-.088-.042c-.104-.045-.198-.064-.284-.133a1.312 1.312 0 00-.22-.066c.05-.06.146-.133.183-.198.053-.128.082-.264.088-.402v-.02a1.21 1.21 0 00-.061-.4c-.045-.134-.101-.2-.183-.333-.084-.066-.167-.132-.267-.132h-.016c-.093 0-.176.03-.262.132a.8.8 0 00-.205.334 1.18 1.18 0 00-.09.4v.019c.002.089.008.179.02.267-.193-.067-.438-.135-.607-.202a1.635 1.635 0 01-.018-.2v-.02a1.772 1.772 0 01.15-.768c.082-.22.232-.406.43-.533a.985.985 0 01.594-.2zm-2.962.059h.036c.142 0 .27.048.399.135.146.129.264.288.344.465.09.199.14.4.153.667v.004c.007.134.006.2-.002.266v.08c-.03.007-.056.018-.083.024-.152.055-.274.135-.393.2.012-.09.013-.18.003-.267v-.015c-.012-.133-.04-.2-.082-.333a.613.613 0 00-.166-.267.248.248 0 00-.183-.064h-.021c-.071.006-.13.04-.186.132a.552.552 0 00-.12.27.944.944 0 00-.023.33v.015c.012.135.037.2.08.334.046.134.098.2.166.268.01.009.02.018.034.024-.07.057-.117.07-.176.136a.304.304 0 01-.131.068 2.62 2.62 0 01-.275-.402 1.772 1.772 0 01-.155-.667 1.759 1.759 0 01.08-.668 1.43 1.43 0 01.283-.535c.128-.133.26-.2.418-.2zm1.37 1.706c.332 0 .733.065 1.216.399.293.2.523.269 1.052.468h.003c.255.136.405.266.478.399v-.131a.571.571 0 01.016.47c-.123.31-.516.643-1.063.842v.002c-.268.135-.501.333-.775.465-.276.135-.588.292-1.012.267a1.139 1.139 0 01-.448-.067 3.566 3.566 0 01-.322-.198c-.195-.135-.363-.332-.612-.465v-.005h-.005c-.4-.246-.616-.512-.686-.71-.07-.268-.005-.47.193-.6.224-.135.38-.271.483-.336.104-.074.143-.102.176-.131h.002v-.003c.169-.202.436-.47.839-.601.139-.036.294-.065.466-.065zm2.8 2.142c.358 1.417 1.196 3.475 1.735 4.473.286.534.855 1.659 1.102 3.024.156-.005.33.018.513.064.646-1.671-.546-3.467-1.089-3.966-.22-.2-.232-.335-.123-.335.59.534 1.365 1.572 1.646 2.757.13.535.16 1.104.021 1.67.067.028.135.06.205.067 1.032.534 1.413.938 1.23 1.537v-.043c-.06-.003-.12 0-.18 0h-.016c.151-.467-.182-.825-1.065-1.224-.915-.4-1.646-.336-1.77.465-.008.043-.013.066-.018.135-.068.023-.139.053-.209.064-.43.268-.662.669-.793 1.187-.13.533-.17 1.156-.205 1.869v.003c-.02.334-.17.838-.319 1.35-1.5 1.072-3.58 1.538-5.348.334a2.645 2.645 0 00-.402-.533 1.45 1.45 0 00-.275-.333c.182 0 .338-.03.465-.067a.615.615 0 00.314-.334c.108-.267 0-.697-.345-1.163-.345-.467-.931-.995-1.788-1.521-.63-.4-.986-.87-1.15-1.396-.165-.534-.143-1.085-.015-1.645.245-1.07.873-2.11 1.274-2.763.107-.065.037.135-.408.974-.396.751-1.14 2.497-.122 3.854a8.123 8.123 0 01.647-2.876c.564-1.278 1.743-3.504 1.836-5.268.048.036.217.135.289.202.218.133.38.333.59.465.21.201.477.335.876.335.039.003.075.006.11.006.412 0 .73-.134.997-.268.29-.134.52-.334.74-.4h.005c.467-.135.835-.402 1.044-.7zm2.185 8.958c.037.6.343 1.245.882 1.377.588.134 1.434-.333 1.791-.765l.211-.01c.315-.007.577.01.847.268l.003.003c.208.199.305.53.391.876.085.4.154.78.409 1.066.486.527.645.906.636 1.14l.003-.007v.018l-.003-.012c-.015.262-.185.396-.498.595-.63.401-1.746.712-2.457 1.57-.618.737-1.37 1.14-2.036 1.191-.664.053-1.237-.2-1.574-.898l-.005-.003c-.21-.4-.12-1.025.056-1.69.176-.668.428-1.344.463-1.897.037-.714.076-1.335.195-1.814.12-.465.308-.797.641-.984l.045-.022zm-10.814.049h.01c.053 0 .105.005.157.014.376.055.706.333 1.023.752l.91 1.664.003.003c.243.533.754 1.064 1.189 1.637.434.598.77 1.131.729 1.57v.006c-.057.744-.48 1.148-1.125 1.294-.645.135-1.52.002-2.395-.464-.968-.536-2.118-.469-2.857-.602-.369-.066-.61-.2-.723-.4-.11-.2-.113-.602.123-1.23v-.004l.002-.003c.117-.334.03-.752-.027-1.118-.055-.401-.083-.71.043-.94.16-.334.396-.4.69-.533.294-.135.64-.202.915-.47h.002v-.002c.256-.268.445-.601.668-.838.19-.201.38-.336.663-.336zm7.159-9.074c-.435.201-.945.535-1.488.535-.542 0-.97-.267-1.28-.466-.154-.134-.28-.268-.373-.335-.164-.134-.144-.333-.074-.333.109.016.129.134.199.2.096.066.215.2.36.333.292.2.68.467 1.167.467.485 0 1.053-.267 1.398-.466.195-.135.445-.334.648-.467.156-.136.149-.267.279-.267.128.016.034.134-.147.332a8.097 8.097 0 01-.69.468zm-1.082-1.583V5.64c-.006-.02.013-.042.029-.05.074-.043.18-.027.26.004.063 0 .16.067.15.135-.006.049-.085.066-.135.066-.055 0-.092-.043-.141-.068-.052-.018-.146-.008-.163-.065zm-.551 0c-.02.058-.113.049-.166.066-.047.025-.086.068-.14.068-.05 0-.13-.02-.136-.068-.01-.066.088-.133.15-.133.08-.031.184-.047.259-.005.019.009.036.03.03.05v.02h.003z"/></svg><h3>Linux (x86_64 / ARM64)</h3></div>
<div class="os-action">
<a class="btn btn-brand" href="https://github.com/OpenSelena/omniget/releases/latest"><svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0Zm-101.66,5.66a8,8,0,0,0,11.32,0l40-40A8,8,0,0,0,168,96H136V32a8,8,0,0,0-16,0V96H88a8,8,0,0,0-5.66,13.66Z"/></svg>Download for Linux</a>
<span class="os-note">AppImage, Debian/Ubuntu (.deb), and Fedora/RHEL (.rpm).</span>
</div>
<div class="cmd"><code>chmod +x OmniGet_*.AppImage</code><button class="copy" type="button" data-copy="chmod +x OmniGet_*.AppImage" aria-label="Copy command" title="Copy"><svg class="ic i-copy" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></svg><svg class="ic i-done" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M20 6 9 17l-5-5"/></svg></button></div>
</div>
</div>
<p class="more"><a href="https://github.com/OpenSelena/omniget/releases">View all releases &rsaquo;</a></p>
</div>
</section>
<!-- ── FAQ ──────────────────────────────────────────────────── -->
<section class="sec-lg" id="faq">
<div class="wrap narrow">
<h2 style="margin-bottom: 34px;">Questions people ask first.</h2>
<div class="faq">
<details>
<summary>Is OmniGet free?</summary>
<div class="a"><p>Yes. GPL-3.0, no paid tier, no ads, no account. This repository is an independent fork, maintained under the same licence.</p></div>
</details>
<details>
<summary>Is it a yt-dlp GUI?</summary>
<div class="a">
<p>Partly. yt-dlp handles the long tail of sites; OmniGet bundles it, verifies it and updates it. Native extractors cover courses, Instagram, X, Pinterest, Bilibili, Telegram and torrents, and the queue adds resume and retry.</p>
</div>
</details>
<details>
<summary>Can it download a Udemy or Hotmart course I bought?</summary>
<div class="a"><p>Yes. The Courses plugin is built in and covers 36 platforms. Sign in, pick the sections, and download: lessons and attachments land in a folder per course and appear in Study. DRM-protected lectures are skipped and reported.</p></div>
</details>
<details>
<summary>Can it download Instagram stories, close friends or highlights?</summary>
<div class="a"><p>Yes, using your own session captured by the browser extension. Stories are downloaded without being marked as seen.</p></div>
</details>
<details>
<summary>Can it back up a Pinterest board in original quality?</summary>
<div class="a"><p>Yes, including videos, sections, secret boards with cookies, and incremental sync so you only fetch what is new.</p></div>
</details>
<details>
<summary>Does it resume interrupted downloads?</summary>
<div class="a"><p>Yes. Partial files are kept and continued, and rate limits trigger retries with backoff.</p></div>
</details>
<details>
<summary>Does it need Python, Node or a terminal?</summary>
<div class="a"><p>No. Download the app, open it, paste a link. The only terminal step is the one-time macOS Gatekeeper fix, which the documentation covers.</p></div>
</details>
<details>
<summary>macOS says the app is damaged.</summary>
<div class="a"><p>That is Gatekeeper reacting to an unsigned, un-notarised build. The two commands in the installation documentation clear it, and it happens once.</p></div>
</details>
<details>
<summary>Can it transcribe a video to subtitles offline?</summary>
<div class="a"><p>Yes. Tools, then Speech and subtitles, then Transcribe. It uses whisper.cpp locally and models download on demand.</p></div>
</details>
<details>
<summary>Can an AI agent use OmniGet?</summary>
<div class="a"><p>Two ways. The MCP server under Tools → AI exposes 37 tools to Claude Code, Claude Desktop, Cursor, VS Code, Goose and Codex. Separately, this repository ships a Claude Code plugin.</p></div>
</details>
</div>
</div>
</section>
<!-- ── Credits ──────────────────────────────────────────────── -->
<section class="sec bleed" id="community">
<div class="wrap" style="text-align: center;">
<h2 style="margin-bottom: 8px; text-align: center;">Community contributors</h2>
<p class="muted small" style="text-align: center;">Built by open source contributors.</p>
</div>
<div class="marquee">
<div class="mq-row" id="mq-row-1">
<a href="https://github.com/tonhowtf" target="_blank" rel="noopener noreferrer" class="mq-card" title="Antonio Leandro (@tonhowtf) (Original Author, 2,640+ commits)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">AL</span> <img src="https://avatars.githubusercontent.com/u/74384266?v=4&amp;s=72" alt="Antonio Leandro (tonhowtf)" loading="lazy" onerror="this.remove()" /> </span> <div><b>Antonio Leandro</b><i>Original Author (2,640+ commits)</i></div> </a>
<a href="https://github.com/InstaZDLL" target="_blank" rel="noopener noreferrer" class="mq-card" title="InstaZDLL (53 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">IN</span> <img src="https://avatars.githubusercontent.com/u/72951793?v=4&amp;s=72" alt="InstaZDLL" loading="lazy" onerror="this.remove()" /> </span> <div><b>InstaZDLL</b><i>53 commits</i></div> </a>
<a href="https://github.com/igect" target="_blank" rel="noopener noreferrer" class="mq-card" title="igect (44 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">IG</span> <img src="https://avatars.githubusercontent.com/u/280496113?v=4&amp;s=72" alt="igect" loading="lazy" onerror="this.remove()" /> </span> <div><b>igect</b><i>44 commits</i></div> </a>
<a href="https://github.com/YahyaZekry" target="_blank" rel="noopener noreferrer" class="mq-card" title="YahyaZekry (16 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">YA</span> <img src="https://avatars.githubusercontent.com/u/38083306?v=4&amp;s=72" alt="YahyaZekry" loading="lazy" onerror="this.remove()" /> </span> <div><b>YahyaZekry</b><i>16 commits</i></div> </a>
<a href="https://github.com/D0n-A" target="_blank" rel="noopener noreferrer" class="mq-card" title="D0n-A (11 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">D0</span> <img src="https://avatars.githubusercontent.com/u/38649081?v=4&amp;s=72" alt="D0n-A" loading="lazy" onerror="this.remove()" /> </span> <div><b>D0n-A</b><i>11 commits</i></div> </a>
<a href="https://github.com/theodoremca" target="_blank" rel="noopener noreferrer" class="mq-card" title="theodoremca (4 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">TH</span> <img src="https://avatars.githubusercontent.com/u/35204506?v=4&amp;s=72" alt="theodoremca" loading="lazy" onerror="this.remove()" /> </span> <div><b>theodoremca</b><i>4 commits</i></div> </a>
<a href="https://github.com/xJaroslav69" target="_blank" rel="noopener noreferrer" class="mq-card" title="xJaroslav69 (4 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">XJ</span> <img src="https://avatars.githubusercontent.com/u/177156785?v=4&amp;s=72" alt="xJaroslav69" loading="lazy" onerror="this.remove()" /> </span> <div><b>xJaroslav69</b><i>4 commits</i></div> </a>
<a href="https://github.com/Tan665565" target="_blank" rel="noopener noreferrer" class="mq-card" title="Tan665565 (3 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">TA</span> <img src="https://avatars.githubusercontent.com/u/220505146?v=4&amp;s=72" alt="Tan665565" loading="lazy" onerror="this.remove()" /> </span> <div><b>Tan665565</b><i>3 commits</i></div> </a>
<a href="https://github.com/ManoloZocco" target="_blank" rel="noopener noreferrer" class="mq-card" title="ManoloZocco (3 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">MA</span> <img src="https://avatars.githubusercontent.com/u/33806905?v=4&amp;s=72" alt="ManoloZocco" loading="lazy" onerror="this.remove()" /> </span> <div><b>ManoloZocco</b><i>3 commits</i></div> </a>
<a href="https://github.com/Crayz129" target="_blank" rel="noopener noreferrer" class="mq-card" title="Crayz129 (2 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">CR</span> <img src="https://avatars.githubusercontent.com/u/70708880?v=4&amp;s=72" alt="Crayz129" loading="lazy" onerror="this.remove()" /> </span> <div><b>Crayz129</b><i>2 commits</i></div> </a>
<a href="https://github.com/Twilight0" target="_blank" rel="noopener noreferrer" class="mq-card" title="Twilight0 (2 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">TW</span> <img src="https://avatars.githubusercontent.com/u/1566256?v=4&amp;s=72" alt="Twilight0" loading="lazy" onerror="this.remove()" /> </span> <div><b>Twilight0</b><i>2 commits</i></div> </a>
<!-- Duplicate half, aria-hidden: makes the loop seamless. -->
<span class="mq-dup" aria-hidden="true" inert>
<a href="https://github.com/tonhowtf" target="_blank" rel="noopener noreferrer" class="mq-card" title="Antonio Leandro (@tonhowtf) (Original Author, 2,640+ commits)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">AL</span> <img src="https://avatars.githubusercontent.com/u/74384266?v=4&amp;s=72" alt="Antonio Leandro (tonhowtf)" loading="lazy" onerror="this.remove()" /> </span> <div><b>Antonio Leandro</b><i>Original Author (2,640+ commits)</i></div> </a>
<a href="https://github.com/InstaZDLL" target="_blank" rel="noopener noreferrer" class="mq-card" title="InstaZDLL (53 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">IN</span> <img src="https://avatars.githubusercontent.com/u/72951793?v=4&amp;s=72" alt="InstaZDLL" loading="lazy" onerror="this.remove()" /> </span> <div><b>InstaZDLL</b><i>53 commits</i></div> </a>
<a href="https://github.com/igect" target="_blank" rel="noopener noreferrer" class="mq-card" title="igect (44 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">IG</span> <img src="https://avatars.githubusercontent.com/u/280496113?v=4&amp;s=72" alt="igect" loading="lazy" onerror="this.remove()" /> </span> <div><b>igect</b><i>44 commits</i></div> </a>
<a href="https://github.com/YahyaZekry" target="_blank" rel="noopener noreferrer" class="mq-card" title="YahyaZekry (16 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">YA</span> <img src="https://avatars.githubusercontent.com/u/38083306?v=4&amp;s=72" alt="YahyaZekry" loading="lazy" onerror="this.remove()" /> </span> <div><b>YahyaZekry</b><i>16 commits</i></div> </a>
<a href="https://github.com/D0n-A" target="_blank" rel="noopener noreferrer" class="mq-card" title="D0n-A (11 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">D0</span> <img src="https://avatars.githubusercontent.com/u/38649081?v=4&amp;s=72" alt="D0n-A" loading="lazy" onerror="this.remove()" /> </span> <div><b>D0n-A</b><i>11 commits</i></div> </a>
<a href="https://github.com/theodoremca" target="_blank" rel="noopener noreferrer" class="mq-card" title="theodoremca (4 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">TH</span> <img src="https://avatars.githubusercontent.com/u/35204506?v=4&amp;s=72" alt="theodoremca" loading="lazy" onerror="this.remove()" /> </span> <div><b>theodoremca</b><i>4 commits</i></div> </a>
<a href="https://github.com/xJaroslav69" target="_blank" rel="noopener noreferrer" class="mq-card" title="xJaroslav69 (4 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">XJ</span> <img src="https://avatars.githubusercontent.com/u/177156785?v=4&amp;s=72" alt="xJaroslav69" loading="lazy" onerror="this.remove()" /> </span> <div><b>xJaroslav69</b><i>4 commits</i></div> </a>
<a href="https://github.com/Tan665565" target="_blank" rel="noopener noreferrer" class="mq-card" title="Tan665565 (3 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">TA</span> <img src="https://avatars.githubusercontent.com/u/220505146?v=4&amp;s=72" alt="Tan665565" loading="lazy" onerror="this.remove()" /> </span> <div><b>Tan665565</b><i>3 commits</i></div> </a>
<a href="https://github.com/ManoloZocco" target="_blank" rel="noopener noreferrer" class="mq-card" title="ManoloZocco (3 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">MA</span> <img src="https://avatars.githubusercontent.com/u/33806905?v=4&amp;s=72" alt="ManoloZocco" loading="lazy" onerror="this.remove()" /> </span> <div><b>ManoloZocco</b><i>3 commits</i></div> </a>
<a href="https://github.com/Crayz129" target="_blank" rel="noopener noreferrer" class="mq-card" title="Crayz129 (2 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">CR</span> <img src="https://avatars.githubusercontent.com/u/70708880?v=4&amp;s=72" alt="Crayz129" loading="lazy" onerror="this.remove()" /> </span> <div><b>Crayz129</b><i>2 commits</i></div> </a>
<a href="https://github.com/Twilight0" target="_blank" rel="noopener noreferrer" class="mq-card" title="Twilight0 (2 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">TW</span> <img src="https://avatars.githubusercontent.com/u/1566256?v=4&amp;s=72" alt="Twilight0" loading="lazy" onerror="this.remove()" /> </span> <div><b>Twilight0</b><i>2 commits</i></div> </a>
</span>
</div>
<div class="mq-row rev" id="mq-row-2">
<a href="https://github.com/dajiaohuang" target="_blank" rel="noopener noreferrer" class="mq-card" title="dajiaohuang (2 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">DA</span> <img src="https://avatars.githubusercontent.com/u/108231307?v=4&amp;s=72" alt="dajiaohuang" loading="lazy" onerror="this.remove()" /> </span> <div><b>dajiaohuang</b><i>2 commits</i></div> </a>
<a href="https://github.com/shiroesneo-99" target="_blank" rel="noopener noreferrer" class="mq-card" title="shiroesneo-99 (2 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">SH</span> <img src="https://avatars.githubusercontent.com/u/252557381?v=4&amp;s=72" alt="shiroesneo-99" loading="lazy" onerror="this.remove()" /> </span> <div><b>shiroesneo-99</b><i>2 commits</i></div> </a>
<a href="https://github.com/SiIverAsh" target="_blank" rel="noopener noreferrer" class="mq-card" title="SiIverAsh (2 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">SI</span> <img src="https://avatars.githubusercontent.com/u/108169083?v=4&amp;s=72" alt="SiIverAsh" loading="lazy" onerror="this.remove()" /> </span> <div><b>SiIverAsh</b><i>2 commits</i></div> </a>
<a href="https://github.com/gtxPrime" target="_blank" rel="noopener noreferrer" class="mq-card" title="gtxPrime (1 commit on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">GT</span> <img src="https://avatars.githubusercontent.com/u/61928763?v=4&amp;s=72" alt="gtxPrime" loading="lazy" onerror="this.remove()" /> </span> <div><b>gtxPrime</b><i>1 commit</i></div> </a>
<a href="https://github.com/ShiroKSH" target="_blank" rel="noopener noreferrer" class="mq-card" title="ShiroKSH (1 commit on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">SH</span> <img src="https://avatars.githubusercontent.com/u/218489957?v=4&amp;s=72" alt="ShiroKSH" loading="lazy" onerror="this.remove()" /> </span> <div><b>ShiroKSH</b><i>1 commit</i></div> </a>
<a href="https://github.com/alvarorichard" target="_blank" rel="noopener noreferrer" class="mq-card" title="alvarorichard (1 commit on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">AL</span> <img src="https://avatars.githubusercontent.com/u/88117897?v=4&amp;s=72" alt="alvarorichard" loading="lazy" onerror="this.remove()" /> </span> <div><b>alvarorichard</b><i>1 commit</i></div> </a>
<a href="https://github.com/gokomer" target="_blank" rel="noopener noreferrer" class="mq-card" title="gokomer (1 commit on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">GO</span> <img src="https://avatars.githubusercontent.com/u/11593018?v=4&amp;s=72" alt="gokomer" loading="lazy" onerror="this.remove()" /> </span> <div><b>gokomer</b><i>1 commit</i></div> </a>
<a href="https://github.com/bachjessen" target="_blank" rel="noopener noreferrer" class="mq-card" title="bachjessen (1 commit on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">BA</span> <img src="https://avatars.githubusercontent.com/u/59052984?v=4&amp;s=72" alt="bachjessen" loading="lazy" onerror="this.remove()" /> </span> <div><b>bachjessen</b><i>1 commit</i></div> </a>
<a href="https://github.com/chiyi4488" target="_blank" rel="noopener noreferrer" class="mq-card" title="chiyi4488 (1 commit on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">CH</span> <img src="https://avatars.githubusercontent.com/u/30853081?v=4&amp;s=72" alt="chiyi4488" loading="lazy" onerror="this.remove()" /> </span> <div><b>chiyi4488</b><i>1 commit</i></div> </a>
<a href="https://github.com/gkd2323c" target="_blank" rel="noopener noreferrer" class="mq-card" title="gkd2323c (1 commit on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">GK</span> <img src="https://avatars.githubusercontent.com/u/216696112?v=4&amp;s=72" alt="gkd2323c" loading="lazy" onerror="this.remove()" /> </span> <div><b>gkd2323c</b><i>1 commit</i></div> </a>
<a href="https://github.com/OtaviOuu" target="_blank" rel="noopener noreferrer" class="mq-card" title="OtaviOuu (1 commit on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">OT</span> <img src="https://avatars.githubusercontent.com/u/106476419?v=4&amp;s=72" alt="OtaviOuu" loading="lazy" onerror="this.remove()" /> </span> <div><b>OtaviOuu</b><i>1 commit</i></div> </a>
<!-- Duplicate half, aria-hidden: makes the loop seamless. -->
<span class="mq-dup" aria-hidden="true" inert>
<a href="https://github.com/dajiaohuang" target="_blank" rel="noopener noreferrer" class="mq-card" title="dajiaohuang (2 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">DA</span> <img src="https://avatars.githubusercontent.com/u/108231307?v=4&amp;s=72" alt="dajiaohuang" loading="lazy" onerror="this.remove()" /> </span> <div><b>dajiaohuang</b><i>2 commits</i></div> </a>
<a href="https://github.com/shiroesneo-99" target="_blank" rel="noopener noreferrer" class="mq-card" title="shiroesneo-99 (2 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">SH</span> <img src="https://avatars.githubusercontent.com/u/252557381?v=4&amp;s=72" alt="shiroesneo-99" loading="lazy" onerror="this.remove()" /> </span> <div><b>shiroesneo-99</b><i>2 commits</i></div> </a>
<a href="https://github.com/SiIverAsh" target="_blank" rel="noopener noreferrer" class="mq-card" title="SiIverAsh (2 commits on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">SI</span> <img src="https://avatars.githubusercontent.com/u/108169083?v=4&amp;s=72" alt="SiIverAsh" loading="lazy" onerror="this.remove()" /> </span> <div><b>SiIverAsh</b><i>2 commits</i></div> </a>
<a href="https://github.com/gtxPrime" target="_blank" rel="noopener noreferrer" class="mq-card" title="gtxPrime (1 commit on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">GT</span> <img src="https://avatars.githubusercontent.com/u/61928763?v=4&amp;s=72" alt="gtxPrime" loading="lazy" onerror="this.remove()" /> </span> <div><b>gtxPrime</b><i>1 commit</i></div> </a>
<a href="https://github.com/ShiroKSH" target="_blank" rel="noopener noreferrer" class="mq-card" title="ShiroKSH (1 commit on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">SH</span> <img src="https://avatars.githubusercontent.com/u/218489957?v=4&amp;s=72" alt="ShiroKSH" loading="lazy" onerror="this.remove()" /> </span> <div><b>ShiroKSH</b><i>1 commit</i></div> </a>
<a href="https://github.com/alvarorichard" target="_blank" rel="noopener noreferrer" class="mq-card" title="alvarorichard (1 commit on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">AL</span> <img src="https://avatars.githubusercontent.com/u/88117897?v=4&amp;s=72" alt="alvarorichard" loading="lazy" onerror="this.remove()" /> </span> <div><b>alvarorichard</b><i>1 commit</i></div> </a>
<a href="https://github.com/gokomer" target="_blank" rel="noopener noreferrer" class="mq-card" title="gokomer (1 commit on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">GO</span> <img src="https://avatars.githubusercontent.com/u/11593018?v=4&amp;s=72" alt="gokomer" loading="lazy" onerror="this.remove()" /> </span> <div><b>gokomer</b><i>1 commit</i></div> </a>
<a href="https://github.com/bachjessen" target="_blank" rel="noopener noreferrer" class="mq-card" title="bachjessen (1 commit on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">BA</span> <img src="https://avatars.githubusercontent.com/u/59052984?v=4&amp;s=72" alt="bachjessen" loading="lazy" onerror="this.remove()" /> </span> <div><b>bachjessen</b><i>1 commit</i></div> </a>
<a href="https://github.com/chiyi4488" target="_blank" rel="noopener noreferrer" class="mq-card" title="chiyi4488 (1 commit on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">CH</span> <img src="https://avatars.githubusercontent.com/u/30853081?v=4&amp;s=72" alt="chiyi4488" loading="lazy" onerror="this.remove()" /> </span> <div><b>chiyi4488</b><i>1 commit</i></div> </a>
<a href="https://github.com/gkd2323c" target="_blank" rel="noopener noreferrer" class="mq-card" title="gkd2323c (1 commit on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">GK</span> <img src="https://avatars.githubusercontent.com/u/216696112?v=4&amp;s=72" alt="gkd2323c" loading="lazy" onerror="this.remove()" /> </span> <div><b>gkd2323c</b><i>1 commit</i></div> </a>
<a href="https://github.com/OtaviOuu" target="_blank" rel="noopener noreferrer" class="mq-card" title="OtaviOuu (1 commit on GitHub)"> <span class="mq-avatar"> <span class="mq-fallback" aria-hidden="true">OT</span> <img src="https://avatars.githubusercontent.com/u/106476419?v=4&amp;s=72" alt="OtaviOuu" loading="lazy" onerror="this.remove()" /> </span> <div><b>OtaviOuu</b><i>1 commit</i></div> </a>
</span>
</div>
</div>
</section>
<!-- ── Final CTA ────────────────────────────────────────────── -->
<section class="sec-lg cta-final">
<div class="wrap">
<h2>Download OmniGet</h2>
<p class="lead">One file, no account, GPL-3.0. Windows, macOS and Linux.</p>
<div class="cta-actions">
<a class="btn btn-brand" id="cta-dl" href="https://github.com/OpenSelena/omniget/releases/latest">
<svg class="ic" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" focusable="false"><path d="M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0Zm-101.66,5.66a8,8,0,0,0,11.32,0l40-40A8,8,0,0,0,168,96H136V32a8,8,0,0,0-16,0V96H88a8,8,0,0,0-5.66,13.66Z"/></svg><span id="cta-dl-text">Download OmniGet</span>
</a>
<a class="btn btn-ghost" href="https://github.com/OpenSelena/omniget"><svg class="ic" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>Source on GitHub</a>
</div>
</div>
</section>
</main>
<footer>
<div class="wrap">
<div class="foot-grid">
<div class="foot-brand">
<a class="brand" href="./">
<img src="static/loop.png" alt="" width="26" height="26" />
<span>OmniGet</span>
</a>
<p>A free, open-source downloader and media toolbox for Windows, macOS and Linux. Maintained by Igect under GPL-3.0, based on original architecture by tonhowtf.</p>
</div>
<nav aria-label="Product">
<h3>Product</h3>
<ul>
<li><a href="./docs/installation/">Installation</a></li>
<li><a href="./docs/courses/">Courses &amp; Study</a></li>
<li><a href="./docs/opennami/">OpenNami</a></li>
<li><a href="./docs/mcp/">MCP server</a></li>
</ul>
</nav>
<nav aria-label="Resources">
<h3>Resources</h3>
<ul>
<li><a href="./docs/">Documentation</a></li>
<li><a href="./docs/troubleshooting/">Troubleshooting</a></li>
<li><a href="./docs/changelog/">Changelog</a></li>
<li><a href="https://github.com/OpenSelena/omniget">Source Code</a></li>
</ul>
</nav>
<nav aria-label="Community">
<h3>Community</h3>
<ul>
<li><a href="https://github.com/OpenSelena/omniget">GitHub</a></li>
<li><a href="https://github.com/OpenSelena/omniget/issues">Issues</a></li>
<li><a href="https://t.me/OpenSelena">Telegram</a></li>
<li><a href="https://hosted.weblate.org/engage/omniget-openselena/">Translations</a></li>
</ul>
</nav>
</div>
<div class="foot-bottom">
<span>© OpenSelena 2026</span>
<span class="foot-links">
<a href="https://github.com/OpenSelena/omniget/blob/main/LICENSE">Licence</a>
<a href="https://github.com/OpenSelena/omniget/blob/main/SECURITY.md">Security</a>
<a href="https://github.com/OpenSelena/omniget/blob/main/CODE_OF_CONDUCT.md">Code of conduct</a>
</span>
</div>
</div>
</footer>
<script>
(function () {
var root = document.documentElement;
var themeBtn = document.getElementById('themeToggleBtn') || document.getElementById('theme');
var THEME_KEYS = ['omniget-theme', 'omniget_docs_theme', 'omni-theme', 'theme'];
function syncBtn() {
if (!themeBtn) return;
var isDark = root.getAttribute('data-theme') === 'dark';
themeBtn.setAttribute('aria-pressed', isDark ? 'true' : 'false');
themeBtn.setAttribute('title', isDark ? 'Switch to light theme' : 'Switch to dark theme');
}
var reduceMotion = matchMedia('(prefers-reduced-motion: reduce)').matches;
function toggleTheme() {
var next = root.getAttribute('data-theme') === 'dark' ? 'light' : 'dark';
function apply() {
root.setAttribute('data-theme', next);
root.classList.toggle('dark', next === 'dark');
try { THEME_KEYS.forEach(function (k) { localStorage.setItem(k, next); }); } catch (e) {}
syncBtn();
}
if (document.startViewTransition && !reduceMotion) document.startViewTransition(apply);
else apply();
}
window.toggleTheme = toggleTheme;
if (themeBtn) {
themeBtn.addEventListener('click', toggleTheme);
}
// Live GitHub star counter with sessionStorage caching
(function () {
var el = document.getElementById('ghStarCount');
if (!el) return;
try {
var cached = sessionStorage.getItem('omniget_gh_stars');
if (cached) { el.textContent = cached; return; }
} catch (e) {}
fetch('https://api.github.com/repos/OpenSelena/omniget')
.then(function (r) { return r.ok ? r.json() : null; })
.then(function (d) {
if (!d || typeof d.stargazers_count !== 'number') return;
var count = d.stargazers_count >= 1000 ? (d.stargazers_count / 1000).toFixed(1) + 'k' : String(d.stargazers_count);
el.textContent = count;
try { sessionStorage.setItem('omniget_gh_stars', count); } catch (e) {}
})
.catch(function () {});
})();
// Follow the OS theme live, but only while the visitor has not picked one.
var systemDark = matchMedia('(prefers-color-scheme: dark)');
if (systemDark.addEventListener) {
systemDark.addEventListener('change', function (e) {
var saved = null;
try { saved = localStorage.getItem('omniget-theme'); } catch (err) {}
if (saved === 'dark' || saved === 'light') return;
root.setAttribute('data-theme', e.matches ? 'dark' : 'light');
syncBtn();
});
}
syncBtn();
// Nav gains a shadow once the page has scrolled.
var nav = document.getElementById('nav');
var onScroll = function () { nav.classList.toggle('scrolled', window.scrollY > 8); };
onScroll();
window.addEventListener('scroll', onScroll, { passive: true });
// Mobile menu: close on link click, outside click and Escape.
var mnav = document.getElementById('mnav');
mnav.querySelectorAll('a').forEach(function (a) {
a.addEventListener('click', function () { mnav.removeAttribute('open'); });
});
document.addEventListener('click', function (e) {
if (mnav.hasAttribute('open') && !mnav.contains(e.target)) mnav.removeAttribute('open');
});
document.addEventListener('keydown', function (e) {
if (e.key === 'Escape' && mnav.hasAttribute('open')) {
mnav.removeAttribute('open');
mnav.querySelector('summary').focus();
}
});
// Name the visitor's platform on the download buttons. Phones, tablets and
// ChromeOS keep the generic label, since the desktop builds do not run there.
var LABELS = { windows: 'Download for Windows', macos: 'Download for macOS', linux: 'Download for Linux' };
var ua = navigator.userAgent || '';
var plat = (navigator.userAgentData && navigator.userAgentData.platform) || navigator.platform || '';
var isTouchMac = /^mac/i.test(plat) && navigator.maxTouchPoints > 1;
var key = null;
if (!/android|iphone|ipad|ipod|cros/i.test(ua) && !isTouchMac) {
key = /^win/i.test(plat) ? 'windows' : /^mac/i.test(plat) ? 'macos' : /linux|x11/i.test(plat) ? 'linux' : null;
}
if (key) {
var heroDlText = document.getElementById('hero-dl-text');
if (heroDlText) heroDlText.textContent = LABELS[key];
var ctaDlText = document.getElementById('cta-dl-text');
if (ctaDlText) ctaDlText.textContent = LABELS[key];
// In the platform list, only the visitor's own system keeps the filled button.
document.querySelectorAll('.os-card').forEach(function (card) {
if (card.getAttribute('data-os') === key) return;
var b = card.querySelector('.btn');
if (b) { b.classList.remove('btn-brand'); b.classList.add('btn-ghost'); }
});
}
// Scroll reveal: headings, copy, grids and screenshots ease in once. Items inside a
// group stagger. Nothing is hidden unless this script runs and the visitor allows motion.
if (!reduceMotion && 'IntersectionObserver' in window) {
var groups = ['.steps li', '.plugin', '.os-card', '.shots a', '.platforms .pl', '.ticks .tick', '.priv-list > div', '.cats .cat', '.faq details'];
var singles = ['main section:not(.hero) h2', 'main section:not(.hero) .lead', '.wall-line', '.shot:not(.hero .shot)', '.formats', '.refuse', '.split > div > h3', '.marquee', '.cta-actions'];
var seen = new Set();
function tag(el, delay) {
if (seen.has(el)) return;
seen.add(el);
el.classList.add('rv');
if (delay) el.style.setProperty('--d', delay + 'ms');
io.observe(el);
}
var io = new IntersectionObserver(function (entries) {
entries.forEach(function (e) {
if (e.isIntersecting) { e.target.classList.add('in'); io.unobserve(e.target); }
});
}, { threshold: 0.12, rootMargin: '0px 0px -6% 0px' });
singles.forEach(function (sel) { document.querySelectorAll(sel).forEach(function (el) { tag(el, 0); }); });
groups.forEach(function (sel) {
document.querySelectorAll(sel).forEach(function (el, i) {
var perRow = el.parentElement.children.length;
tag(el, Math.min(i % Math.max(perRow, 1), 5) * 70);
});
});
}
// Copy buttons on the install commands.
function copyText(text) {
if (navigator.clipboard && navigator.clipboard.writeText) return navigator.clipboard.writeText(text);
return new Promise(function (resolve, reject) {
var ta = document.createElement('textarea');
ta.value = text; ta.setAttribute('readonly', ''); ta.style.cssText = 'position:fixed;opacity:0';
document.body.appendChild(ta); ta.select();
try { document.execCommand('copy') ? resolve() : reject(); } catch (e) { reject(e); }
document.body.removeChild(ta);
});
}
document.querySelectorAll('.copy').forEach(function (btn) {
var timer;
btn.addEventListener('click', function () {
copyText(btn.getAttribute('data-copy')).then(function () {
btn.classList.add('done');
btn.setAttribute('aria-label', 'Copied');
clearTimeout(timer);
timer = setTimeout(function () {
btn.classList.remove('done');
btn.setAttribute('aria-label', 'Copy command');
}, 1600);
}).catch(function () {});
});
});
// Contributor cards: pre-rendered cards ship in the HTML. This syncs them with
// GitHub's live contributors API, and any failure leaves the pre-rendered cards.
var row1 = document.getElementById('mq-row-1');
var row2 = document.getElementById('mq-row-2');
function esc(value) {
return String(value || '').replace(/[&<>"']/g, function (c) {
return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' }[c];
});
}
function safeUrl(url) {
return (typeof url === 'string' && /^https?:\/\//i.test(url)) ? url.replace(/"/g, '&quot;') : '#';
}
function card(c) {
var login = c.login || '??';
var isLead = login.toLowerCase() === 'tonhowtf';
var name = esc(isLead ? 'Antonio Leandro' : login);
var commits = Number(c.contributions) || 1;
var label = isLead
? 'Original Author (2,640+ commits)'
: (commits === 1 ? '1 commit' : commits.toLocaleString() + ' commits');
var avatar = safeUrl(c.avatar_url ? c.avatar_url + '&s=72' : '');
var url = safeUrl(c.html_url || ('https://github.com/' + login));
var alt = esc(isLead ? 'Antonio Leandro (' + login + ')' : login);
return '<a href="' + url + '" target="_blank" rel="noopener noreferrer" class="mq-card" title="' + name + ' (' + label + ' on GitHub)">' +
'<span class="mq-avatar"><span class="mq-fallback" aria-hidden="true">' + esc(login.slice(0, 2).toUpperCase()) + '</span>' +
(avatar !== '#' ? '<img src="' + avatar + '" alt="' + alt + '" loading="lazy" onerror="this.remove()" />' : '') +
'</span><div><b>' + name + '</b><i>' + label + '</i></div></a>';
}
function fill(row, list) {
var html = list.map(card).join('');
row.innerHTML = html + '<span class="mq-dup" aria-hidden="true" inert>' + html + '</span>';
// Constant drift speed regardless of how many cards the API returns.
row.style.animationDuration = Math.max(40, list.length * 5) + 's';
}
if (row1 && row2) {
fetch('https://api.github.com/repos/OpenSelena/omniget/contributors?per_page=100', {
headers: { 'Accept': 'application/vnd.github.v3+json' }
})
.then(function (r) { return r.ok ? r.json() : Promise.reject(new Error('http ' + r.status)); })
.then(function (list) {
if (!Array.isArray(list)) return;
var people = list.filter(function (c) {
return c && c.login && c.type !== 'Bot' && c.login.indexOf('[bot]') === -1;
});
if (!people.length) return;
var mid = Math.ceil(people.length / 2);
var top = people.slice(0, mid);
fill(row1, top);
fill(row2, bottom.length ? bottom : top);
})
.catch(function () { /* pre-rendered cards stay */ });
}
// Smooth scroll for in-page anchors without appending hash to browser URL
document.querySelectorAll('a[href^="#"]').forEach(function (a) {
a.addEventListener('click', function (e) {
var id = a.getAttribute('href').slice(1);
if (!id) return;
var el = document.getElementById(id);
if (el) {
e.preventDefault();
el.scrollIntoView({ behavior: 'smooth' });
}
});
});
})();
</script>
</body>
</html>