Skip to content
youllookPublic

About

本機影片庫縮圖牆:丟一個根資料夾,跨硬碟所有影片攤成一面牆,滑鼠掃過即可快轉預覽。標籤、收藏、播放次數,搬檔案標籤不掉。完全離線、不動原檔|Local video library browser for Windows: thumbnail wall of every video across drives, hover-to-scrub preview, tags & favourites that survive file moves. Fully offline. Electron + SQLite + ffmpeg

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

VedioView · 本機影片庫縮圖牆

幾千部影片散在好幾顆硬碟、埋在好幾層資料夾裡,檔案總管只給你看檔名,你想看到它們。 丟一個最上層資料夾進去,整座影片庫攤成一面縮圖牆;滑鼠掃過任何一張,不用開檔就能快轉看完整部片。 全程本機、不上傳任何東西、原始影片檔一個位元組都不動。

English | 60 秒上手 | 為什麼不用其他工具 | 功能 | 操作 | 資料存放 | 隱私

VedioView:左側資料夾樹與標籤,右側整座影片庫的縮圖牆,滑鼠懸停時顯示快轉預覽

60 秒上手

方法一:免安裝版(推薦)

  1. 到 Releases 下載 VedioView.exe,放到任何地方,雙擊。
  2. 左側「資料夾 +」→ 選你的影片資料夾(選最上層那一個就好)→ 自動開始索引。

方法二:從原始碼跑

npm install
npm start          # 或雙擊「啟動 VedioView.bat」

唯一的前置需求:ffmpeg 與 ffprobe 要在系統 PATH 上(讀影片資訊、產縮圖都靠它們)。 沒有的話程式一開就會告訴你,不會默默給你一整面空白卡片。

winget install Gyan.FFmpeg

或到 gyan.dev 抓 release build 解壓,把 bin\ 加進 PATH。

為什麼不用其他工具

你可能會想用 為什麼 VedioView 不一樣
檔案總管 / Finder 的縮圖檢視 一次只看一個資料夾、跨硬碟沒得搜、沒有標籤收藏、縮圖是靜態的。VedioView 把所有硬碟、所有深度的影片攤在同一面牆上,滑過去就是動態預覽。
Plex / Jellyfin 那是媒體伺服器:要架服務、會轉碼、會上網抓海報和劇情,把你的檔案重新命名歸類——你只是想看自己硬碟裡有什麼。VedioView 沒有伺服器、沒有轉碼、不抓任何 metadata,只看你的檔案。
雲端相簿 / 影片 App 先上傳再說。VedioView 沒有網路功能,程式碼裡連一個 HTTP 端點都沒有。

一個免安裝 exe、一個 SQLite 檔案,就這樣。

