用 SauceNAO 搜圖踩過的五個坑,現在回頭看都是血的教訓

系统工具 ·约 9 分钟 ·記筆記的貓:團子

saucenao 是什麼

SauceNAO 是一款專注於二次元圖像溯源的工具——你給它一張圖(截圖、插畫、照片甚至一個網址都行),它就去索引了六十多個數據庫裡做像素級比對,幫你找到這張圖的原作者、出處和在各平台的上傳記錄。說穿了就是二次元圈子裡的反向搜圖神器:存了一張畫風超棒的同人圖想知道是哪個畫師畫的?保存了一段動畫截場景想找完整的章節?SauceNAO 就是做這個的。

它從 2008 年由個人開發者 Xamayon 上線以來一路擴張,現在索引規模已經到數十億張,覆蓋了 pixiv、Danbooru、B 站插畫區、Twitter 等通用反向搜圖工具根本搜不到的二次元圖片社區。和 Google Lens 這種「什麼圖都搜一點」的通用引擎不同,SauceNAO 從頭到尾就盯住動漫、插畫、漫畫、遊戲 CG、同人誌這一個垂類,這也是它最無法替代的價值。

SauceNAO 官方標誌

安裝

SauceNAO 的 Android APK 只有 2.91M,是個超級輕量的小文件,安裝幾乎沒有門檻——從 saucenao下載 拿到之後在系統裡放行未知來源安裝就能完成,全程不超過一分鐘。但這裡有一個很容易被忽略的事實:APK 本質上只是 saucenao.com 網站的一個殼,打開之後就是網頁端的完整功能,沒有任何額外的本地處理能力。

所以實際上你裝不裝這個 APK 都一樣——直接在手機瀏覽器裡打開 saucenao官網,加到書籤或存成桌面捷徑,體驗和 APK 沒什麼區別。我剛開始不知道這點,興奮地裝了 APK 之後才發現白花了時間,後來就乾脆只用瀏覽器了。當然如果你習慣了 APP 的觸控體驗裝著也沒問題,只是別抱著「APK 會比網頁端功能多」的期待——它真的就是同一個東西。

SauceNAO 應用首頁

坑一:相似度只有 68% 就以為搜錯了,其實就是同一張

這是我剛開始用時踩過最頻繁的坑。第一次搜一張從 B 站動畫裡截的場景圖,結果頁面最上面的相似度只有 68%,我掃了一眼下面那些 40%、30% 的結果,以為這張圖根本沒被索引,就跳過了。後來不死心點進去看,發現那一條 68% 的命中就是我要找的那個畫師的 pixiv 原圖——只是因為我截圖的時候裁掉了旁邊一大塊字幕,SauceNAO 的像素比對算法就把相似度拉下來了。

SauceNAO 不會容忍以下幾種圖片改動:裁掉一大塊區域、加了很大的水印、經過大幅壓縮或轉碼、截了 GIF 或影片的關鍵幀(它只取第一幀)、甚至只是水平翻轉。遇到這些情況,即使確實是同一張圖,相似度也可能從 95% 掉到 70% 甚至更低。我後來學乖了,70% 左右的命中一定會點進去看一眼,不能光憑數字就判死刑。

反過來相似度偏高也不一定百分百靠譜——兩張圖剛好有相同的背景或配色就可能被抬高,數據庫裡兩張非常相似的同人圖也會都給出高相似度。真正靠譜的判斷方式是三結合:先看相似度有沒有過 70%,再快速掃一眼縮略圖是不是你要的那張,最後看來源數據庫靠不靠譜。三個條件有兩個對上了基本就不會錯。

坑二:API 返回 status -1 以為 Key 壞了,其實是限流了

前陣子寫了一個自動溯源的小機器人,設定了每五分鐘檢查一次自己關注的幾個畫師有沒有新作品上傳。第一次跑的時候一切正常,結果半小時後機器人突然開始報錯,所有請求都返回 status: -1 錯誤。我第一反應是 API Key 被我寫錯了,檢查了三個小時也沒找出問題,後來才意識到——免費賬戶的 API 限額是每三十秒八次請求、每天兩百次,我那個五分鐘循環的機器人加上我自己手動測試的請求,半天就把一天的額度用光了。

SauceNAO 的 API 在 response header 裡會明確返回四個關鍵字段:short_remaining(當前三十秒窗口內剩餘請求數)、long_remaining(二十四小時窗口內剩餘請求數)、status(0 為成功、-1 為限流、-2 為 Key 無效)、message(錯誤描述)。寫腳本的時候每次調用後一定要檢查這幾個值,特別是 short_remaining——等於 0 就乖乖等三十秒,別再硬發。我後來在腳本裡加了一個自動休眠邏輯,short_remaining 變 0 的時候自動 sleep 到窗口重置,從此再也沒遇到過限流的問題。

