{"_id":"yoinks","_rev":"4-8a3d0c93e657244d25dd0717fe850da5","name":"yoinks","dist-tags":{"latest":"0.3.1"},"versions":{"0.1.1":{"name":"yoinks","version":"0.1.1","keywords":["video","downloader","yt-dlp","youtube","instagram","twitter","threads","cli","tui","ink"],"author":{"name":"Pablo Stanley"},"license":"MIT","_id":"yoinks@0.1.1","maintainers":[{"name":"pablostanley","email":"pablostanley1@gmail.com"}],"homepage":"https://github.com/pablostanley/yoinks#readme","bugs":{"url":"https://github.com/pablostanley/yoinks/issues"},"bin":{"yoinks":"dist/cli.js"},"dist":{"shasum":"c6bd6910fba11ae5cc3f0fc8160526823a80107e","tarball":"https://registry.npmjs.org/yoinks/-/yoinks-0.1.1.tgz","fileCount":4,"integrity":"sha512-EQ9XS9oNuFpC3pTsPlB690MSo/jLk5OdRlTvwnwv47OQLlDTVu04U2TkH2AtziSExZVBINYzBslQPflm+2+jUg==","signatures":[{"sig":"MEUCIQDeTKSv32c7cesZUA4A0jw80yt0nyPIAH0xBaF3a+k6SgIgETJz75Hbp1Fsn5A4A9B1iXJm3cOP3/+zchs5VcZuOAI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49260},"type":"module","engines":{"node":">=18"},"gitHead":"31307c37dfebebb233d3245f332953cd1a679978","scripts":{"dev":"tsup --watch","build":"tsup","start":"node dist/cli.js","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build"},"_npmUser":{"name":"pablostanley","email":"pablostanley1@gmail.com"},"repository":{"url":"git+https://github.com/pablostanley/yoinks.git","type":"git"},"_npmVersion":"10.9.4","description":"yoink any video from YouTube, X, Instagram, Threads & 1800+ sites — right from your terminal. paste. yoink. done.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ink":"^7.1.0","react":"^19.2.7","ink-spinner":"^5.0.0","ffmpeg-static":"^5.3.0","ink-select-input":"^6.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^7.0.2","@types/node":"^26.1.1","@types/react":"^19.2.17"},"_npmOperationalInternal":{"tmp":"tmp/yoinks_0.1.1_1784221146625_0.08053435371623774","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"yoinks","version":"0.2.0","keywords":["video","downloader","yt-dlp","youtube","instagram","twitter","threads","cli","tui","ink"],"author":{"name":"Pablo Stanley"},"license":"MIT","_id":"yoinks@0.2.0","maintainers":[{"name":"pablostanley","email":"pablostanley1@gmail.com"}],"homepage":"https://github.com/pablostanley/yoinks#readme","bugs":{"url":"https://github.com/pablostanley/yoinks/issues"},"bin":{"yoinks":"dist/cli.js"},"dist":{"shasum":"fd71d9c20ef17d88a9c310b8fa2ee7c653baaf29","tarball":"https://registry.npmjs.org/yoinks/-/yoinks-0.2.0.tgz","fileCount":4,"integrity":"sha512-3WkYSLQ+SPaquEIythhupWs8QJjNXHwaqv6hjxIpxx+JDVjwuA1C7r9kkYSc2nHvyAw8WpeNYJpZFfA+daqbxA==","signatures":[{"sig":"MEUCIBo5NbeOyM42YQRrp9Akoh7ZzwTgdiNg+vhtr1u0wxE+AiEA4DMiGXhEHacST+Kh+/vp5eYLAie7dIe+4LrZ536EPcE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52567},"type":"module","engines":{"node":">=18"},"gitHead":"b6b857d10c294129a6eadb25b7b6db96a2dbbff5","scripts":{"dev":"tsup --watch","build":"tsup","start":"node dist/cli.js","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build"},"_npmUser":{"name":"pablostanley","email":"pablostanley1@gmail.com"},"repository":{"url":"git+https://github.com/pablostanley/yoinks.git","type":"git"},"_npmVersion":"10.9.4","description":"yoink any video from YouTube, X, Instagram, Threads & 1800+ sites — right from your terminal. paste. yoink. done.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ink":"^7.1.0","react":"^19.2.7","ink-spinner":"^5.0.0","ffmpeg-static":"^5.3.0","ink-select-input":"^6.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^7.0.2","@types/node":"^26.1.1","@types/react":"^19.2.17"},"_npmOperationalInternal":{"tmp":"tmp/yoinks_0.2.0_1784222511614_0.48171553651290977","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"yoinks","version":"0.3.0","keywords":["video","downloader","yt-dlp","youtube","instagram","twitter","threads","cli","tui","ink"],"author":{"name":"Pablo Stanley"},"license":"MIT","_id":"yoinks@0.3.0","maintainers":[{"name":"pablostanley","email":"pablostanley1@gmail.com"}],"homepage":"https://github.com/pablostanley/yoinks#readme","bugs":{"url":"https://github.com/pablostanley/yoinks/issues"},"bin":{"yoinks":"dist/cli.js"},"dist":{"shasum":"c4184e526ae730a6b77f13d0f3433d8386bbe49b","tarball":"https://registry.npmjs.org/yoinks/-/yoinks-0.3.0.tgz","fileCount":4,"integrity":"sha512-nrWjUUOwHND3EJRCdKQrvZKFwIDV+d+OzFdS2zr09ZVBDLKotl1W2x2Zx7dQyUnjvTacrcGpCekR1paHDHS0cQ==","signatures":[{"sig":"MEYCIQC1XSDeMTJLYLYbztIR82l4RhGKU494+1uMWUKmtaSDyQIhAN06g7vFi9Ozf8r+loFhhx29kIs/O3blLyg+hhHzOOy+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58738},"type":"module","engines":{"node":">=18"},"gitHead":"bb71d55d15cb8bac44755bdb4a10aaaa636d18b8","scripts":{"dev":"tsup --watch","test":"tsx --test src/**/*.test.ts","build":"tsup","start":"node dist/cli.js","typecheck":"tsc --noEmit","prepublishOnly":"npm test && npm run typecheck && npm run build"},"_npmUser":{"name":"pablostanley","email":"pablostanley1@gmail.com"},"repository":{"url":"git+https://github.com/pablostanley/yoinks.git","type":"git"},"_npmVersion":"10.9.4","description":"yoink any video from YouTube, X, Instagram, Threads & 1800+ sites — right from your terminal. paste. yoink. done.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ink":"^7.1.0","react":"^19.2.7","ink-spinner":"^5.0.0","ffmpeg-static":"^5.3.0","ink-select-input":"^6.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","tsup":"^8.5.1","typescript":"^7.0.2","@types/node":"^26.1.1","@types/react":"^19.2.17"},"_npmOperationalInternal":{"tmp":"tmp/yoinks_0.3.0_1784244976428_0.0055420051071617404","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"yoinks","version":"0.3.1","description":"yoink any video from YouTube, X, Instagram, Threads & 1800+ sites — right from your terminal. paste. yoink. done.","type":"module","bin":{"yoinks":"dist/cli.js"},"engines":{"node":">=18"},"scripts":{"build":"tsup","dev":"tsup --watch","test":"tsx --test src/**/*.test.ts","typecheck":"tsc --noEmit","start":"node dist/cli.js","prepublishOnly":"npm test && npm run typecheck && npm run build"},"author":{"name":"Pablo Stanley"},"keywords":["video","downloader","yt-dlp","youtube","instagram","twitter","threads","cli","tui","ink"],"license":"MIT","dependencies":{"ffmpeg-static":"^5.3.0","ink":"^7.1.0","ink-select-input":"^6.2.0","ink-spinner":"^5.0.0","react":"^19.2.7"},"devDependencies":{"@types/node":"^26.1.1","@types/react":"^19.2.17","tsup":"^8.5.1","tsx":"^4.23.1","typescript":"^7.0.2"},"repository":{"type":"git","url":"git+https://github.com/pablostanley/yoinks.git"},"homepage":"https://github.com/pablostanley/yoinks#readme","bugs":{"url":"https://github.com/pablostanley/yoinks/issues"},"_id":"yoinks@0.3.1","gitHead":"6f03720813c22f907d3fb9ba98567f2169446b82","_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-vzaCEQ7vwUOD/59+juj4MKLTQPsobxRO88/qbGdrIegAF7kbiluJeEH3n0+jGqQpHtx6rCe4uEfomJRYCrZ4iw==","shasum":"73ad4888ab466d040545238d8863815307b18e37","tarball":"https://registry.npmjs.org/yoinks/-/yoinks-0.3.1.tgz","fileCount":4,"unpackedSize":59024,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIG+ZwcYPB8GyEqjVX1Sxwh5/2f/WvojlLuvdR+y1SWhaAiEAryb94aI49knzGl6W5gGJzxG0ULvjlf3r0LPaZJ4Ev0o="}]},"_npmUser":{"name":"pablostanley","email":"pablostanley1@gmail.com"},"directories":{},"maintainers":[{"name":"pablostanley","email":"pablostanley1@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/yoinks_0.3.1_1784271720394_0.27148553582241597"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-16T16:59:06.574Z","modified":"2026-07-17T07:02:00.655Z","0.1.1":"2026-07-16T16:59:06.786Z","0.2.0":"2026-07-16T17:21:51.738Z","0.3.0":"2026-07-16T23:36:16.570Z","0.3.1":"2026-07-17T07:02:00.528Z"},"bugs":{"url":"https://github.com/pablostanley/yoinks/issues"},"author":{"name":"Pablo Stanley"},"license":"MIT","homepage":"https://github.com/pablostanley/yoinks#readme","keywords":["video","downloader","yt-dlp","youtube","instagram","twitter","threads","cli","tui","ink"],"repository":{"type":"git","url":"git+https://github.com/pablostanley/yoinks.git"},"description":"yoink any video from YouTube, X, Instagram, Threads & 1800+ sites — right from your terminal. paste. yoink. done.","maintainers":[{"name":"pablostanley","email":"pablostanley1@gmail.com"}],"readme":"# yoinks\n\n<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\"assets/logo-dark.svg\">\n  <img src=\"assets/logo-light.svg\" alt=\"yoinks\" width=\"288\">\n</picture>\n\nyoink any video. paste. yoink. done.\n\nDownload videos from YouTube, X/Twitter, Instagram, Threads, TikTok and\n1,800+ other sites — right from your terminal. Paste a url, pick a\nresolution (or audio-only mp3), done. No popups, no fake download buttons,\nno sketchy redirects.\n\n<img src=\"assets/home.png\" alt=\"yoinks home screen — paste a link and hit yoink\" width=\"100%\">\n\n## Install\n\n```sh\nnpm install -g yoinks\n```\n\nOr try it without installing anything:\n\n```sh\nnpx yoinks\n```\n\nRequires Node 18+. Everything else (yt-dlp, ffmpeg) is fetched or bundled\nautomatically.\n\n## Usage\n\n```sh\n$ yoinks https://youtu.be/dQw4w9WgXcQ    # straight to the format picker\n$ yoinks                                 # prompts for a url\n$ yoinks --theme light                   # force the light palette\n```\n\nyoinks takes over the terminal (full-screen, centered — and restores your\nscrollback on exit). Pick a format with ↑/↓ (or j/k, or number keys) and\nhit enter. `esc` goes back, `^c` quits. Or just use the mouse — the yoink\nbutton, the format list and the footer hints are all clickable, and\nclicking the logo takes you back home. Files are saved to `~/Downloads`,\nand the file path is printed to your terminal when you're done.\n\nThe default `auto` theme uses your terminal's own foreground and background,\nso it follows light and dark terminal themes without guessing. Press `^t` or\nclick the theme control in the footer to cycle through `auto`, `light`, and\n`dark` for the current session. Use `--theme auto`, `--theme light`, or\n`--theme dark` to choose the starting theme for one launch.\n\n<img src=\"assets/download-options.png\" alt=\"yoinks format picker — resolutions with estimated file sizes, plus audio-only mp3\" width=\"100%\">\n\n## How it works\n\n- Powered by [yt-dlp](https://github.com/yt-dlp/yt-dlp). On first run,\n  yoinks downloads the standalone yt-dlp binary to `~/.yoinks/bin` —\n  no Python required. If you already have yt-dlp installed, it uses yours.\n- ffmpeg (needed for merging high-res streams and mp3 extraction) is found\n  on your PATH, with `ffmpeg-static` as a bundled fallback.\n- The UI is [Ink](https://github.com/vadimdemedes/ink) — React for the\n  terminal.\n\n## Development\n\n```sh\nnpm install\nnpm run build        # bundle to dist/ with tsup\nnpm run dev          # rebuild on change\nnode dist/cli.js <url>\nnpm run typecheck\n```\n\nTo try it as a global command without publishing: `npm link`, then run\n`yoinks` anywhere.\n\n## Roadmap\n\n- [ ] `--best` / `--mp3` flags to skip the picker (scriptable mode)\n- [ ] `-o <dir>` to choose the output folder\n- [ ] Playlist / thread-with-multiple-videos support\n- [ ] Clipboard detection: launch bare and auto-suggest the url you copied\n- [ ] Self-update for the bundled yt-dlp binary (`yt-dlp -U`)\n- [x] Publish to npm (`npm i -g yoinks` / `npx yoinks`)\n- [ ] `curl yoinks.sh | sh` installer\n\n## A note on fair use\n\nyoinks is a personal-archiving tool. Downloading content may violate a\nplatform's terms of service — only download what you have the right to\nkeep, and be excellent to creators.\n\n## License\n\n[MIT](LICENSE)\n","readmeFilename":"README.md"}