功能,與它們怎麼做到的

  • 三階段索引,過程中畫面照常能用。 掃描(走訪資料夾找影片檔,很快)→ 讀取資訊(ffprobe 抓時長、解析度、編碼)→ 產生縮圖(ffmpeg 在片長 20% 處抽一張封面)。三階段各自批次寫入,SQLite 走 WAL 模式,背景在跑 ffmpeg 時你可以照樣捲動、搜尋、貼標籤。縮圖進快取,第二次開啟就是秒開。
  • 懸停快轉預覽。 第一次把滑鼠停在某張卡片上,程式才用 ffmpeg 從整部片均勻抽 20 格(略過開頭 2% 與結尾 2% 的片頭片尾),拼成一張 5×4 的精靈圖;之後滑鼠左右移動就是在這 20 格之間切換,零延遲。掃過網格不會觸發,要停 0.2 秒才算你想看。
  • 增量更新。 之後檔案有增減再按一次「建立 / 更新索引」,只處理新的或有變動(大小或修改時間不同)的檔案。
  • 搬檔案、改檔名,標籤收藏跟著走。 影片的身分是路徑,搬走後照理會變成「一個消失+一個新檔」。程式用**檔案大小 + 修改時間(到毫秒)**把兩者配對,自動把標籤、收藏、評分、播放次數接到新路徑上。只有兩邊都唯一才配對;兩個大小時間完全相同的檔案同時搬動就不猜,當新檔案處理。
  • 檔名搜尋、多關鍵字 AND。 空格分隔,每個字都要出現才算符合(最多 8 個)。可以和資料夾、標籤、收藏疊著用。
  • 標籤、收藏、五星評分、播放次數。 選多個標籤時要全部符合才顯示。透過本程式播放會自動 +1,達 5 次卡片上的計數變成藍色,用「排序 → 播放次數」就能找出常看的片。
  • 資料夾樹帶遞迴總數。 左側依實際結構長出樹,數字是含所有子資料夾的總數;點父層=底下所有層一起看。
  • 資料位置可搬、可隨身。 左下角點一下就能把資料庫與縮圖搬到別顆硬碟;搬移是「先完整複製、逐檔驗證大小、確認無誤才刪來源」,中途斷電不會弄丟資料庫。exe 旁放一個 VedioView.portable 空檔就是隨身模式。
  • 渲染程序碰不到你的檔案系統。 nodeIntegration 關閉、contextIsolation 開啟、CSP default-src 'none';縮圖透過自訂的 vv:// 協定、以資料庫 id 取用,前端從頭到尾拿不到任何路徑以外的東西。

第一次使用

  1. 左側「資料夾 +」→ 選擇你的影片資料夾(可多選)
  2. 選好後會自動開始索引;也可手動按「建立 / 更新索引」
  3. 索引三階段跑的時候畫面就能用,狀態列會顯示進度
  4. 之後檔案有增減,再按一次「建立 / 更新索引」即可

掃描時會略過符號連結的資料夾(避免繞圈)、$ 開頭的系統資料夾、以及小於 64KB 的檔案(通常是壞檔或佔位檔)。 ffmpeg 同時跑的數量是 CPU 核心數的一半(最少 2、最多 6),不會把機器吃滿。

操作

動作 方式
動態預覽 滑鼠移到縮圖上,左右移動即可快轉瀏覽整部片(20 個畫面)
播放 雙擊卡片,或選取後按 Enter(用系統預設播放器開啟)
收藏 縮圖右上角 ☆
詳細資訊 單擊卡片,右側抽屜顯示時長、解析度、編碼、大小、播放紀錄,並可評分、貼標籤
搜尋檔名 上方搜尋框,或 Ctrl+F;空格分隔可多關鍵字(需全部符合)
切到某個子資料夾 左側資料夾樹點該層;再點一次取消
篩選 左側「全部 / ★ 收藏 / 未標籤」,再疊上任意標籤
排序 檔名、修改日期、大小、時長、播放次數、加入時間
標籤 左側「標籤 +」新增,再從右側抽屜點選套用
右鍵選單 播放 / 開啟所在資料夾 / 收藏 / 複製路徑 / 播放次數 +1
縮圖大小 上方「縮圖」滑桿(160–460px)
重新整理 F5;Esc 關閉抽屜或選單

資料夾結構與總覽

指定資料夾時,選「最上層」那一個就好,底下所有子資料夾會自動遞迴掃描,深度不限。 例如指定 D:\影片,那 D:\影片\電影\2024\xxx.mp4 也會被找到。

大資料夾底下很多小資料夾正是預設情境:加一個最上層根目錄,右邊就是全部影片的總覽,不管埋多深都會攤平在同一個網格裡。

左側會依實際結構長出資料夾樹:

影片庫            [9]     ← 點這裡 = 總覽,全部 9 部
  ▸ 紀錄片        [2]
  ▾ 電影          [3]     ← 點父層 = 底下所有子資料夾一起看
      2023        [2]
      2024        [1]
  ▸ 影集          [3]
  • 數字是含子資料夾的總數,一眼看出哪一區片最多
  • 點 ▸ 箭頭只展開/收合,不會切換畫面
  • 點資料夾名稱才會篩選;再點一次同一個就取消,回到總覽
  • 可搭配搜尋、標籤、收藏一起用(例如:只在「電影」裡搜「沙丘」)