順便一提升級賬戶之後這兩個限額都會提高,還有繁忙時優先處理的權限,但網頁端使用完全不受限——日常打開 saucenao.com 搜圖和免費用戶體驗一模一樣。只有寫機器人或批量調用 API 才需要考慮這個問題。

坑三:GIF 和影片截幀搜不到,SauceNAO 只看第一幀

有一次我保存了一段動畫裡的彈幕 GIF,想找它對應的原始圖片素材。我直接把 GIF 上傳了,結果返回的全是不相關的結果——相似度最高的一條也才 32%。我以為這張圖根本沒被索引,折騰了好幾天。後來才從官方文檔裡看到:SauceNAO 對動圖和影片只取第一幀來做比對,而且不會自動播放後面的幀。彈幕 GIF 的第一幀通常是彈幕還沒出現的空白畫面,或者畫面還在過渡狀態,根本不是你想搜的那個關鍵畫面。

解法很簡單:用截圖工具手動截到你想要的那個關鍵幀,保存成靜態圖片再上傳。大部分手機長截圖功能都能做到,電腦上用 PrtScn 或瀏覽器插件也很方便。這一個小細節解決了我之前好幾個「明明是同一张圖為什麼搜不到」的困惑。

坑四:裝了 APK 才發現網頁端完全够用,白忙活一場

前面安裝章節提過這件事,但值得再強調一次。SauceNAO 的 APK 只有 2.91M 確實輕量,但它就是 saucenao.com 的殼,功能和網頁端完全一致——圖片上傳、網址搜索、結果篩選、數據庫選擇,一個不多一個不少。我當時在應用商店看到它的評分和評論,興奮地以為有什麼獨家功能,裝完打開才發現就是手機瀏覽器網頁,當下有種被套路的感覺。

當然如果你喜歡 APP 的原生觸控體驗,裝著也沒什麼問題。但如果你只是偶爾需要搜一張圖,真的沒必要專門裝一個應用——在手機瀏覽器裡加個書籤或者存成桌面捷徑,點一下就進,體驗不會差多少,還省了 2.91M 的存儲空間。而且瀏覽器版不用更新,網站功能改了即時生效,APP 還得等開發者推新版。

坑五:用 db=999 搜全庫以為最全面,反而被不相關結果淹沒

剛開始調 API 的時候,我天真地以為搜索全部數據庫(db=999)能拿到最全面的結果。結果返回的二十條裡面有十幾條來自我完全不認識的小圖站,相似度都在 40% 以下,真正想要的那條反而被埋在中間。後來才明白:搜全庫等於把所有數據庫的結果混在一起排序,小站的圖片質量參差不齊,經常出來一些畫風完全不相關的低相似度結果。

比較好的做法是根據你搜的圖片類型,用 dbmask 或 db 參數指定幾個靠譜的數據庫。比如搜插畫就指定 pixiv 和 Danbooru,搜動畫截圖就指定 Anilist 和 AniDB,搜同人誌就指定 ComicInfo。把搜索範圍縮小到幾個高質量數據庫,結果會乾淨很多,真相關的結果也更容易浮上來。dbmask 是位掩碼,每個數據庫有自己的編號,寫腳本的時候先查清楚你要哪幾個,組合起來傳進去就行。

防坑清單

  • 相似度 70% 左右的命中一定要點進去確認,別光憑數字就判定無效
  • 寫 API 腳本每次都檢查 short_remaining 和 long_remaining,剩餘為 0 就自動休眠
  • GIF 和影片先手動截到關鍵幀再搜,SauceNAO 只看第一幀
  • 偶爾用就網頁端加書籤,真的沒必要專門裝 APK
  • API 搜索盡量用 dbmask 指定幾個高質量數據庫,少用 db=999 搜全庫

說到底,SauceNAO 是個很老派但很純粹的工具——它不做什麼花哨的 AI 語義理解,就是老老實實做像素級比對。把這些坑繞過去之後,用起來其實相當省心,尤其是追喜歡的畫師和找動畫截圖素材的時候,簡直離不開。

本文為個人基於網路公開資料整理編寫,非官方內容,僅供學習交流參考;軟體版權歸原作者所有,請支持正版;使用過程中遇到問題請查閱官方管道,本文不承擔任何責任。

團子還試過這些