Windows 特供:把 yoinks 装进右键菜单与终端快捷方式,告别每次敲 npm
【免费下载链接】yoinksyoink any video from your terminal. no shady ads.项目地址: https://gitcode.com/GitHub_Trending/yo/yoinks
yoinks 是一个基于 yt-dlp 的终端视频下载器:一条 npm 命令装完,支持 YouTube、X/Twitter、Instagram、Threads、TikTok 等 1800+ 站点,全程无广告、无弹窗、无假下载按钮。但对 Windows 用户来说,它最大的摩擦从来不是功能,而是"每次下载都要先打开终端、再敲一遍命令"。这篇文章基于仓库源码,把 Windows 上安装的地基、右键菜单注册的两种姿势、终端快捷键与别名,以及和 IDM 共存的边界一次讲透——读完你只需要"复制链接 → 右键 → 回车"三步。
一、先摸清地基:Node 18+、首次运行与 PowerShell 执行策略
Windows 上装 yoinks 本身没有坑,前提是先把 Node 环境放对。项目在 package.json 里声明了engines: {"node": ">=18"},安装方式也只有一条:
npm install -g yoinks # 不想装全局也可以临时跑: npx yoinksnpm 全局安装后,bin 入口指向 dist/cli.js(package.json 的bin字段),Windows 上会生成yoinks.cmd垫片,默认装在%APPDATA%\npm下,无需管理员权限。装完先确认一句where yoinks能打出路径——这一步很重要,因为右键菜单是由资源管理器进程拉起的,继承的是系统级 PATH,如果你用 nvm 之类的多版本工具管理 Node,explorer 环境里可能根本找不到yoinks命令,注册好的菜单点了没反应。
真正属于 Windows 的"独有坑"有两个:
坑一:首次运行的二进制下载。yoinks 自己不带 yt-dlp,而是按"系统已装 → 本地缓存 → 联网下载"的顺序解析(见 src/lib/ytdlp.ts 的ensureYtDlp)。在 Windows 上,它会从 GitHub Releases 下载yt-dlp.exe到%USERPROFILE%\.yoinks\bin\(源码里process.platform === 'win32'分支专门选.exe资产),ffmpeg 则优先用 PATH 上的,没有就回退到 npm 包里捆绑的ffmpeg-static。这意味着第一次调用会有一小段"fetching yt-dlp…"的等待,之后每次都直接复用本地副本,基本秒开。内网或代理受限环境记得先手动放行这个下载。
坑二:PowerShell 执行策略——但要分清是谁被拦。Windows 默认的Restricted策略会拒绝运行.ps1脚本,很多人以为这会卡死 yoinks。实际上 yoinks 读剪贴板走的是powershell -NoProfile -Command Get-Clipboard(见 src/lib/clipboard.ts),这是内联命令而非脚本文件,执行策略拦不到它。真正会被Restricted拦住的,是你给右键菜单写的.ps1包装脚本。所以要么执行一次:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned要么干脆用.cmd/ 批处理来做包装,绕开策略问题。下面两节的做法全部用注册表 + 批处理,就是为了不碰这个雷。
二、右键菜单:把链接喂给 yoinks 的两种姿势
先讲原理。yoinks 的 CLI 接受一个可选的 URL 位置参数(解析逻辑在 src/lib/args.ts):
yoinks https://youtu.be/dQw4w9WgXcQ # 带参数:直达格式选择面板 yoinks # 不带参数:进入输入态,等你粘贴在 src/cli.tsx 里,initialUrl非空时会把 URL 直接注入 App,跳过输入框直接进入"探测 → 选格式"流程(见 src/app.tsx 的startProbe)。这就是"右键直通"的技术基础。另外注意一个 Windows 细节:全屏 TUI、鼠标点击、剪贴板建议都要求进程挂在真实终端上——cli.tsx里用process.stdout.isTTY判断,非交互环境(比如任务计划、无控制台的后台进程)不会进入全屏模式。所以右键菜单一定要通过start或 Windows Terminal 拉起一个新控制台窗口,不能裸跑。
姿势一:参数直通,复制链接后一键直达格式面板
把菜单注册到.url文件(InternetShortcut)上,用一段小批处理提取链接再传给 yoinks。保存下面的内容为yoinks-open.cmd:
@echo off set "target=%~1" for /f "tokens=2 delims==" %%a in ('findstr /b "URL=" "%target%" 2^>nul') do set "target=%%a" start "" wt -w 0 nt cmd /k yoinks "%target%"逻辑很简单:如果右键的目标是.url文件就取出里面的URL=字段,否则原样把参数传给 yoinks;然后交给 Windows Terminal 开新标签页执行。注册表写入:
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\InternetShortcut\shell\yoinks] @="用 yoinks 下载" [HKEY_CLASSES_ROOT\InternetShortcut\shell\yoinks\command] @="C:\\path\\to\\yoinks-open.cmd \"%1\""没有 Windows Terminal 的话,把start "" wt -w 0 nt cmd /k换成start "" cmd /k即可,Win10 之后的 conhost 同样支持备用屏幕和 VT 序列。带参直通会绕过输入态的 URL 校验(isProbablyUrl只在手动输入时检查),直接触发 yt-dlp 探测——所以批处理里的取链接逻辑要可靠,给错的东西会直接看到 yt-dlp 的报错页,这反而是一种直观的反馈。
姿势二:剪贴板联动,复制完直接右键开干
yoinks 的 Windows 剪贴板读取正是为这个场景设计的:启动时无参数、又是交互终端,它就会静默执行powershell -NoProfile -Command Get-Clipboard(500ms 超时,见 src/lib/clipboard.ts),如果剪贴板里是合法的 http/https 链接,输入框下方会出现提示link in your clipboard — ⇥ to paste it(src/app.tsx),按 Tab 填入、回车即下载。这就是"复制链接 → 右键 → ⇥ → 回车"的四步流。
对应的菜单项完全不用传参:
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\yoinks-clipboard] @="用 yoinks 下载(剪贴板)" [HKEY_CLASSES_ROOT\*\shell\yoinks-clipboard\command] @="cmd /c start \"\" wt -w 0 nt cmd /k yoinks"此外,历史记录存在%USERPROFILE%\.config\yoinks\history.json(见 src/lib/history.ts),上限 50 条,输入态按↑可以翻出之前下过的链接——如果你常下同一个频道的视频,这比每次复制链接还快。
两种姿势的分工很清晰:姿势一适合"手里已有链接"的确定性操作,一步直达格式面板;姿势二适合"边逛边复制"的浏览习惯,配合剪贴板提示,几乎不用碰键盘。
三、终端快捷键与启动参数:把"打开 yoinks"变成一键
右键菜单解决的是"把链接喂进去",日常高频使用还得靠快捷键。Windows Terminal 的settings.json里加一条 action,就能用Ctrl+Shift+Y随时拉出 yoinks:
{ "actions": [ { "command": { "action": "wt", "commandline": "cmd /c yoinks" }, "keys": "ctrl+shift+y" } ] }如果你更习惯命令行别名,两个方案:
:: cmd 的 AutoRun 里追加,或每次会话执行一次 doskey yk=yoinks $*# PowerShell 配置文件里 function yk { yoinks @args }之后yk裸启动、yk <url>直通,和右键菜单同一套逻辑。
启动参数方面,src/lib/args.ts 目前支持--theme auto|light|dark(也接受--theme=xxx写法)、-h/--help、-v/--version。auto主题直接用终端自己的前景/背景色,跟随系统深浅色切换(src/theme.ts),所以深色终端用户不需要额外配置;如果你的终端主题和 Windows 深浅色不一致,可以用yk --theme dark固定调色板。把主题参数写进右键菜单命令或别名里,就等于给"一键下载"定制了皮肤。
四、与 IDM 抢下载?其实两者根本不碰面
Windows 上装了 IDM(Internet Download Manager)的用户,最担心的就是下载行为被"抢"。先看机制,结论就清楚了:
- IDM靠浏览器扩展接管浏览器内的点击和流媒体请求,它拦截的是"浏览器发起的下载";
- yoinks不装任何浏览器扩展、不劫持浏览器,下载请求由它自己 spawn 的 yt-dlp 子进程直接发出(src/lib/ytdlp.ts 的
download用spawn拉起 yt-dlp,全程不经过浏览器栈)。
两者唯一的交点是剪贴板:IDM 默认会监测剪贴板中出现的可下载链接并弹出接管窗口,而 yoinks 启动时也会读剪贴板给出 ⇥ 提示。如果你既装了 IDM、又用右键菜单直通 yoinks,就会出现"复制链接后两边同时响应"的场景。处理方式是在 IDM 选项中关闭对剪贴板视频链接的自动监测(或改为手动确认),把剪贴板这个入口完全让给 yoinks。
输出路径上也互不干扰:yoinks 固定写入~/Downloads(src/app.tsx 的OUT_DIR = path.join(os.homedir(), 'Downloads')),IDM 默认用自己的下载目录。走右键直通后,所有文件统一落进 Downloads,等于绕开了 IDM 在浏览器里的接管,两边各管各的,没有覆盖风险。想让某个平台彻底归 IDM、其他归 yoinks,也只需要在浏览器扩展里按站点配置即可——yoinks 这边没有可抢的入口。
最后提醒一句 README 里的 fair use 说明(README.md):yoinks 是个人归档工具,下载前确认你对内容有保留的权利。把右键菜单、快捷键和别名配好后,Windows 上的 yoinks 体验就和它的 slogan 一样——"paste. yoink. done.",只是这次连终端都不用先打开了。
【免费下载链接】yoinksyoink any video from your terminal. no shady ads.项目地址: https://gitcode.com/GitHub_Trending/yo/yoinks
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考