想分開管理(不同硬碟、或電影影集各一區)就加多個根目錄;想一次看全部就只加最上層一個。

搬動檔案之後

重新按一次「建立 / 更新索引」,程式會用「檔案大小 + 修改時間」自動辨識搬走的檔案:

情況 結果
資料夾內搬動、重新命名 標籤、收藏、評分、播放次數全部保留
整個影片庫搬到別的硬碟 全部保留(記得把新位置加為資料夾)
檔案內容有變動(重新編碼等) 標籤收藏保留,縮圖自動重新產生
檔案真的刪掉了 從清單消失,但紀錄留著——放回原位就整個復原
兩個大小與時間完全相同的檔案同時搬動 不猜測,當成新檔案(避免張冠李戴)

搬動後縮圖需要重新產生(快取以路徑雜湊命名),但你的標籤和收藏不會掉。

資料存放(SQLite 實體位置)

索引資料庫與縮圖快取預設在使用者目錄,不會動到你的影片檔案,也不會寫進 exe 旁邊:

%APPDATA%\VedioView\
  library.db            ← SQLite 主檔:索引、標籤、收藏、評分、播放次數
  library.db-wal        ← WAL 交易日誌(正常現象,關閉程式後會併回主檔)
  library.db-shm        ← WAL 共享記憶體索引
  media-cache\thumbs\     封面縮圖(依路徑雜湊分兩層子目錄存放)
  media-cache\sprites\    懸停預覽用的 5×4 精靈圖
  location.json         ← 只有把資料搬到別處時才會出現,記錄新位置
  cache\ 及其餘資料夾      Electron/Chromium 自己的快取,可忽略

換到其他磁碟(C 槽空間不足時)

左下角會顯示目前的存放位置,點它 → 選:

選項 說明
放在 exe 同資料夾 資料存到 VedioView.exe 旁邊的 VedioView-Data\,整包可隨身攜帶
指定其他資料夾… 自己挑,例如 D:\ 或 E:\
回到預設位置 搬回 %APPDATA%\VedioView

選好後會自動把現有資料庫與縮圖搬過去,然後重新啟動。搬移採「先完整複製、逐檔驗證大小、確認無誤才刪除來源」,只刪除確實複製成功的檔案,中途中斷不會弄丟資料庫。影片檔案本身不會被移動。

另外兩種進階指定方式(優先權由高到低):

  • 環境變數:設 VEDIOVIEW_DATA=D:\我的位置,優先權最高(適合臨時測試)。
  • 免安裝隨身模式:在 VedioView.exe 旁邊放一個空檔案叫 VedioView.portable,資料就會固定存在 exe 旁的 VedioView-Data\。

指定的位置若不存在或無法寫入(例如外接硬碟沒插),程式會自動退回預設位置啟動,左下角會標示「指定位置無法使用」,不會開不起來。

重點特性:

  • 免安裝版與開發版共用同一個資料庫。exe 搬到別的資料夾、甚至別的磁碟,索引與標籤都還在。
  • 資料庫採 WAL 模式,讀寫互不阻塞——背景在產縮圖時,畫面照樣能捲動搜尋。
  • 幾千部影片的 library.db 大約數 MB;縮圖快取才是大宗,每部約 10–100KB。
  • 想備份「標籤與收藏」只需複製 library.db(連同 -wal 一起複製最保險,或先關閉程式讓它併回)。
  • 移除資料夾只是從索引移除,不會刪除任何影片。
  • 想完全重來:關掉程式後刪除整個 VedioView 資料夾即可,影片本身不受影響。

隱私

完全離線。沒有遙測、沒有帳號、沒有更新檢查、沒有任何網路請求——程式碼裡唯一一個 net.fetch 是拿來讀本機 file:// 路徑的縮圖。 對你的影片檔只做三件事:列目錄、ffprobe 讀資訊、ffmpeg 抽畫面;從不寫入、改名、搬動。播放是交給系統預設播放器。

