# Similar Photo Finder

> 在瀏覽器裡找出相似照片並刪掉多的：連拍、縮小過的複本、LINE 傳過的壓縮版、重存的截圖，用感知雜湊加 AI 模型自動分組，每組建議留哪張。照片不上傳。

- URL: https://bytescope.dev/zh-Hant/similar-photos/
- Locale: zh-Hant · Also: [en](https://bytescope.dev/en/similar-photos.md) · [ja](https://bytescope.dev/ja/similar-photos.md)
- Runs: 照片都在這個分頁的背景工作裡解碼，不會送到任何地方。唯一會下載的是 24 MB 的比對模型，下載一次就留在瀏覽器裡。
- Requires: Full mode needs Chrome, Edge or Opera on desktop (File System Access API) to read a folder and write results next to it. Firefox and Safari get a reduced mode: pick the folder through a file input and download the results.
- Updated: 2026-09-08

## What it does

手機倒出來三千張照片，有一大半其實是同一個瞬間：按著快門不放的連拍、裁一下又存一次的那張、LINE 傳過被壓縮的版本、截圖的截圖。重複檔案掃描幫不上忙，因為這些檔案沒有一個是 byte 對 byte 一樣的。這一頁是在瀏覽器裡跑的相似照片清理工具：選一個資料夾，它把看起來很像的照片分成一組組，每組建議一張值得留的，其他搬進 `_similar/` 資料夾——你堅持的話，也可以直接刪。什麼都不會上傳：照片在分頁裡的 worker 解碼，拿來比對的模型只下載一次，之後留在瀏覽器裡。

### 「相似」有兩種意思

每張照片同時過兩關。第一關是 64 位元的感知雜湊，它只擅長一件事：照片被縮小、被重新壓縮之後，還認得出是同一張，所以原檔和通訊軟體縮小過的那份會進同一組。但它撐不過裁切。第二關是 Meta 的 DINOv2-small 模型（Apache-2.0）算出來的影像特徵向量，要下載一次 24 MB，之後就快取起來。裁過的、連拍的每一張、幾乎同一個位置拍的同一個場景，都是靠這一關抓出來。兩關的門檻都是滑桿可以調；向量比對只在你選的時間窗內（預設 5 分鐘）拍的照片之間進行，所以去年的海邊不會跟今年的海邊配成一對，沒有拍攝時間的照片則不受時間窗限制照樣比。把「也找相似的連拍」取消勾選，就只跑雜湊，快很多，也不用下載。模型下載失敗的話，頁面會自己退回只跑雜湊，並且告訴你原因。

### 留哪一張

每一組列出縮圖、拍攝時間、畫素尺寸、檔案大小和清晰度分數，並且標出一張建議保留：畫素最多的優先，再比清晰度，再比檔案大小，理由就寫在縮圖下面。清晰度算的是 Laplacian 濾鏡的變異數，也就是邊緣對比有多強，所以它分得出對到焦和手震的差別，但完全不懂誰閉了眼、誰表情不好。每張照片都能自己切換保留或移走；唯一的規則是每組至少留一張，會把整組清空的選法會被拒絕，而不是默默幫你少刪幾張。一般筆電上千張照片第一次要跑個幾分鐘；同一個資料夾再開一次，會直接用存好的結果，快很多。

### 預設是搬走，刪除要你說了算

預設的動作不是刪除。被你移走的照片會搬進所選資料夾最上層的 `_similar/`，子資料夾結構照舊，下一次掃描會跳過那裡，所以同一組不會再被配成一對。改選刪除的話，File System Access API 會把檔案直接移除：不進資源回收筒，這個工具也沒有復原。兩種動作在動手前都會列出完整清單等你確認。幾件要老實說的事：「相似」是模型的看法，同一面白牆拍的兩張可能被分在一組，所以確認前請把每一組都看過。`HEIC` 照片比得了，但這裡讀不到它的拍攝時間。還有，選資料夾、搬移、刪除都需要桌面版 Chromium 系瀏覽器；其他瀏覽器和手機上，你可以把照片拖進來、看分組、標記要移走的，再把清單匯出成 `CSV`，但檔案本身不會被動到。

## Limits

Does not group photos by who is in them, does not detect closed eyes, does not tidy cloud albums like Google Photos or iCloud, and does not upload photos.

## FAQ

### 我的照片會被上傳嗎？

不會。每張照片都在你瀏覽器分頁裡的 worker 解碼，雜湊、清晰度分數、特徵向量也都在那裡算；比對和分組同樣在本機。唯一的網路傳輸是那個 24 MB 的模型，從固定網址抓一次，存進瀏覽器快取，沒有任何一個請求帶著你的照片。這一頁是背後沒有伺服器的靜態檔案。

### 這跟重複檔案掃描有什麼不一樣？

重複檔案掃描只回報 byte 完全一樣的檔案，其他一概不管，所以照著機械化處理很安全。這一頁管的是那個工具刻意不管的全部：同一張照片的兩種尺寸、原檔和重新壓縮過的複本、裁過的版本、連拍的十一張。因為「相似」是判斷不是事實，這裡的預設更保守：照片是搬走而不是刪掉，而且會請你先把每一組看過。只想找完全相同的檔案，請直接用重複檔案掃描。

### 為什麼兩張不一樣的照片被分在同一組？

因為在模型眼裡它們長得像。特徵向量描述的是照片裡有什麼，同一面素色牆、同一片天空、同一塊磁磚地板拍的兩張，有時會比真正連拍的兩張還接近。隨手拍的旅遊照很容易分得開，幾乎空無一物的畫面就不一定了。覺得某個資料夾被分得太寬鬆，可以調門檻滑桿，但真正的保險是檢視那一步：不管搬移還是刪除，確認前把每一組都看過。

### 它挑得出連拍裡最好的一張嗎？

它挑得出最清楚、最大的那張，而且會說理由。建議保留的順序是先比畫素尺寸，再比以 Laplacian 濾鏡變異數算出的清晰度分數，再比檔案大小。這個分數分得出對焦清楚和糊掉的差別，但它看的只有邊緣對比：誰眨了眼、有沒有笑、是不是看向別處，它一點都不知道。把建議當起點就好，你的眼睛不同意就改掉。

### 被移走的照片去了哪裡？能復原嗎？

預設會搬進所選資料夾最上層的 `_similar/`，子資料夾結構保留，所以要復原就是搬回去。如果你切成刪除，File System Access API 會把檔案直接移除：不進資源回收筒也不進垃圾桶，這個工具和作業系統都沒有復原可按。確認畫面會把每個檔案列出來，再提醒你一次。兩種動作都不會把一組清空：每組一定至少留一張在原位。

### 掃一次要多久？那 24 MB 是在下載什麼？

下載的是 Meta 的 DINOv2-small 影像模型（Apache-2.0），用來比對雜湊認不出來的照片，像是裁過的和連拍的每一張。只抓一次，核對過大小和摘要才存進瀏覽器快取。開著它的話，一般筆電上千張照片第一次要跑個幾分鐘；結果會存起來，同一個資料夾再開就快很多。取消「也找相似的連拍」就只跑雜湊，不用下載，更快。超過 10,000 張的資料夾不會掃，請改選子資料夾。

### 哪些瀏覽器能搬移和刪除？HEIC 呢？

選資料夾、搬進 `_similar/`、刪除，全都靠 File System Access API，只有 Chrome、Edge、Brave 這類桌面版 Chromium 系瀏覽器才有。Firefox、Safari 和所有手機瀏覽器上，你還是可以把照片或資料夾拖進來、看分組、標記要移走的、把清單匯出成 `CSV`，但頁面碰不到檔案。iPhone 的 `HEIC` 照片會和其他照片一樣解碼、比對，只是這裡讀不到它的拍攝時間，所以比對時不套時間窗。

## Related tools

- [Duplicate File Finder](https://bytescope.dev/zh-Hant/duplicate-finder.md) — 先比大小、再比 SHA-256，找出資料夾裡完全相同的檔案。
- [Photo Organizer](https://bytescope.dev/zh-Hant/photo-organizer.md) — 把照片資料夾依日期分進子資料夾，還能一鍵復原。
- [Folder Size](https://bytescope.dev/zh-Hant/folder-size.md) — 看看是哪些資料夾和檔案類型把空間吃掉的。
