[{"data":1,"prerenderedAt":1729},["ShallowReactive",2],{"nav-search-articles-zh":3,"page-\u002Farticles\u002Fvhs":527,"related-\u002Farticles\u002Fvhs":1622,"article-prev-next-zh-\u002Farticles\u002Fvhs":1632},[4,15,21,31,37,43,48,54,59,65,74,79,84,89,96,101,106,112,117,122,127,132,137,142,147,152,157,162,167,172,177,182,187,192,197,202,207,212,217,222,228,234,239,244,249,254,259,264,269,274,279,284,289,295,300,305,311,321,326,331,337,342,347,355,362,368,374,379,384,390,395,400,405,410,415,420,425,430,435,440,445,450,455,460,465,470,475,480,485,490,495,502,507,512,517,522],{"_path":5,"title":6,"description":7,"category":8,"tags":9},"\u002Farticles\u002Fvhs","VHS 實測：把終端機錄影寫成可以重播的程式碼","Charmbracelet VHS 能用 .tape 腳本控制終端機輸入、等待、主題、尺寸與輸出格式。我實際用 662 bytes 的 Tape 產生 16.92 秒中英 Demo，並從 MP4 擷取 PNG 截圖。","AI & Tools",[10,11,12,13,14],"Open Source","CLI","Video Processing","Automation","Productivity",{"_path":16,"title":17,"description":18,"category":8,"tags":19},"\u002Farticles\u002Fzen-browser","Zen Browser 實測四個月：除了 Netflix，我已經不用 Chrome","我把 Zen Browser 當主力瀏覽器用了四個月。這篇整理自動伸縮側邊欄、Workspaces、Glance、Split View、Firefox 擴充套件與我正在使用的 Zen Mods，也說明為什麼 Netflix 還是得開其他瀏覽器。",[10,14,20],"Security",{"_path":22,"title":23,"description":24,"category":25,"tags":26},"\u002Farticles\u002Flucide-animated","lucide-animated：把 Lucide Icon 變成會動的 React 元件","lucide-animated 是一套以 Lucide 與 Motion 製作的開源動態圖示。這篇整理互動預覽、shadcn CLI 安裝方式，以及如何交給 Agent 使用。","Web Dev",[10,27,28,29,30],"Web Development","React","Animation","AI Agents",{"_path":32,"title":33,"description":34,"category":8,"tags":35},"\u002Farticles\u002Fanydoc","AnyDoc 實測：不到 1 秒把 Word 轉成 Markdown，還能直接交給 Agent 使用","我用 AnyDoc 高速把文件轉成 Markdown。這篇整理 CLI 與 Agent Skill 的完整用法、實際保留的文件結構，以及它和 Marker、MinerU 的差別。",[30,10,11,14,36],"Rust",{"_path":38,"title":39,"description":40,"category":8,"tags":41},"\u002Farticles\u002Fwitr","witr 實測：一條指令查出誰占用 Port，以及它為什麼在跑","我在 Mac 實際開了一個占用 5173 Port 的 Node 服務，再用 witr 追查程序、啟動來源與 Socket，也整理了 TUI、常用指令和公開畫面前要注意的隱私資訊。",[10,11,42,14],"Network",{"_path":44,"title":45,"description":46,"category":8,"tags":47},"\u002Farticles\u002Fsyncthing","Syncthing 實測：Mac 和 Windows 不靠雲端硬碟，自動同步資料夾","我用 Syncthing 連接 Mac 與 Windows，實際測試共享資料夾的雙向檔案同步，也記錄了加密設定錯誤與同步衝突。",[10,42,14],{"_path":49,"title":50,"description":51,"category":8,"tags":52},"\u002Farticles\u002Flosslesscut","LosslessCut 實測：5 分鐘 600 MB 影片，幾乎按下就剪完","LosslessCut 能用 FFmpeg 直接複製影音串流，不必重新編碼。我實測剪一支約 5 分鐘、600 MB 的影片，並整理免費下載方式、I／O 快捷鍵與關鍵影格限制。",[10,14,12,53],"Audio Processing",{"_path":55,"title":56,"description":57,"category":8,"tags":58},"\u002Farticles\u002Flulu","LuLu 實測：Mac App 第一次往外連時，先讓你看一眼再決定","LuLu 是免費開源的 macOS 出站防火牆。它會在沒有規則的程式建立對外連線時顯示程式、目的地與簽章資訊；本文整理安裝後該保留的預設選項，以及警示該怎麼判斷。",[10,20,42],{"_path":60,"title":61,"description":62,"category":8,"tags":63},"\u002Farticles\u002Fsnapzy","Snapzy 實測：比 Mac 內建截圖更完整的免費原生工具","Snapzy 是免費開源的 macOS 原生截圖工具，支援截圖即時標記、長截圖、OCR、螢幕錄影與內建編輯器。我實測截圖並標記功能，也整理了避免快捷鍵衝突的設定方式。",[10,14,64],"Image Processing",{"_path":66,"title":67,"description":68,"category":8,"tags":69},"\u002Farticles\u002Fimg2threejs-codex-test","img2threejs 實測：丟一張圖片給 Codex，真的能做成 Three.js 3D 模型嗎？","我用 GPT-5.6 SOL、medium 推理測試 img2threejs。F1 賽車這類複雜物件很容易翻車，換成紅白機手把後，按鈕、視角切換與爆炸圖都有做出來。這篇整理實測結果、適用範圍與 Codex 安裝方式。",[30,10,27,70,71,72,73,64],"JavaScript","WebGL","Codex","Agent Workflow",{"_path":75,"title":76,"description":77,"category":8,"tags":78},"\u002Farticles\u002Fpake","Pake 實測：一行指令把 Threads 網站打包成約 10MB 的 Mac App","Pake 是以 Rust／Tauri 製作的開源工具，可以把網站打包成 macOS、Windows 或 Linux 桌面 App。我實測將 Threads 網站做成獨立 App，從終端機輸入網址到拖進 Applications 就能使用。",[10,11,14,36],{"_path":80,"title":81,"description":82,"category":8,"tags":83},"\u002Farticles\u002Fmole","MOLE 實測：讓 AI Agent 先分析，再幫 Mac 清出 15GB 空間","MOLE 是 macOS 的開源終端機維護工具。我實測用 mo analyze、mo status 和 mo clean --dry-run 檢查硬碟與快取，最後清出 15.29GB；它也很適合交給 AI Agent 先分析、由人確認後再清理。",[30,10,11,14],{"_path":85,"title":86,"description":87,"category":8,"tags":88},"\u002Farticles\u002Ftwinkle-tray","Twinkle Tray：在 Windows 工作列直接調整多螢幕亮度","Twinkle Tray 是一套免費的 Windows 小工具，可以從系統匣直接調整多台外接螢幕的亮度，也支援快捷鍵、排程與 DDC\u002FCI 顯示器控制。",[14,10],{"_path":90,"title":91,"description":92,"category":8,"tags":93},"\u002Farticles\u002Fmarker","Marker 實測：比 MinerU 好上手的 PDF 轉 Markdown 工具？","我在 Apple Silicon Mac 上實測 Marker 的 fast 模式。一般文字型 PDF 轉 Markdown 已經很夠用，但公式與表格仍會失手；也整理了它和 MinerU 的實際分工。",[94,10,11,95,14],"AI Tools","Local AI",{"_path":97,"title":98,"description":99,"category":8,"tags":100},"\u002Farticles\u002Fzed","Zed 實測：最近試到一個很順的 AI 程式編輯器","最近把專案放進 Zed 用了一下。它的操作感很輕快，AI 又能直接接 ChatGPT、Codex 和 MCP；不是要取代 VS Code，但很適合當成另一個選擇。",[94,30,10,14,72,36],{"_path":102,"title":103,"description":104,"category":8,"tags":105},"\u002Farticles\u002Fwhatcable","WhatCable 實測：Mac 的 USB-C 線到底跑多快、能不能帶螢幕，一打開就知道","WhatCable 是 macOS 選單列工具，能直接讀出 USB-C 線材、連接埠與裝置的實際協商狀態。我用它看到 USB4／Thunderbolt 40 Gbps、240W、e-marker，以及 4K 144Hz 螢幕連線的細節。",[14,10,11],{"_path":107,"title":108,"description":109,"category":8,"tags":110},"\u002Farticles\u002Fdbx","DBX：支援 70+ 種資料庫的輕量管理工具，連 Supabase 也能直接看表格、跑 SQL","DBX 是一款約 20 MB 的輕量開源資料庫工具。我這次實際連上 Supabase，也看了它的多資料庫管理、編輯器主題、AI 助理與 MCP 整合。",[111,10,14,30,36],"Database",{"_path":113,"title":114,"description":115,"category":8,"tags":116},"\u002Farticles\u002Fopenlogi","OpenLogi 實測：免費開源的 Logitech Options+ 本機替代工具，macOS 權限與 HID 排錯","OpenLogi 是支援特定 Logitech HID++ 周邊的本機開源工具，可調整按鍵、DPI 與 SmartShift。本文整理 macOS 的 Homebrew 安裝、必要權限與一次 HID transport error 的個案排錯；Windows 則是下載後直接可用。",[10,14,36],{"_path":118,"title":119,"description":120,"category":8,"tags":121},"\u002Farticles\u002Fmos","Mos 實測：讓 macOS 外接滑鼠滾輪變得平順","Mos 是一款免費的 macOS 滑鼠工具，能把外接滑鼠滾輪的跳動補成平滑移動，也能分別設定捲動方向與各個應用程式的捲動參數。",[14,11],{"_path":123,"title":124,"description":125,"category":8,"tags":126},"\u002Farticles\u002Flively-wallpaper","Lively Wallpaper 實測：免費開源的 Windows 動態桌布，音樂同步與全螢幕自動暫停","我實測 Lively Wallpaper：一款免費開源的 Windows 動態桌布工具。可以直接放入影片、GIF、網頁與網址，也能做系統音訊視覺化；更重要的是，玩遊戲或開全螢幕程式時能自動暫停桌布。",[10,14,12,53],{"_path":128,"title":129,"description":130,"category":8,"tags":131},"\u002Farticles\u002Ftrex-ocr","TRex 實測：macOS 選取螢幕文字就複製，QR Code、Raycast 與自動化都能用","我實測 TRex：一款 macOS 選取螢幕區域後直接把文字放進剪貼簿的開源 OCR 工具。它也能讀 QR Code、條碼、支援 Raycast、快捷鍵、CLI、Shortcuts 與 Watch Mode。",[64,10,14,13,11],{"_path":133,"title":134,"description":135,"category":8,"tags":136},"\u002Farticles\u002Ftranslucenttb","TranslucentTB 實測：幾 MB 記憶體，讓 Windows 工作列變得更順眼","TranslucentTB 是一款免費開源的 Windows 工作列外觀工具，只用幾 MB 記憶體、幾乎不吃 CPU，就能在透明、模糊、壓克力與一般模式間切換。我把最大化視窗設成一般模式，其餘工作時維持模糊，兼顧閱讀性與桌面質感。",[10,14,11],{"_path":138,"title":139,"description":140,"category":8,"tags":141},"\u002Farticles\u002Fheyclicky","HeyClicky 實測：比語音輸入更進一步的螢幕感知 AI","HeyClicky 是一款住在 macOS 游標旁的 AI 助手。它會結合螢幕畫面與語音指令，協助理解目前工作內容；我實測了它的功能、免費額度與多螢幕問題。",[94,30,14,13],{"_path":143,"title":144,"description":145,"category":8,"tags":146},"\u002Farticles\u002Fmac-stats","Stats 實測：把 Mac 的 CPU、記憶體與網路狀態放進選單列","Stats 是免費開源的 macOS 選單列系統監控工具。我實測它的安裝、預設選單列配置，以及 CPU、記憶體面板；想隨時看 CPU、RAM、網路或 SSD 狀態，這款很實用。",[10,14],{"_path":148,"title":149,"description":150,"category":8,"tags":151},"\u002Farticles\u002Fwinhance","Winhance 實測：一鍵安裝後管理、移除 Windows 內建軟體","實測 Winhance 的 PowerShell 一鍵安裝、繁體中文介面與 Windows 內建 App 批次移除流程。它把常見的 debloat、系統調整和外部軟體安裝集中到同一個圖形介面。",[10,14,11],{"_path":153,"title":154,"description":155,"category":8,"tags":156},"\u002Farticles\u002Ffile-converter","File Converter 實測：Windows 右鍵直接把 PNG／JPG 轉成 WebP","File Converter 是整合進 Windows 檔案總管右鍵選單的開源轉檔工具。我實測把 PNG、JPG 圖片轉成 WebP；不必打開主程式，選檔後右鍵就能完成，也支援影片、音訊與更多圖片格式。",[10,14,64,12],{"_path":158,"title":159,"description":160,"category":8,"tags":161},"\u002Farticles\u002Ffinetune","FineTune：補上 macOS 缺少的單一 App 音量控制","FineTune 是一個免費開源的 macOS 選單列音量工具，可以針對不同 App 調整音量、切換輸出設備，還能把不同 App 指到不同音訊設備。這篇簡單記錄它解決的問題與安裝方式。",[14,10],{"_path":163,"title":164,"description":165,"category":8,"tags":166},"\u002Farticles\u002Flatest","Latest：macOS 上一眼檢查 App 更新的小工具","Latest 是一個免費開源的 macOS App 更新檢查工具，可以集中查看哪些 App 有新版本，支援 Mac App Store 與使用 Sparkle 更新框架的應用程式。功能很單純，但對想定期整理 Mac 軟體版本的人很方便。",[14,10],{"_path":168,"title":169,"description":170,"category":8,"tags":171},"\u002Farticles\u002Fmarktext","MarkText：我目前用過最順手的所見即所得 Markdown 編輯器","MarkText 是一個開源 Markdown 編輯器，最大的特色是所見即所得：不用在原始碼與預覽視窗之間來回切換，而是在同一個畫面直接寫、直接看結果。這篇記錄 macOS 與 Windows 下載方式、Apple Silicon 要選哪個檔案，以及 macOS 遇到「已損毀，無法打開」時怎麼用 xattr 解決。",[14,10],{"_path":173,"title":174,"description":175,"category":8,"tags":176},"\u002Farticles\u002Fquicklook","QuickLook 實測：把 macOS 空白鍵預覽帶到 Windows，速度比 PowerToys Peek 更順","我實測 QuickLook 這款 Windows 檔案快速預覽工具，可以用空白鍵預覽 PDF、Markdown、圖片、影片、3D 模型與多種文件格式。它像 macOS Quick Look，但在 Windows 上支援格式更廣，也比我用 PowerToys Peek 時更順手。",[14,10],{"_path":178,"title":179,"description":180,"category":8,"tags":181},"\u002Farticles\u002Fumi-ocr","Umi-OCR 實測：免費開源離線 OCR 工具，截圖、批次圖片與 PDF 都能本地辨識","我實測 Umi-OCR 這款免費開源的離線 OCR 工具，支援截圖 OCR、批次圖片辨識、PDF 文件 OCR、二維碼掃描與命令列\u002FAPI 呼叫。它不用上傳檔案，Windows 還能依照電腦效能選 Paddle 或 Rapid 引擎版本。",[64,10,14],{"_path":183,"title":184,"description":185,"category":8,"tags":186},"\u002Farticles\u002Fpicsharp","PicSharp 實測：跨平台開源圖片壓縮工具，拖進去就能批次壓縮","我實測 PicSharp 這款跨平台圖片壓縮工具，支援 macOS、Windows 與 Linux，可以直接拖曳圖片或資料夾進去批次壓縮，也能在本地壓縮與 TinyPNG 之間切換，適合整理網站圖片與文章素材。",[64,10,14],{"_path":188,"title":189,"description":190,"category":8,"tags":191},"\u002Farticles\u002Fmeetily","Meetily 實測：本地 AI 會議轉錄、逐字稿與繁體中文摘要工具","Meetily 是一款開源、隱私優先的 AI 會議助理，可以在本機錄音、轉錄並產生摘要。我實測 v0.4.0，整理安裝方式、中文轉錄模型設定、繁體中文摘要與適合使用的情境。",[94,10,95,53,14],{"_path":193,"title":194,"description":195,"category":8,"tags":196},"\u002Farticles\u002Fbuhocleaner","BuhoCleaner 實測：我在 Mac 上用了超過一年的清理與 App 移除工具","我實測 BuhoCleaner 這套 Mac 清理工具，分享用了超過一年的心得、免費版限制、付費版價格、選單列監控、垃圾檔案清理、App 完整移除與日常使用情境。",[14],{"_path":198,"title":199,"description":200,"category":8,"tags":201},"\u002Farticles\u002Ffancontrol","Fan Control 實測：Windows 上超細緻的風扇曲線與硬體溫度控制工具","我實測 Fan Control 這套 Windows 風扇控制工具，從 GitHub Releases 下載 installer、安裝後切換繁體中文、自動校正風扇、建立曲線，到實際調整監控卡片與風扇策略的使用心得。",[14],{"_path":203,"title":204,"description":205,"category":8,"tags":206},"\u002Farticles\u002Fupscayl","Upscayl 實測：免費開源的本機 AI 圖片放大工具","我實測 Upscayl 這套免費開源 AI 圖片放大工具，從 GitHub Releases 與 Homebrew 安裝、第一次選語言、選模型，到用 Digital Art 模型把 He-Man 圖片放大 4 倍的實際效果。",[64,10,95,14],{"_path":208,"title":209,"description":210,"category":8,"tags":211},"\u002Farticles\u002Fappports","AppPorts 實測：把大型 Mac App 搬到外接硬碟，還能像原本一樣啟動","我實測 AppPorts 在 macOS 上把應用程式遷移到外接 SSD 的流程，包含 GitHub Releases 下載、Gatekeeper 隔離解除、語言切換、鎖定遷移與非鎖定遷移，以及實際搬移後的使用感受。",[14,10],{"_path":213,"title":214,"description":215,"category":8,"tags":216},"\u002Farticles\u002Fmac-fan","Macs Fan Control 實測：用了超過一年還留在 Mac 上的免費風扇控制工具","我在 macOS 上長期使用 Macs Fan Control 超過一年，這篇記錄它的下載方式、GitHub README 要先看的重點、溫度感測器設定、風扇曲線邏輯，以及我自己會注意的使用界線。",[14],{"_path":218,"title":219,"description":220,"category":8,"tags":221},"\u002Farticles\u002Fmarkdown-preview","Markdown Preview：macOS 上更輕量的 .md 預覽工具","Markdown Preview 是一個專門用來打開與預覽 .md 檔案的 macOS 小工具，可以設定成 Markdown 預設開啟 App，支援 Quick Look、搜尋、字體大小、外觀切換，以及 Preview \u002F Edit \u002F Split 模式。",[14,27],{"_path":223,"title":224,"description":225,"category":8,"tags":226},"\u002Farticles\u002Fcodebase-memory","Codebase Memory MCP 實測：把整個程式碼庫變成 AI Agent 可查詢的知識圖譜","Codebase Memory MCP 是一個本機運行的程式碼知識圖譜引擎，能讓 Claude Code、Codex、Cursor 等 AI Agent 直接查詢函式、呼叫鏈、架構與影響範圍。本文實測安裝、索引、3D Graph UI 與 CLI 查詢流程。",[94,30,10,11,227,72],"Data Visualization",{"_path":229,"title":230,"description":231,"category":232,"tags":233},"\u002Farticles\u002Fdeskreen","Deskreen 同網域臨時螢幕分享工具實測：用手機或另一台電腦看你的畫面","Deskreen 可以把電腦畫面分享給同一個區域網路內的手機、平板或另一台電腦。這篇紀錄實際使用流程、適合場景，以及內網 IP 和隱私注意事項。","Tools",[10,42,14],{"_path":235,"title":236,"description":237,"category":8,"tags":238},"\u002Farticles\u002Frustdesk","RustDesk 開源遠端桌面實測：用 Windows 串流控制 macOS","RustDesk 是一款開源遠端桌面工具，可以跨平台遠端控制電腦，也支援自建伺服器。這篇記錄我從 GitHub 下載、登入帳號、開啟權限、設定固定密碼，到第一次接受連線的實測流程。",[10,42,14,36],{"_path":240,"title":241,"description":242,"category":8,"tags":243},"\u002Farticles\u002Fhandbrake","HandBrake 實測：老牌開源影片壓縮工具到現在還是很穩","HandBrake 是一款老牌開源影片轉檔與壓縮工具。我這次用 4K 影片簡單實測，原始 106.1 MB 壓到 16.6 MB，畫質保留得比我預期好，這篇記錄我的基本用法與 preset 選擇心得。",[10,12,14],{"_path":245,"title":246,"description":247,"category":8,"tags":248},"\u002Farticles\u002Fsmartsub","SmartSub 妙幕實測：我目前用過最省事的本機影片字幕翻譯工具","SmartSub 妙幕是一款本地優先的桌面字幕工具，可以完成影片轉字幕、字幕翻譯、雙語字幕與字幕燒錄。這篇記錄我實測 DeepSeek 翻譯、faster-whisper、CUDA 加速，以及它和 VideoLingo 的差異。",[94,10,12,95],{"_path":250,"title":251,"description":252,"category":8,"tags":253},"\u002Farticles\u002Fkando","Kando 實測：我近期最喜歡的跨平台開源圓盤快捷選單","Kando 是一款免費開源、支援 macOS\u002FWindows\u002FLinux 的 Pie Menu 工具，可以用 Ctrl + Space 叫出圓盤選單，用滑鼠手勢快速開啟 App、網站、檔案、熱鍵與巨集。這篇分享我的實際使用體驗與設定方式。",[10,14,13],{"_path":255,"title":256,"description":257,"category":8,"tags":258},"\u002Farticles\u002Fhorizon","Horizon 實測：讓 Codex 自動整理每日 AI 新聞","我把 Horizon 接進部落格新聞流程，讓它負責抓資料來源，再交給 Codex 寫成每日 AI 新聞摘要。這篇記錄安裝方式、基本使用流程，以及我實際測完後的想法。",[94,30,10,13,11],{"_path":260,"title":261,"description":262,"category":8,"tags":263},"\u002Farticles\u002Fmaccy","Maccy 實測：輕量、鍵盤優先的 macOS 開源剪貼簿管理工具","自己在 macOS 整理資料或開發時最常遇到的問題是頻繁複製貼上造成的視窗切換。本文實測開源的 Maccy 剪貼簿工具，分享其快捷鍵喚醒、快速搜尋、安全過濾等實際使用體驗。",[10,14],{"_path":265,"title":266,"description":267,"category":8,"tags":268},"\u002Farticles\u002Fstirling-pdf","Stirling PDF 實測：離線跑的開源 PDF 神器，免上傳雲端直接搞定 50+ 種處理需求","我最近實測了開源的 Stirling PDF。這是一款可以完全在本地運行的 PDF 編輯平台，支援合併、壓縮、簽名等多達 50 多種功能，不用擔心敏感文件被上傳到第三方雲端伺服器。",[10,14,20],{"_path":270,"title":271,"description":272,"category":232,"tags":273},"\u002Farticles\u002Faerospace","AeroSpace 實測：讓 macOS 擁有平鋪視窗管理","分享這款 AeroSpace 平鋪視窗管理工具，以及我如何透過鍵盤快捷鍵解決 macOS 視窗混亂的問題。",[10,14],{"_path":275,"title":276,"description":277,"category":8,"tags":278},"\u002Farticles\u002Fpowertoys","Microsoft PowerToys 實測：4 個用過就回不去的 Windows 效率工具","自己在 Windows 工作最常遇到的問題是缺少類似 macOS 的預覽與快速啟動功能。本文實測微軟官方推出的 PowerToys 中實用的四個工具：空白鍵預覽 Peek、快速截圖 OCR 複製、視窗永久置頂與快捷搜尋框，分享我實際的使用體驗。",[10,14],{"_path":280,"title":281,"description":282,"category":8,"tags":283},"\u002Farticles\u002Frecord-replay","Codex Record & Replay 實測：演示一遍，教 AI 學會你的本地工作流","OpenAI Codex 最近新增了 Record & Replay 功能。我實測了在本地環境下，如何透過一次演示，讓 Codex 錄製並自動執行影片壓縮等腳本工作流。",[72,13,14,94],{"_path":285,"title":286,"description":287,"category":8,"tags":288},"\u002Farticles\u002Frecordly","Recordly 實測：開源螢幕錄影與自動 Zoom-in 編輯器（macOS\u002FWindows\u002FLinux）","我最近實測了開源的 Recordly。這是一款結合錄影與後製的工具，能自動根據滑鼠活動生成變焦建議，並提供滑鼠平滑、陰影邊框等美化功能，讓製作軟體 Demo 影片變得很省時。",[10,14,12],{"_path":290,"title":291,"description":292,"category":8,"tags":293},"\u002Farticles\u002Fcodexbar","CodexBar 實測：macOS 選單列一次監控 53 個 AI 編碼服務額度","CodexBar 是一款開源的 macOS 選單列工具，可即時追蹤 Codex、Claude、Cursor、Copilot 等 AI 編碼服務的使用視窗、信用餘額與重設倒數。本文實測安裝流程、權限授權與提供者設定教學。",[94,72,294,11,10,14],"Claude Code",{"_path":296,"title":297,"description":298,"category":8,"tags":299},"\u002Farticles\u002Foptimizerduck","optimizerDuck 實測：開源 Windows 效能與隱私最佳化工具，拒絕背景無用遙測","optimizerDuck 是一款基於 .NET 10 與 WPF 開發的開源 Windows 系統最佳化工具。本文實測其效能調校、隱私遙測封鎖、GPU 電源優化等功能，並提供 Windows SmartScreen 封鎖警告的排解步驟與繁體中文語系設定教學。",[10,14,13],{"_path":301,"title":302,"description":303,"category":8,"tags":304},"\u002Farticles\u002Fhandy","Handy 離線語音輸入法實測：搭配 Breeze ASR 25，專為台灣人設計的中英混用輸入方案","Handy 是一款免費、開源且完全離線運作的桌面語音輸入工具。本文實測在 macOS\u002FWindows\u002FLinux 環境下安裝配置，並搭配專為台灣日常中英混用情境優化的 Breeze ASR 25模型，為您打造極致隱私的語音輸入體驗。",[94,10,95,53,14],{"_path":306,"title":307,"description":308,"category":8,"tags":309},"\u002Farticles\u002F5live","Gemini 3.5 Live Translate 實測：全新雙向即時語音翻譯與 Live API 開發指南","Google 推出全新的 Gemini 3.5 Live Translate 模型，支援超過 70 種語言的雙向低延遲即時語音翻譯。本文將帶你實測 Google AI Studio 的網頁體驗、了解其運作機制，並提供 Live API 開發範例與 WebSocket 連接設定。",[94,53,310],"LLM",{"_path":312,"title":313,"description":314,"category":232,"tags":315},"\u002Farticles\u002Fmap3d","Map3D 實測：一鍵生成 3D 城市地圖與 GLB 匯出指南","想要快速獲取真實城市的 3D 建築與道路模型？Map3D 基於 React-Three-Fiber 與 OpenStreetMap，提供網頁一鍵框選與直接匯出 GLB，讓 3D 地形建模變得太簡單了！",[316,317,318,319,320,71],"React-Three-Fiber","Three.js","OpenStreetMap","GLB","3D Map",{"_path":322,"title":323,"description":324,"category":232,"tags":325},"\u002Farticles\u002Flocalsend","LocalSend 跨平台開源局域網檔案傳輸工具免設定使用指南","免網路、免註冊，在 macOS、Windows、Linux、iOS 與 Android 之間以 HTTPS 局域網高速安全互傳檔案。",[10,42,14],{"_path":327,"title":328,"description":329,"category":8,"tags":330},"\u002Farticles\u002Fllmwiki","LLM Wiki 實測：用大模型打造能自動整理與更新的個人離線知識庫","每次整理筆記都覺得繁瑣？LLM Wiki 是一款基於 Andrej Karpathy 理念開發的個人知識庫工具。它能自動讀取文檔、進行兩階段思維鏈分析、生成互相連結的 Wiki 頁面，並完美兼容 Obsidian 與本地 AI 模型。",[95,94,10,310,14,30],{"_path":332,"title":333,"description":334,"category":232,"tags":335},"\u002Farticles\u002Fvibe","Vibe 實測：最適合小白的跨平台離線 AI 語音轉文字工具，簡潔直覺一鍵搞定！","嫌 Whisper 命令行太難、其他工具設定太複雜？Vibe 是一款極簡、無痛上手的離線語音轉字幕工具。功能雖然精簡，但介面清爽、極易上手，是電腦小白與新手的最佳選擇！",[53,336,95,10],"Whisper",{"_path":338,"title":339,"description":340,"category":8,"tags":341},"\u002Farticles\u002Flottie","Text-To-Lottie 實測：用 AI Agent 本地生成與即時預覽 Lottie 動畫","本文介紹如何透過 Skia CanvasKit (Skottie) 搭配 React 與 shadcn\u002Fui 控制介面，讓本地 AI 代理直接編寫 lottie.json，並透過開發伺服器即時熱重載預覽動畫。",[94,30,10,27],{"_path":343,"title":344,"description":345,"category":8,"tags":346},"\u002Farticles\u002Fhermes-desktop","Nous Hermes Desktop 桌面版原生安裝與設定教學：跨平台 AI 助理與統一記憶體實測","Nous Research 旗下的 Hermes 智慧代理從終端機走向 GUI！本文帶您實測原生三平台桌面版，詳細拆解舊用戶一鍵搬遷步驟、API 供應商配置，以及如何串接 Telegram 與 Line 打造個人 AI 助理。",[94,30,10],{"_path":348,"title":349,"description":350,"category":232,"tags":351},"\u002Farticles\u002Fmineru","MinerU 實測：超強開源 PDF 與多格式文檔解析利器（macOS\u002FWindows\u002FLinux）","面臨複雜版面、掃描件或公式時，傳統 PDF 轉文字工具總是力不從心？開源框架 MinerU 結合佈局分析與視覺語言模型 (VLM)，能一鍵將 PDF、圖片及 Office 檔案轉換為精準的 Markdown、表格與 LaTeX 公式。本文實測線上 Web 版與本地 CLI\u002FAPI 部署流程。",[352,353,354,95,10],"PDF Parser","Markdown","OCR",{"_path":356,"title":357,"description":358,"category":10,"tags":359},"\u002Farticles\u002Fheadroom","Headroom 實測：AI Agent 的上下文壓縮層，節省高達 60–95% Token 成本","專為 AI Agent 設計的開源上下文優化工具 Headroom，整合多種壓縮演算法，支援本地逆向解壓 (CCR)，大幅降低 LLM 運算開銷並提升反應速度。",[10,360,310,361],"AI Agent","Context Optimization",{"_path":363,"title":364,"description":365,"category":25,"tags":366},"\u002Farticles\u002Ftegaki","Tegaki 手寫文字動畫庫安裝與實測：網頁手寫字動態特效輕鬆實現","想要在網頁中加入自然流暢的手寫字動畫嗎？Tegaki 是一個輕量且易用的 JavaScript 庫，能將任何字型轉換成手寫筆劃動畫。",[10,27,367,70],"Frontend",{"_path":369,"title":370,"description":371,"category":8,"tags":372},"\u002Farticles\u002Fccswitch2","CC Switch 延伸應用：手機遠端控制電腦與 Codex 增強模式實測","如何利用 CC Switch v3.16.1+ 獨家功能，在保留 Codex 官方行動端登入態與遠端操控能力的同時，將實際模型請求路由至 DeepSeek 等第三方 API？手把手帶你實現手機控制電腦的 AI Agent 體驗。",[94,294,72,373,310],"CC Switch",{"_path":375,"title":376,"description":377,"category":8,"tags":378},"\u002Farticles\u002Fccswitch","CC Switch 實測：自備 API Key 一鍵切換 AI CLI 模型的本機路由神器","在終端機使用 Claude Code 或 Codex 時，如何自由切換模型、自備 API Key 或使用 DeepSeek？本篇實測 CC Switch 路由工具，手把手教學如何代理 AI CLI 並進行花費與 MCP 管理。",[94,294,72,373,310],{"_path":380,"title":381,"description":382,"category":8,"tags":383},"\u002Farticles\u002Fremoverized","Removerized：離線可用的瀏覽器端 AI 去背與畫質增強工具","Removerized 讓你在瀏覽器中直接完成去背、放大與批次處理，資料不需上傳雲端，兼顧速度與隱私。",[94,64,95],{"_path":385,"title":386,"description":387,"category":8,"tags":388},"\u002Farticles\u002Fopen-design","Open Design 實測：用本地 CLI 快速做出作品集首頁","這次我把作品集首頁的大部分畫面交給 Open Design 處理。從選本地 Coding Agent、挑設計系統、輸入 brief，到生成設計稿與交付給 VS Code，整個流程比我預期順很多。",[389,73,27],"AI Design",{"_path":391,"title":392,"description":393,"category":232,"tags":394},"\u002Farticles\u002Fpot","Pot (派了個萌的翻譯器) 實測：最完美的跨平台劃詞翻譯與 OCR 工具","尋找一款流暢、不打斷工作流的翻譯工具？Pot 支援多譯文並行比對、精準的截圖 OCR 與豐富的翻譯\u002F大模型接口，是 macOS, Windows 與 Linux 用戶的極致效率利器。",[14,94,10],{"_path":396,"title":397,"description":398,"category":232,"tags":399},"\u002Farticles\u002Frtk","RTK 終端機 Token 殺手安裝與實測：省下 70% 以上 Claude Code 費用","RTK (Rust Token Killer) 是一個基於 Rust 的高效能 CLI 代理工具，能自動過濾與壓縮終端機輸出，為 AI 輔助開發節省 60-90% 的 Token 消耗。",[30,294,14,36],{"_path":401,"title":402,"description":403,"category":232,"tags":404},"\u002Farticles\u002Ffreedomain","Digiplat 免費 DNS 二級域名申請與 Cloudflare 解析配置教學","想將個人專案或測試網站部署上線，卻不想花錢購買網域？本文將教你如何使用 Digiplat 免費申請包含 .US.KG、.DPDNS.ORG 等多種後綴的免費二級域名。",[27],{"_path":406,"title":407,"description":408,"category":8,"tags":409},"\u002Farticles\u002Fmodly","Modly 本地端 AI 圖像轉 3D 網格生成工具安裝與實測","想將 2D 圖片快速轉換為高精度的 3D 模型，又不想付費或將隱私上傳雲端？Modly 讓你在本機 GPU 上直接進行 AI 3D 生成。",[94,71,10,95],{"_path":411,"title":412,"description":413,"category":25,"tags":414},"\u002Farticles\u002Fopenvid","OpenVid 瀏覽器免安裝產品 Demo 錄影與 3D 鏡頭後製工具教學","想要為你的產品錄製精美的演示影片？OpenVid 讓你直接在瀏覽器中套用 3D 鏡頭、縮放與精美背景，一鍵導出高質感的 Demo 影片。",[10,27,12],{"_path":416,"title":417,"description":418,"category":8,"tags":419},"\u002Farticles\u002Fomnivoice","OmniVoice Studio 本地端 AI 影音配音工具實測與 macOS 安裝避坑指南","最近測試了開源版 ElevenLabs + HeyGen：OmniVoice Studio。它支援 646 種語言、本地自動影片配音，且連 Mac mini 都跑得動！本文分享實測心得、macOS 隔離區排除教學，以及繁中\u002F簡中輸入產生的語音對比。",[94,53],{"_path":421,"title":422,"description":423,"category":20,"tags":424},"\u002Farticles\u002Fshannon","Shannon AI Pentest Agent 安裝與實測指南（macOS\u002FLinux）","我用 10 個 AI agents 打自己的網站，2 小時後交出完整資安報告。Shannon 比我想像的成熟。",[30,20,13],{"_path":426,"title":427,"description":428,"category":25,"tags":429},"\u002Farticles\u002Fpretext","Pretext 高效多行文字 Canvas 排版庫優化與防 DOM 重繪技術","想精準計算段落高度、做出更自由的文字排版，卻不想一直碰 getBoundingClientRect？Pretext 提供了一條很聰明的路。",[27,367,70],{"_path":431,"title":432,"description":433,"category":232,"tags":434},"\u002Farticles\u002Faltsendme","AltSendme 跨平台 P2P 極速檔案互傳工具免伺服器部署指南","不用雲端、不用註冊，Windows 與 macOS 直接對傳。",[94,42,14],{"_path":436,"title":437,"description":438,"category":25,"tags":439},"\u002Farticles\u002Fdeckgl","Deck.gl 大規模 3D 地理數據視覺化框架與 MapLibre 整合實戰","想要在網頁上渲染數以萬計的數據點，同時保持流暢的 3D 互動？Deck.gl 是處理地理空間資料視覺化的絕佳利器。",[71,27,227,70],{"_path":441,"title":442,"description":443,"category":232,"tags":444},"\u002Farticles\u002Fantigravity-manager","Antigravity Manager 管理工具安裝教學：多帳號與 Token 額度即時監控","如果你只在意兩件事：配額看得清楚、帳號切得快速，Antigravity Manager 其實就很值得裝。",[94,14,11],{"_path":446,"title":447,"description":448,"category":10,"tags":449},"\u002Farticles\u002Fvideolingo","VideoLingo 本地 AI 影片翻譯字幕與中文配音工具部署指南","我實測了 VideoLingo，從原始影片到中文字幕與中配影片都能自動化完成。這篇整理功能、實際效果和我建議的模型設定。",[10,12,53,94],{"_path":451,"title":452,"description":453,"category":232,"tags":454},"\u002Farticles\u002Farnis","Arnis 地理 GIS 數據轉換工具安裝與 Minecraft 3D 真實地圖生成實戰","如果你曾經想過把自己的家鄉、城市甚至整片地形直接生成到 Minecraft 裡，Arnis 真的很誇張。",[10,13],{"_path":456,"title":457,"description":458,"category":10,"tags":459},"\u002Farticles\u002Flog-lottery-tw","log-lottery 開源網頁抽獎系統自定義配置與尾牙活動實用部署","支援自訂名單、獎項、圖片、背景與音樂的開源抽獎工具。我也整理了繁體中文版本，部署後打開瀏覽器就能直接使用。",[10,27,367],{"_path":461,"title":462,"description":463,"category":8,"tags":464},"\u002Farticles\u002Fhermes-hyperframes-self-intro-video","Hermes Agent x HyperFrames 實戰：AI 助理自介影片自動生成指南","叫 Hermes 自己拍一支自我介紹影片。從文案發想、HTML 動畫編寫、到渲染輸出 MP4 全部自動化。HyperFrames 是什麼？為什麼比 Remotion 更適合 AI Agent？",[30,12,13],{"_path":466,"title":467,"description":468,"category":8,"tags":469},"\u002Farticles\u002Fhermes-deepseek-v4","DeepSeek V4 Pro x Hermes Agent 自動寫自我介紹評測與部署指南","我叫 Hermes 自己寫這篇。1M context、0.87 鎂\u002F百萬 token、跨平台部署、自主截圖寫文 git push。這篇文章由 AI 從研究到發布全部自己來。",[30,310,13],{"_path":471,"title":472,"description":473,"category":232,"tags":474},"\u002Farticles\u002Fbarkod","Barkod Studio 個性化條碼與發票載具圖樣生成器安裝與設計指南","全網頁版免安裝，高質感自訂樣式。結帳時拿出鯊魚或大便造型載具，絕對是全場焦點。",[27,367,70],{"_path":476,"title":477,"description":478,"category":232,"tags":479},"\u002Farticles\u002Fstacher","Stacher 萬能影音下載器安裝教學與 yt-dlp GUI 圖形化配置指南","告別繁瑣的指令，yt-dlp 最強圖形化介面，4K 影片、音樂下載一次搞定！",[94,12],{"_path":481,"title":482,"description":483,"category":232,"tags":484},"\u002Farticles\u002Fpetdex","Petdex 點陣圖桌面電子寵物安裝指南：讓開發環境更有趣","一行 npx 指令秒裝，完全免註冊登入，給工程師帶來滿滿的心靈祥和！",[94,11],{"_path":486,"title":487,"description":488,"category":25,"tags":489},"\u002Farticles\u002Fcobe","Cobe 輕量 WebGL 地球儀配置教學與 Vue 專案整合指南","想要在網頁上放一個酷炫的 3D 地球，但又不想載入沉重的 Three.js？COBE 是你的最佳選擇。",[71,27,367,70],{"_path":491,"title":492,"description":493,"category":10,"tags":494},"\u002Farticles\u002Fsupercmd","SuperCmd 開源 Mac 快捷啟動器安裝與自定義指令配置指南","整合 Raycast 擴充、語音輸入與 AI 助手，這款開源工具能成為你的新寵嗎？",[10,14],{"_path":496,"title":497,"description":498,"category":499,"tags":500},"\u002Farticles\u002Fopenstock","OpenStock 開源股票市場回測系統安裝與 AI 策略整合教學","OpenStock 是一個由社群驅動的開源股票平台，昂貴的市場的平替工具。","AI & Finance",[10,501,111],"FinTech",{"_path":503,"title":504,"description":505,"category":8,"tags":506},"\u002Farticles\u002Fworld-monitor","World Monitor 全球即時情報監控系統本地部署與 AI 分析流整合教學","這是一篇關於 World Monitor 的深度介紹。從本地端快速部署到整合 AI 分析，教你如何打造一個包含地緣政治、軍事、金融與基礎設施的即時監控平台。",[94,42,111],{"_path":508,"title":509,"description":510,"category":8,"tags":511},"\u002Farticles\u002Fpi-mono-coding-agent","Pi Coding Agent 輕量級終端機 AI 助手安裝與工作流實戰","如果你覺得市面上的 AI 開發工具太過笨重，或是強迫你改變習慣，那你一定要試試完全由你掌控的 Pi。",[30,11],{"_path":513,"title":514,"description":515,"category":8,"tags":516},"\u002Farticles\u002Fwarp-terminal-ux-revolution","Warp Terminal 新一代 IDE 級智慧終端機安裝與開發效率優化配置","從可視化補全、滑鼠編輯到 Blocks 區塊輸出，Warp 正在把傳統終端機那套難用又反直覺的體驗，整個翻新。",[11,14],{"_path":518,"title":519,"description":520,"category":8,"tags":521},"\u002Farticles\u002Fvoicebox-local-ai-voice-studio","Voicebox 本地端 AI 語音工作室安裝指南與核心配置教學","這是一篇針對開發者設計的 Voicebox 指南。從 macOS\u002FWindows 安裝到 Voice Cloning 實作，並教你如何透過 MCP 讓 AI Agent 開口說話。",[94,53,13],{"_path":523,"title":524,"description":525,"category":8,"tags":526},"\u002Farticles\u002Fnvidia-nim-free-api","NVIDIA NIM 免費 DeepSeek-V4-Pro API 申請與多框架整合指南","不綁信用卡、沒有試用期！教你如何透過 NVIDIA NIM 無痛串接剛上市的最強開源模型 DeepSeek-V4-Pro 與 Flash 版本。",[94,310],{"_path":5,"_dir":528,"_draft":529,"_partial":529,"_locale":530,"title":6,"description":7,"date":531,"updated":531,"category":8,"image":532,"tags":533,"series":534,"readingTime":535,"difficulty":536,"local":537,"platforms":538,"gpu":542,"draft":529,"body":543,"_type":1616,"_id":1617,"_source":1618,"_file":1619,"_stem":1620,"_extension":1621},"articles",false,"","2026-08-13","\u002Fimages\u002Fvideo-posters\u002Fday_assets\u002Fvhs\u002Fvhs-demo.jpg",[10,11,12,13,14],"github-tech","5 min read","Easy",true,[539,540,541],"macOS","Windows","Linux","None",{"type":544,"children":545,"toc":1607},"root",[546,554,560,583,588,593,626,632,637,670,706,726,731,752,757,762,917,974,980,985,1354,1385,1397,1446,1482,1488,1500,1519,1538,1557,1563,1568,1580,1585,1591,1596,1601],{"type":547,"tag":548,"props":549,"children":551},"element","h2",{"id":550},"前言",[552],{"type":553,"value":550},"text",{"type":547,"tag":555,"props":556,"children":557},"p",{},[558],{"type":553,"value":559},"寫 CLI 工具或教學文章時，我常常需要錄一段終端機操作。手動錄影沒有很難，麻煩的是改一行指令後，游標位置、輸入速度、視窗尺寸和停頓時間都要重新控制一次。",{"type":547,"tag":555,"props":561,"children":562},{},[563,572,574,581],{"type":547,"tag":564,"props":565,"children":569},"a",{"href":566,"rel":567},"https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Fvhs",[568],"nofollow",[570],{"type":553,"value":571},"VHS",{"type":553,"value":573}," 的做法很直接：把整段終端機 Demo 寫進 ",{"type":547,"tag":575,"props":576,"children":578},"code",{"className":577},[],[579],{"type":553,"value":580},".tape",{"type":553,"value":582}," 檔案，再由程式按照腳本輸入指令、按 Enter、等待結果並輸出影片。錄影內容因此能放進 Git，指令改了就重新執行，不用每次靠手速重錄。",{"type":547,"tag":555,"props":584,"children":585},{},[586],{"type":553,"value":587},"我這次寫了一份 662 bytes 的 Tape，實際產生 16.92 秒、1280×720 的 MP4，檔案約 126 KB。內容混用中文和英文，下面就是 VHS 自己錄出來的結果。",{"type":547,"tag":589,"props":590,"children":592},"fullscreen-video",{"src":591},"\u002Fday_assets\u002Fvhs\u002Fvhs-demo.mp4?v=20260813-bilingual",[],{"type":547,"tag":594,"props":595,"children":596},"ul",{},[597,607,617],{"type":547,"tag":598,"props":599,"children":600},"li",{},[601],{"type":547,"tag":564,"props":602,"children":604},{"href":566,"rel":603},[568],[605],{"type":553,"value":606},"VHS GitHub 專案",{"type":547,"tag":598,"props":608,"children":609},{},[610],{"type":547,"tag":564,"props":611,"children":614},{"href":612,"rel":613},"https:\u002F\u002Fgithub.com\u002Fcharmbracelet\u002Fvhs\u002Freleases",[568],[615],{"type":553,"value":616},"VHS Releases",{"type":547,"tag":598,"props":618,"children":619},{},[620],{"type":547,"tag":564,"props":621,"children":623},{"href":622},"\u002Fdownloads\u002Fvhs-demo.tape",[624],{"type":553,"value":625},"下載本篇實測使用的 vhs-demo.tape",{"type":547,"tag":548,"props":627,"children":629},{"id":628},"安裝-vhs",[630],{"type":553,"value":631},"安裝 VHS",{"type":547,"tag":555,"props":633,"children":634},{},[635],{"type":553,"value":636},"macOS 或有 Homebrew 的 Linux，可以直接執行：",{"type":547,"tag":638,"props":639,"children":643},"pre",{"className":640,"code":641,"language":642,"meta":530,"style":530},"language-bash shiki shiki-themes one-dark-pro","brew install vhs\n","bash",[644],{"type":547,"tag":575,"props":645,"children":646},{"__ignoreMap":530},[647],{"type":547,"tag":648,"props":649,"children":652},"span",{"class":650,"line":651},"line",1,[653,659,665],{"type":547,"tag":648,"props":654,"children":656},{"style":655},"--shiki-default:#61AFEF",[657],{"type":553,"value":658},"brew",{"type":547,"tag":648,"props":660,"children":662},{"style":661},"--shiki-default:#98C379",[663],{"type":553,"value":664}," install",{"type":547,"tag":648,"props":666,"children":667},{"style":661},[668],{"type":553,"value":669}," vhs\n",{"type":547,"tag":555,"props":671,"children":672},{},[673,675,681,683,689,691,697,699,704],{"type":553,"value":674},"VHS 執行時需要 ",{"type":547,"tag":575,"props":676,"children":678},{"className":677},[],[679],{"type":553,"value":680},"ttyd",{"type":553,"value":682}," 和 ",{"type":547,"tag":575,"props":684,"children":686},{"className":685},[],[687],{"type":553,"value":688},"ffmpeg",{"type":553,"value":690},"。我這次在 macOS 用 Homebrew 安裝 ",{"type":547,"tag":575,"props":692,"children":694},{"className":693},[],[695],{"type":553,"value":696},"v0.11.0",{"type":553,"value":698},"，套件管理器也一起處理了缺少的 ",{"type":547,"tag":575,"props":700,"children":702},{"className":701},[],[703],{"type":553,"value":680},{"type":553,"value":705},"，不用再分開找依賴。",{"type":547,"tag":555,"props":707,"children":708},{},[709,711,717,719,724],{"type":553,"value":710},"Windows 可以用 ",{"type":547,"tag":575,"props":712,"children":714},{"className":713},[],[715],{"type":553,"value":716},"winget install charmbracelet.vhs",{"type":553,"value":718}," 或 Scoop；Linux 也有 Debian、RPM、Arch 與 Nix 套件。完全不想碰本機依賴的話，官方另有包含依賴的 Docker 映像檔。各系統最新檔案可以直接到 ",{"type":547,"tag":564,"props":720,"children":722},{"href":612,"rel":721},[568],[723],{"type":553,"value":616},{"type":553,"value":725}," 下載。",{"type":547,"tag":555,"props":727,"children":728},{},[729],{"type":553,"value":730},"安裝後先確認版本：",{"type":547,"tag":638,"props":732,"children":734},{"className":640,"code":733,"language":642,"meta":530,"style":530},"vhs --version\n",[735],{"type":547,"tag":575,"props":736,"children":737},{"__ignoreMap":530},[738],{"type":547,"tag":648,"props":739,"children":740},{"class":650,"line":651},[741,746],{"type":547,"tag":648,"props":742,"children":743},{"style":655},[744],{"type":553,"value":745},"vhs",{"type":547,"tag":648,"props":747,"children":749},{"style":748},"--shiki-default:#D19A66",[750],{"type":553,"value":751}," --version\n",{"type":547,"tag":548,"props":753,"children":755},{"id":754},"常用指令速查",[756],{"type":553,"value":754},{"type":547,"tag":555,"props":758,"children":759},{},[760],{"type":553,"value":761},"先記下面幾個就夠用了：",{"type":547,"tag":763,"props":764,"children":765},"table",{},[766,785],{"type":547,"tag":767,"props":768,"children":769},"thead",{},[770],{"type":547,"tag":771,"props":772,"children":773},"tr",{},[774,780],{"type":547,"tag":775,"props":776,"children":777},"th",{},[778],{"type":553,"value":779},"指令",{"type":547,"tag":775,"props":781,"children":782},{},[783],{"type":553,"value":784},"用途",{"type":547,"tag":786,"props":787,"children":788},"tbody",{},[789,807,824,841,858,875,900],{"type":547,"tag":771,"props":790,"children":791},{},[792,802],{"type":547,"tag":793,"props":794,"children":795},"td",{},[796],{"type":547,"tag":575,"props":797,"children":799},{"className":798},[],[800],{"type":553,"value":801},"vhs demo.tape",{"type":547,"tag":793,"props":803,"children":804},{},[805],{"type":553,"value":806},"執行 Tape，產生腳本裡指定的影片",{"type":547,"tag":771,"props":808,"children":809},{},[810,819],{"type":547,"tag":793,"props":811,"children":812},{},[813],{"type":547,"tag":575,"props":814,"children":816},{"className":815},[],[817],{"type":553,"value":818},"vhs new demo.tape",{"type":547,"tag":793,"props":820,"children":821},{},[822],{"type":553,"value":823},"建立一份包含範例與註解的 Tape",{"type":547,"tag":771,"props":825,"children":826},{},[827,836],{"type":547,"tag":793,"props":828,"children":829},{},[830],{"type":547,"tag":575,"props":831,"children":833},{"className":832},[],[834],{"type":553,"value":835},"vhs record > demo.tape",{"type":547,"tag":793,"props":837,"children":838},{},[839],{"type":553,"value":840},"錄下實際操作，再存成可修改的 Tape",{"type":547,"tag":771,"props":842,"children":843},{},[844,853],{"type":547,"tag":793,"props":845,"children":846},{},[847],{"type":547,"tag":575,"props":848,"children":850},{"className":849},[],[851],{"type":553,"value":852},"vhs validate demo.tape",{"type":547,"tag":793,"props":854,"children":855},{},[856],{"type":553,"value":857},"只檢查語法，不執行錄影",{"type":547,"tag":771,"props":859,"children":860},{},[861,870],{"type":547,"tag":793,"props":862,"children":863},{},[864],{"type":547,"tag":575,"props":865,"children":867},{"className":866},[],[868],{"type":553,"value":869},"vhs themes",{"type":547,"tag":793,"props":871,"children":872},{},[873],{"type":553,"value":874},"列出可以使用的終端機主題",{"type":547,"tag":771,"props":876,"children":877},{},[878,887],{"type":547,"tag":793,"props":879,"children":880},{},[881],{"type":547,"tag":575,"props":882,"children":884},{"className":883},[],[885],{"type":553,"value":886},"vhs publish demo.gif",{"type":547,"tag":793,"props":888,"children":889},{},[890,892,898],{"type":553,"value":891},"把 GIF 上傳到 ",{"type":547,"tag":575,"props":893,"children":895},{"className":894},[],[896],{"type":553,"value":897},"vhs.charm.sh",{"type":553,"value":899}," 並取得分享網址",{"type":547,"tag":771,"props":901,"children":902},{},[903,912],{"type":547,"tag":793,"props":904,"children":905},{},[906],{"type":547,"tag":575,"props":907,"children":909},{"className":908},[],[910],{"type":553,"value":911},"vhs \u003Ccommand> --help",{"type":547,"tag":793,"props":913,"children":914},{},[915],{"type":553,"value":916},"查看某個指令的完整參數",{"type":547,"tag":555,"props":918,"children":919},{},[920,922,928,930,936,937,943,944,950,951,957,958,964,966,972],{"type":553,"value":921},"Tape 裡最常出現的是 ",{"type":547,"tag":575,"props":923,"children":925},{"className":924},[],[926],{"type":553,"value":927},"Output",{"type":553,"value":929},"、",{"type":547,"tag":575,"props":931,"children":933},{"className":932},[],[934],{"type":553,"value":935},"Set",{"type":553,"value":929},{"type":547,"tag":575,"props":938,"children":940},{"className":939},[],[941],{"type":553,"value":942},"Type",{"type":553,"value":929},{"type":547,"tag":575,"props":945,"children":947},{"className":946},[],[948],{"type":553,"value":949},"Enter",{"type":553,"value":929},{"type":547,"tag":575,"props":952,"children":954},{"className":953},[],[955],{"type":553,"value":956},"Sleep",{"type":553,"value":682},{"type":547,"tag":575,"props":959,"children":961},{"className":960},[],[962],{"type":553,"value":963},"Wait",{"type":553,"value":965},"。這篇下面的腳本已經涵蓋基本錄影流程；其餘按鍵、隱藏指令、等待文字和進階設定，可以直接看 ",{"type":547,"tag":564,"props":967,"children":969},{"href":566,"rel":968},[568],[970],{"type":553,"value":971},"VHS 原始 Repo",{"type":553,"value":973},"。",{"type":547,"tag":548,"props":975,"children":977},{"id":976},"tape-就是一份終端機分鏡",[978],{"type":553,"value":979},"Tape 就是一份終端機分鏡",{"type":547,"tag":555,"props":981,"children":982},{},[983],{"type":553,"value":984},"這次實測的完整腳本如下：",{"type":547,"tag":638,"props":986,"children":989},{"className":987,"code":988,"language":553,"meta":530,"style":530},"language-text shiki shiki-themes one-dark-pro","Output vhs-demo.mp4\n\nSet Shell \"bash\"\nSet FontSize 24\nSet Width 1280\nSet Height 720\nSet TypingSpeed 35ms\nSet Theme \"Catppuccin Mocha\"\nSet Padding 28\nSet Margin 24\nSet MarginFill \"#181825\"\nSet BorderRadius 12\nSet WindowBar Colorful\nSet CursorBlink false\n\nType \"clear\"\nEnter\nSleep 500ms\n\nType \"echo '你好，VHS！Hello from the terminal.'\"\nEnter\nSleep 1s\n\nType \"echo '環境檢查 \u002F Checking environment'\"\nEnter\nSleep 700ms\n\nType \"echo '狀態正常 \u002F Status: OK'\"\nEnter\nSleep 700ms\n\nType \"echo '產生影片 \u002F Rendering video'\"\nEnter\nSleep 700ms\n\nType \"echo '輸出完成 \u002F Export: DONE'\"\nEnter\nSleep 700ms\n\nType \"echo '完成！Demo is ready.'\"\nEnter\nSleep 3s\n",[990],{"type":547,"tag":575,"props":991,"children":992},{"__ignoreMap":530},[993,1001,1010,1019,1028,1037,1046,1055,1064,1073,1082,1091,1100,1109,1118,1126,1135,1144,1153,1161,1170,1178,1187,1195,1204,1212,1221,1229,1238,1246,1254,1262,1271,1279,1287,1295,1304,1312,1320,1328,1337,1345],{"type":547,"tag":648,"props":994,"children":995},{"class":650,"line":651},[996],{"type":547,"tag":648,"props":997,"children":998},{},[999],{"type":553,"value":1000},"Output vhs-demo.mp4\n",{"type":547,"tag":648,"props":1002,"children":1004},{"class":650,"line":1003},2,[1005],{"type":547,"tag":648,"props":1006,"children":1007},{"emptyLinePlaceholder":537},[1008],{"type":553,"value":1009},"\n",{"type":547,"tag":648,"props":1011,"children":1013},{"class":650,"line":1012},3,[1014],{"type":547,"tag":648,"props":1015,"children":1016},{},[1017],{"type":553,"value":1018},"Set Shell \"bash\"\n",{"type":547,"tag":648,"props":1020,"children":1022},{"class":650,"line":1021},4,[1023],{"type":547,"tag":648,"props":1024,"children":1025},{},[1026],{"type":553,"value":1027},"Set FontSize 24\n",{"type":547,"tag":648,"props":1029,"children":1031},{"class":650,"line":1030},5,[1032],{"type":547,"tag":648,"props":1033,"children":1034},{},[1035],{"type":553,"value":1036},"Set Width 1280\n",{"type":547,"tag":648,"props":1038,"children":1040},{"class":650,"line":1039},6,[1041],{"type":547,"tag":648,"props":1042,"children":1043},{},[1044],{"type":553,"value":1045},"Set Height 720\n",{"type":547,"tag":648,"props":1047,"children":1049},{"class":650,"line":1048},7,[1050],{"type":547,"tag":648,"props":1051,"children":1052},{},[1053],{"type":553,"value":1054},"Set TypingSpeed 35ms\n",{"type":547,"tag":648,"props":1056,"children":1058},{"class":650,"line":1057},8,[1059],{"type":547,"tag":648,"props":1060,"children":1061},{},[1062],{"type":553,"value":1063},"Set Theme \"Catppuccin Mocha\"\n",{"type":547,"tag":648,"props":1065,"children":1067},{"class":650,"line":1066},9,[1068],{"type":547,"tag":648,"props":1069,"children":1070},{},[1071],{"type":553,"value":1072},"Set Padding 28\n",{"type":547,"tag":648,"props":1074,"children":1076},{"class":650,"line":1075},10,[1077],{"type":547,"tag":648,"props":1078,"children":1079},{},[1080],{"type":553,"value":1081},"Set Margin 24\n",{"type":547,"tag":648,"props":1083,"children":1085},{"class":650,"line":1084},11,[1086],{"type":547,"tag":648,"props":1087,"children":1088},{},[1089],{"type":553,"value":1090},"Set MarginFill \"#181825\"\n",{"type":547,"tag":648,"props":1092,"children":1094},{"class":650,"line":1093},12,[1095],{"type":547,"tag":648,"props":1096,"children":1097},{},[1098],{"type":553,"value":1099},"Set BorderRadius 12\n",{"type":547,"tag":648,"props":1101,"children":1103},{"class":650,"line":1102},13,[1104],{"type":547,"tag":648,"props":1105,"children":1106},{},[1107],{"type":553,"value":1108},"Set WindowBar Colorful\n",{"type":547,"tag":648,"props":1110,"children":1112},{"class":650,"line":1111},14,[1113],{"type":547,"tag":648,"props":1114,"children":1115},{},[1116],{"type":553,"value":1117},"Set CursorBlink false\n",{"type":547,"tag":648,"props":1119,"children":1121},{"class":650,"line":1120},15,[1122],{"type":547,"tag":648,"props":1123,"children":1124},{"emptyLinePlaceholder":537},[1125],{"type":553,"value":1009},{"type":547,"tag":648,"props":1127,"children":1129},{"class":650,"line":1128},16,[1130],{"type":547,"tag":648,"props":1131,"children":1132},{},[1133],{"type":553,"value":1134},"Type \"clear\"\n",{"type":547,"tag":648,"props":1136,"children":1138},{"class":650,"line":1137},17,[1139],{"type":547,"tag":648,"props":1140,"children":1141},{},[1142],{"type":553,"value":1143},"Enter\n",{"type":547,"tag":648,"props":1145,"children":1147},{"class":650,"line":1146},18,[1148],{"type":547,"tag":648,"props":1149,"children":1150},{},[1151],{"type":553,"value":1152},"Sleep 500ms\n",{"type":547,"tag":648,"props":1154,"children":1156},{"class":650,"line":1155},19,[1157],{"type":547,"tag":648,"props":1158,"children":1159},{"emptyLinePlaceholder":537},[1160],{"type":553,"value":1009},{"type":547,"tag":648,"props":1162,"children":1164},{"class":650,"line":1163},20,[1165],{"type":547,"tag":648,"props":1166,"children":1167},{},[1168],{"type":553,"value":1169},"Type \"echo '你好，VHS！Hello from the terminal.'\"\n",{"type":547,"tag":648,"props":1171,"children":1173},{"class":650,"line":1172},21,[1174],{"type":547,"tag":648,"props":1175,"children":1176},{},[1177],{"type":553,"value":1143},{"type":547,"tag":648,"props":1179,"children":1181},{"class":650,"line":1180},22,[1182],{"type":547,"tag":648,"props":1183,"children":1184},{},[1185],{"type":553,"value":1186},"Sleep 1s\n",{"type":547,"tag":648,"props":1188,"children":1190},{"class":650,"line":1189},23,[1191],{"type":547,"tag":648,"props":1192,"children":1193},{"emptyLinePlaceholder":537},[1194],{"type":553,"value":1009},{"type":547,"tag":648,"props":1196,"children":1198},{"class":650,"line":1197},24,[1199],{"type":547,"tag":648,"props":1200,"children":1201},{},[1202],{"type":553,"value":1203},"Type \"echo '環境檢查 \u002F Checking environment'\"\n",{"type":547,"tag":648,"props":1205,"children":1207},{"class":650,"line":1206},25,[1208],{"type":547,"tag":648,"props":1209,"children":1210},{},[1211],{"type":553,"value":1143},{"type":547,"tag":648,"props":1213,"children":1215},{"class":650,"line":1214},26,[1216],{"type":547,"tag":648,"props":1217,"children":1218},{},[1219],{"type":553,"value":1220},"Sleep 700ms\n",{"type":547,"tag":648,"props":1222,"children":1224},{"class":650,"line":1223},27,[1225],{"type":547,"tag":648,"props":1226,"children":1227},{"emptyLinePlaceholder":537},[1228],{"type":553,"value":1009},{"type":547,"tag":648,"props":1230,"children":1232},{"class":650,"line":1231},28,[1233],{"type":547,"tag":648,"props":1234,"children":1235},{},[1236],{"type":553,"value":1237},"Type \"echo '狀態正常 \u002F Status: OK'\"\n",{"type":547,"tag":648,"props":1239,"children":1241},{"class":650,"line":1240},29,[1242],{"type":547,"tag":648,"props":1243,"children":1244},{},[1245],{"type":553,"value":1143},{"type":547,"tag":648,"props":1247,"children":1249},{"class":650,"line":1248},30,[1250],{"type":547,"tag":648,"props":1251,"children":1252},{},[1253],{"type":553,"value":1220},{"type":547,"tag":648,"props":1255,"children":1257},{"class":650,"line":1256},31,[1258],{"type":547,"tag":648,"props":1259,"children":1260},{"emptyLinePlaceholder":537},[1261],{"type":553,"value":1009},{"type":547,"tag":648,"props":1263,"children":1265},{"class":650,"line":1264},32,[1266],{"type":547,"tag":648,"props":1267,"children":1268},{},[1269],{"type":553,"value":1270},"Type \"echo '產生影片 \u002F Rendering video'\"\n",{"type":547,"tag":648,"props":1272,"children":1274},{"class":650,"line":1273},33,[1275],{"type":547,"tag":648,"props":1276,"children":1277},{},[1278],{"type":553,"value":1143},{"type":547,"tag":648,"props":1280,"children":1282},{"class":650,"line":1281},34,[1283],{"type":547,"tag":648,"props":1284,"children":1285},{},[1286],{"type":553,"value":1220},{"type":547,"tag":648,"props":1288,"children":1290},{"class":650,"line":1289},35,[1291],{"type":547,"tag":648,"props":1292,"children":1293},{"emptyLinePlaceholder":537},[1294],{"type":553,"value":1009},{"type":547,"tag":648,"props":1296,"children":1298},{"class":650,"line":1297},36,[1299],{"type":547,"tag":648,"props":1300,"children":1301},{},[1302],{"type":553,"value":1303},"Type \"echo '輸出完成 \u002F Export: DONE'\"\n",{"type":547,"tag":648,"props":1305,"children":1307},{"class":650,"line":1306},37,[1308],{"type":547,"tag":648,"props":1309,"children":1310},{},[1311],{"type":553,"value":1143},{"type":547,"tag":648,"props":1313,"children":1315},{"class":650,"line":1314},38,[1316],{"type":547,"tag":648,"props":1317,"children":1318},{},[1319],{"type":553,"value":1220},{"type":547,"tag":648,"props":1321,"children":1323},{"class":650,"line":1322},39,[1324],{"type":547,"tag":648,"props":1325,"children":1326},{"emptyLinePlaceholder":537},[1327],{"type":553,"value":1009},{"type":547,"tag":648,"props":1329,"children":1331},{"class":650,"line":1330},40,[1332],{"type":547,"tag":648,"props":1333,"children":1334},{},[1335],{"type":553,"value":1336},"Type \"echo '完成！Demo is ready.'\"\n",{"type":547,"tag":648,"props":1338,"children":1340},{"class":650,"line":1339},41,[1341],{"type":547,"tag":648,"props":1342,"children":1343},{},[1344],{"type":553,"value":1143},{"type":547,"tag":648,"props":1346,"children":1348},{"class":650,"line":1347},42,[1349],{"type":547,"tag":648,"props":1350,"children":1351},{},[1352],{"type":553,"value":1353},"Sleep 3s\n",{"type":547,"tag":555,"props":1355,"children":1356},{},[1357,1362,1364,1369,1371,1376,1378,1383],{"type":547,"tag":575,"props":1358,"children":1360},{"className":1359},[],[1361],{"type":553,"value":935},{"type":553,"value":1363}," 負責固定畫面尺寸、字體、主題、輸入速度與外框；",{"type":547,"tag":575,"props":1365,"children":1367},{"className":1366},[],[1368],{"type":553,"value":942},{"type":553,"value":1370}," 模擬輸入；",{"type":547,"tag":575,"props":1372,"children":1374},{"className":1373},[],[1375],{"type":553,"value":949},{"type":553,"value":1377}," 送出指令；",{"type":547,"tag":575,"props":1379,"children":1381},{"className":1380},[],[1382],{"type":553,"value":956},{"type":553,"value":1384}," 留時間讓觀眾看清楚結果。這段 Demo 刻意混用中文和英文，也能直接照腳本輸入及顯示。",{"type":547,"tag":555,"props":1386,"children":1387},{},[1388,1390,1395],{"type":553,"value":1389},"我安裝的 v0.11.0 範例語法只列出 GIF、MP4 與 WebM 輸出，所以這篇的靜態圖是直接從完成的 MP4 擷取。VHS 本來就需要 ",{"type":547,"tag":575,"props":1391,"children":1393},{"className":1392},[],[1394],{"type":553,"value":688},{"type":553,"value":1396},"，不必再多裝一套截圖工具：",{"type":547,"tag":638,"props":1398,"children":1400},{"className":640,"code":1399,"language":642,"meta":530,"style":530},"ffmpeg -ss 16.4 -i vhs-demo.mp4 -frames:v 1 vhs-demo.png\n",[1401],{"type":547,"tag":575,"props":1402,"children":1403},{"__ignoreMap":530},[1404],{"type":547,"tag":648,"props":1405,"children":1406},{"class":650,"line":651},[1407,1411,1416,1421,1426,1431,1436,1441],{"type":547,"tag":648,"props":1408,"children":1409},{"style":655},[1410],{"type":553,"value":688},{"type":547,"tag":648,"props":1412,"children":1413},{"style":748},[1414],{"type":553,"value":1415}," -ss",{"type":547,"tag":648,"props":1417,"children":1418},{"style":748},[1419],{"type":553,"value":1420}," 16.4",{"type":547,"tag":648,"props":1422,"children":1423},{"style":748},[1424],{"type":553,"value":1425}," -i",{"type":547,"tag":648,"props":1427,"children":1428},{"style":661},[1429],{"type":553,"value":1430}," vhs-demo.mp4",{"type":547,"tag":648,"props":1432,"children":1433},{"style":748},[1434],{"type":553,"value":1435}," -frames:v",{"type":547,"tag":648,"props":1437,"children":1438},{"style":748},[1439],{"type":553,"value":1440}," 1",{"type":547,"tag":648,"props":1442,"children":1443},{"style":661},[1444],{"type":553,"value":1445}," vhs-demo.png\n",{"type":547,"tag":1447,"props":1448,"children":1457},"div",{"className":1449},[1450,1451,1452,1453,1454,1455,1456],"my-8","rounded-xl","overflow-hidden","shadow-2xl","border","border-slate-200","dark:border-slate-800",[1458,1460,1469,1470],{"type":553,"value":1459},"\n  ",{"type":547,"tag":1461,"props":1462,"children":1468},"img",{"src":1463,"alt":1464,"className":1465},"\u002Fday_assets\u002Fvhs\u002Fvhs-demo.png","VHS 依照 Tape 腳本產生的中英夾雜終端機 Demo，顯示環境檢查與影片產生結果",[1466,1467],"w-full","h-auto",[],{"type":553,"value":1459},{"type":547,"tag":555,"props":1471,"children":1479},{"className":1472},[1473,1474,1475,1476,1477,1478],"text-center","text-sm","text-slate-500","py-2","bg-slate-50","dark:bg-slate-900\u002F50",[1480],{"type":553,"value":1481},"這張 PNG 擷取自上方的中英夾雜 VHS Demo",{"type":547,"tag":548,"props":1483,"children":1485},{"id":1484},"一個指令重新產生整段-demo",[1486],{"type":553,"value":1487},"一個指令重新產生整段 Demo",{"type":547,"tag":555,"props":1489,"children":1490},{},[1491,1493,1498],{"type":553,"value":1492},"把終端機切到 ",{"type":547,"tag":575,"props":1494,"children":1496},{"className":1495},[],[1497],{"type":553,"value":580},{"type":553,"value":1499}," 所在目錄後執行：",{"type":547,"tag":638,"props":1501,"children":1503},{"className":640,"code":1502,"language":642,"meta":530,"style":530},"vhs vhs-demo.tape\n",[1504],{"type":547,"tag":575,"props":1505,"children":1506},{"__ignoreMap":530},[1507],{"type":547,"tag":648,"props":1508,"children":1509},{"class":650,"line":651},[1510,1514],{"type":547,"tag":648,"props":1511,"children":1512},{"style":655},[1513],{"type":553,"value":745},{"type":547,"tag":648,"props":1515,"children":1516},{"style":661},[1517],{"type":553,"value":1518}," vhs-demo.tape\n",{"type":547,"tag":555,"props":1520,"children":1521},{},[1522,1524,1529,1531,1536],{"type":553,"value":1523},"VHS 會開啟虛擬終端機，照順序執行所有動作，再把結果寫到 ",{"type":547,"tag":575,"props":1525,"children":1527},{"className":1526},[],[1528],{"type":553,"value":927},{"type":553,"value":1530}," 指定的位置。同一份 Tape 可以同時放多個 ",{"type":547,"tag":575,"props":1532,"children":1534},{"className":1533},[],[1535],{"type":553,"value":927},{"type":553,"value":1537},"，官方支援 GIF、MP4、WebM，也能把每一幀輸出成 PNG 序列。",{"type":547,"tag":555,"props":1539,"children":1540},{},[1541,1543,1548,1550,1555],{"type":553,"value":1542},"如果不想從空白檔開始，可以先跑 ",{"type":547,"tag":575,"props":1544,"children":1546},{"className":1545},[],[1547],{"type":553,"value":818},{"type":553,"value":1549}," 產生範例。也可以用 ",{"type":547,"tag":575,"props":1551,"children":1553},{"className":1552},[],[1554],{"type":553,"value":835},{"type":553,"value":1556}," 錄下真人在終端機裡的操作，再回頭整理自動產生的 Tape。",{"type":547,"tag":548,"props":1558,"children":1560},{"id":1559},"它比螢幕錄影好在哪裡",[1561],{"type":553,"value":1562},"它比螢幕錄影好在哪裡？",{"type":547,"tag":555,"props":1564,"children":1565},{},[1566],{"type":553,"value":1567},"VHS 最適合會反覆變動的 CLI Demo。README 換了指令、輸出文字改了、視窗尺寸要重做，只要修改 Tape 再執行一次。錄影設定跟著專案一起版本控制，其他人也能在相同環境重新產生結果。",{"type":547,"tag":555,"props":1569,"children":1570},{},[1571,1573,1578],{"type":553,"value":1572},"它也很適合放進自動化流程。例如 CLI 發佈新版後重跑 Tape，讓文件裡的 Demo 跟著更新。",{"type":547,"tag":575,"props":1574,"children":1576},{"className":1575},[],[1577],{"type":553,"value":963},{"type":553,"value":1579}," 還能等特定文字出現在畫面上，比固定睡幾秒更適合處理完成時間不穩定的指令。",{"type":547,"tag":555,"props":1581,"children":1582},{},[1583],{"type":553,"value":1584},"不過 VHS 不會讓所有錄影自動變得完全一致。Tape 呼叫的程式版本、網路回應、字型和作業系統不同，畫面仍可能有差異；需要帳號、密碼或 API key 的操作也不該直接寫進腳本。我的做法是讓 Demo 只依賴可公開、可重現的指令，敏感設定全部留在錄影之外。",{"type":547,"tag":548,"props":1586,"children":1588},{"id":1587},"我之後會直接拿它錄-cli-教學",[1589],{"type":553,"value":1590},"我之後會直接拿它錄 CLI 教學",{"type":547,"tag":555,"props":1592,"children":1593},{},[1594],{"type":553,"value":1595},"這次最有感的不是它能替終端機加漂亮主題，而是錄影本身變成一個可以修改的文字檔。662 bytes 的 Tape 產生完整影片，再用一行 ffmpeg 指令抓出靜態圖；文章要重錄時只需要重新跑這兩個指令。",{"type":547,"tag":555,"props":1597,"children":1598},{},[1599],{"type":553,"value":1600},"一般 App 操作我還是會用螢幕錄影；但只要內容發生在終端機裡，我之後會先寫 Tape。至少不必再因為最後一行打錯字，把前面十幾秒全部重錄一次。",{"type":547,"tag":1602,"props":1603,"children":1604},"style",{},[1605],{"type":553,"value":1606},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":530,"searchDepth":1003,"depth":1003,"links":1608},[1609,1610,1611,1612,1613,1614,1615],{"id":550,"depth":1003,"text":550},{"id":628,"depth":1003,"text":631},{"id":754,"depth":1003,"text":754},{"id":976,"depth":1003,"text":979},{"id":1484,"depth":1003,"text":1487},{"id":1559,"depth":1003,"text":1562},{"id":1587,"depth":1003,"text":1590},"markdown","content:articles:vhs.md","content","articles\u002Fvhs.md","articles\u002Fvhs","md",[1623,1626,1629],{"_path":128,"title":129,"description":130,"date":1624,"category":8,"tags":1625,"score":1021},"2026-07-17",[64,10,14,13,11],{"_path":32,"title":33,"description":34,"date":1627,"category":8,"tags":1628,"score":1012},"2026-08-10",[30,10,11,14,36],{"_path":38,"title":39,"description":40,"date":1630,"category":8,"tags":1631,"score":1012},"2026-08-07",[10,11,42,14],[1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728],{"_path":5,"title":6},{"_path":16,"title":17},{"_path":22,"title":23},{"_path":32,"title":33},{"_path":38,"title":39},{"_path":44,"title":45},{"_path":49,"title":50},{"_path":55,"title":56},{"_path":60,"title":61},{"_path":66,"title":67},{"_path":75,"title":76},{"_path":80,"title":81},{"_path":85,"title":86},{"_path":90,"title":91},{"_path":97,"title":98},{"_path":102,"title":103},{"_path":107,"title":108},{"_path":113,"title":114},{"_path":118,"title":119},{"_path":123,"title":124},{"_path":128,"title":129},{"_path":133,"title":134},{"_path":138,"title":139},{"_path":143,"title":144},{"_path":148,"title":149},{"_path":153,"title":154},{"_path":158,"title":159},{"_path":163,"title":164},{"_path":168,"title":169},{"_path":173,"title":174},{"_path":178,"title":179},{"_path":183,"title":184},{"_path":188,"title":189},{"_path":193,"title":194},{"_path":198,"title":199},{"_path":203,"title":204},{"_path":208,"title":209},{"_path":213,"title":214},{"_path":218,"title":219},{"_path":223,"title":224},{"_path":229,"title":230},{"_path":235,"title":236},{"_path":240,"title":241},{"_path":245,"title":246},{"_path":250,"title":251},{"_path":255,"title":256},{"_path":260,"title":261},{"_path":265,"title":266},{"_path":270,"title":271},{"_path":275,"title":276},{"_path":280,"title":281},{"_path":285,"title":286},{"_path":290,"title":291},{"_path":296,"title":297},{"_path":301,"title":302},{"_path":306,"title":307},{"_path":312,"title":313},{"_path":322,"title":323},{"_path":327,"title":328},{"_path":332,"title":333},{"_path":338,"title":339},{"_path":343,"title":344},{"_path":348,"title":349},{"_path":356,"title":357},{"_path":363,"title":364},{"_path":369,"title":370},{"_path":375,"title":376},{"_path":380,"title":381},{"_path":385,"title":386},{"_path":391,"title":392},{"_path":396,"title":397},{"_path":401,"title":402},{"_path":406,"title":407},{"_path":411,"title":412},{"_path":416,"title":417},{"_path":421,"title":422},{"_path":426,"title":427},{"_path":431,"title":432},{"_path":436,"title":437},{"_path":441,"title":442},{"_path":446,"title":447},{"_path":451,"title":452},{"_path":456,"title":457},{"_path":461,"title":462},{"_path":466,"title":467},{"_path":471,"title":472},{"_path":476,"title":477},{"_path":481,"title":482},{"_path":486,"title":487},{"_path":491,"title":492},{"_path":496,"title":497},{"_path":503,"title":504},{"_path":508,"title":509},{"_path":513,"title":514},{"_path":518,"title":519},{"_path":523,"title":524},1786604820727]