支援格式

mp4, mkv, avi, mov, wmv, flv, webm, m4v, mpg, mpeg, ts, m2ts, mts, vob, rmvb, rm, 3gp, ogv, divx, asf, f4v, mxf

小於 64KB 的檔案會略過。

已知限制

  • 打包與路徑處理以 Windows 為主;原始碼在其他平台大致能跑,但沒有測過。
  • 搜尋只看檔名,不看影片內容或 metadata。
  • 沒有內建播放器,雙擊是交給系統預設程式。
  • 縮圖快取以路徑命名,檔案搬動後縮圖會重新產生一次(標籤收藏不受影響)。
  • 短於 5 秒的影片不產生懸停預覽。

重新打包 exe

npm run dist

產出 dist\VedioView.exe(單一檔案,免安裝)。中間產物在 dist-pkg\ 與 dist\win-unpacked\,可安心刪除。

若打包時卡在 Cannot create symbolic link ... libcrypto.dylib:那是 electron-builder 解壓簽章工具的已知問題(Windows 建立符號連結需要系統管理員或開發者模式)。本專案的 dist 腳本已改用 electron-packager 先打包、再交給 electron-builder 收成單檔,繞開該步驟。

圖示由 assets/make_icon.py 用 Pillow 程式化繪製,改完重跑一次就會重生 vedioview.png / vedioview.ico。

檔案

src/main/main.js      Electron 主程序:視窗、IPC、索引流程、vv:// 協定
src/main/db.js        SQLite(better-sqlite3):schema、查詢、搬檔重連
src/main/media.js     掃描、ffprobe、縮圖與精靈圖產生、worker pool
src/main/storage.js   資料位置解析(env → portable → 指標檔 → 預設)與搬移
src/main/preload.js   contextBridge,渲染端唯一的 API 面
src/renderer/         單頁 UI(無框架):網格、懸停快轉、資料夾樹、抽屜
assets/make_icon.py   圖示產生器(Pillow)
啟動 VedioView.bat     開發模式啟動器

關於名字

是的,VedioView 少了一個字母。第一版打錯了,用著用著就成了它的名字。


English

VedioView is a local video-library browser for Windows. Thousands of videos across several drives and deep folder trees, and Explorer only shows you file names? Point VedioView at one top-level folder and get a thumbnail wall of everything underneath it, however deep. Hover any card and drag across it to scrub through the whole video without opening it. Fully local: nothing is uploaded, and your original files are never modified.

Electron 33 + better-sqlite3 + ffmpeg. One portable exe, one SQLite file.

Start in 60 seconds

Download VedioView.exe from Releases and double-click it, or:

npm install
npm start

The one prerequisite: ffmpeg and ffprobe on your PATH (winget install Gyan.FFmpeg, or grab a build from gyan.dev). The app tells you on startup if they are missing.

Then click "資料夾 +" in the sidebar, pick your top-level video folder, and indexing starts on its own.

Why this instead of…

  • Explorer / Finder thumbnails show one folder at a time, cannot search across drives, have no tags, and the thumbnails are static. VedioView flattens every drive and every depth into one wall, and the thumbnails scrub.
  • Plex / Jellyfin are media servers: a service to run, transcoding, metadata scraping and renaming you did not ask for. VedioView has no server, no transcoding, no scraping. It only looks at your files.
  • Cloud photo/video apps start by uploading. VedioView has no network code at all.

Features

  • Three-stage indexing while the UI stays usable. Scan (walk folders) → probe (ffprobe for duration, resolution, codec) → thumbnails (ffmpeg, one poster frame at 20% in). Batched writes, SQLite in WAL mode, so you can scroll, search and tag while ffmpeg works in the background. Thumbnails are cached; the second launch is instant.
  • Hover-scrub preview. On first hover (after a 220 ms dwell, so sweeping the grid does not queue jobs) the app samples 20 frames evenly between 2% and 98% of the runtime into a 5×4 sprite sheet. Moving the mouse across the card then switches frames with no further decoding.
  • Incremental updates. Re-index only touches files that are new or whose size/mtime changed.
  • Moved or renamed files keep their tags. A moved file would otherwise scan in as new. VedioView pairs the "missing" row with the "new" row by size + mtime and transfers tags, favourites, rating and play count. Only unambiguous one-to-one matches are relinked; identical twins are treated as new files rather than guessed at.
  • Filename search with AND keywords (space-separated, all must match, up to 8), stackable with folder, tag and favourite filters.
  • Tags, favourites, 1–5 star ratings, play counts. Multi-tag filters require every selected tag. Playing through the app bumps the count; sort by plays to find what you actually watch.
  • Folder tree with recursive counts. Click a parent to see its whole subtree.
  • Relocatable data, portable mode. Move the database and cache to another drive from the status bar; the move is copy → verify each file's size → delete source, so an interrupted move cannot lose the library. Drop an empty VedioView.portable file beside the exe for portable mode, or set VEDIOVIEW_DATA to override everything.
  • Renderer sandboxed from your filesystem. nodeIntegration off, contextIsolation on, CSP default-src 'none'; thumbnails are served through a custom vv:// scheme addressed by database id.

Controls

Action How
Scrub preview Hover a thumbnail and move the mouse left/right (20 frames)
Play Double-click, or select and press Enter (opens in your default player)
Favourite ☆ in the thumbnail corner
Details / rating / tags Single-click a card; the right-hand drawer opens
Search Top search box or Ctrl+F; space-separated terms must all match
Filter by folder Click a folder in the tree; click again to clear
Sort Name, modified date, size, duration, play count, date added
Context menu Play / Reveal in folder / Favourite / Copy path / Play count +1
Thumbnail size Slider in the toolbar (160–460 px)
Refresh / close F5 / Esc

Data & privacy

Data lives in %APPDATA%\VedioView\ by default: library.db (SQLite, WAL) plus media-cache\ for thumbnails and sprite sheets. Move it from the status bar, or use VedioView.portable / VEDIOVIEW_DATA as described above. If the chosen location is unavailable (unplugged drive), the app falls back to the default and says so.

Fully offline. No telemetry, no account, no update check, no network requests; the only net.fetch in the codebase reads local file:// paths. Your video files are only ever read (directory listing, ffprobe, ffmpeg frame extraction), never written, renamed or moved. Removing a folder from the library removes index rows, not files.

Supported: mp4, mkv, avi, mov, wmv, flv, webm, m4v, mpg, mpeg, ts, m2ts, mts, vob, rmvb, rm, 3gp, ogv, divx, asf, f4v, mxf. Files under 64 KB are skipped.

Limitations

Windows-first (portable exe, path handling); the source may run elsewhere but is untested. Search is filename-only. No built-in player. Thumbnail cache is keyed by path, so moved files re-render thumbnails once (tags and favourites are unaffected). Videos shorter than 5 s get no scrub preview.

Building

npm run dist produces a single portable dist\VedioView.exe (electron-packager first, then electron-builder, to avoid the symlink issue on Windows). The icon is drawn programmatically by assets/make_icon.py (Pillow).

Yes, the name is missing a letter. The typo was in the first build and it stuck.


Built by Chin-Yuan Lu — I build the layer that makes the hard part disappear. MIT License.

About

本機影片庫縮圖牆:丟一個根資料夾,跨硬碟所有影片攤成一面牆,滑鼠掃過即可快轉預覽。標籤、收藏、播放次數,搬檔案標籤不掉。完全離線、不動原檔|Local video library browser for Windows: thumbnail wall of every video across drives, hover-to-scrub preview, tags & favourites that survive file moves. Fully offline. Electron + SQLite + ffmpeg

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages