Community影像github.com

znas-photos

呼叫 Zettos Photos API,進行照片搜尋、時間軸區段、使用者相簿、相似照片任務、照片地圖及 AI 辨識相簿等操作。

znas-photos 是什麼?

**znas-photos** 是一個為 AI 代理設計的技能,用於與 Zettos NAS 上的 Photos 服務互動。它提供完整的 API 覆蓋,涵蓋照片與影片搜尋、時間軸瀏覽、使用者相簿管理、相似照片掃描任務、照片地圖功能以及基於 AI 的人像/寵物辨識相簿。此技能支援 `znas photos` CLI 工具,並強制遵循漸進式探索規則,優先從 `--help` 查詢開始,必要時使用 `znas schema photos` 取得完整路由清單、負載類型與範例。內建的安全規則確保在每次寫入或刪除操作前讀取當前狀態,並在操作成功後重新讀取進行驗證。此外,定義了需要 `-o <file>` 輸出的二進位路由,例如相簿下載、即時照片串流和頭像提取,以保持 stdout 的可解析性。常見工作流程包含狀態讀取、相簿 CRUD、相似照片群組管理、地圖邊界查詢與 AI 功能相簿操作,是開發者與 AI 代理管理 NAS 上多媒體內容的完整方案。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/zettlab/zettos-ainas-cli/tree/main/skills/znas-photos

Installed? Explore more 影像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

znas photos

當使用者詢問 NAS Photos:搜尋照片或影片、瀏覽時間軸/地圖資料、管理相簿、下載相簿、尋找相似照片或檢視 AI 辨識的人像/寵物相簿時,請使用此技能。

此技能的用途

  • 讀取與更新 Photos 設定路徑。
  • 搜尋已索引的照片/影片並讀取時間軸區段。
  • 建立、列出、更新、刪除與下載使用者相簿。
  • 啟動/列出/刪除相似照片掃描任務並檢視群組。
  • 讀取照片地圖叢集、位置與地圖開關狀態。
  • 讀取與管理 AI 辨識的功能相簿(例如人像或寵物)。

探索規則

  1. 優先使用漸進式 CLI 探索,而非猜測:
    • znas photos --help
    • znas photos <feature> --help
    • znas photos <feature> <command> --help
  2. 當需要路由清單、負載類型、範例以及二進位/寫入旗標的 JSON 資料時,使用 znas schema photos。
  3. 完全保留 help/schema 中顯示的後端欄位名稱:例如 fileIds、taskId、groupId、albumId、album_id、fIds 與 eaHash。
  4. 不要盲目將所有 ID 轉為字串。保留先前 API 讀取回傳的欄位名稱與值格式。

安全規則

  1. 在每次寫入或刪除操作前,先讀取當前狀態。
  2. 寫入/刪除成功後,在回報最終成功前,重新執行對應的讀取命令。
  3. 當 znas photos ... 提供路由時,不要使用主機原生工具或直接內部 curl 進行 Photos 控制平面工作。
  4. Photos 後端沒有通用的乾執行(dry-run)模式。對於破壞性操作,請先檢查確切目標並保持變動範圍狹小。
  5. 對於非同步的相似照片掃描,任務建立僅將工作排入佇列。使用 similar task-list 與群組讀取檢查狀態。
  6. 一般相簿路由與 AI 功能相簿路由是不同的表面;不要混淆 album_id 與 albumId。

二進位輸出規則

標記為二進位的路由需要 -o <file> 以保持 stdout 可解析:

  • znas photos album download ... -o album.zip
  • znas photos photo stream ... -o live.mov
  • znas photos feature avatar ... -o avatar.jpg

如果命令失敗,CLI 會先驗證 JSON 錯誤回應後才寫入檔案。

常見工作流程

讀取照片狀態

znas photos setting config
znas photos photo search --json '{"index":0,"size":20}'
znas photos photo timeline --params '{"time_tpl":"YYYY-MM","sort_order":1}'

相簿工作流程

znas photos album list --params '{"index":0,"size":20}'
znas photos album create --json '{"name":"Trip"}'
znas photos album add-photos --json '{"album_id":123,"fileIds":["456"]}'
znas photos album get --params '{"album_id":123}'
znas photos album download --json '{"album_id":123,"download_name_prefix":"Trip"}' -o trip.zip

相似照片

znas photos similar task-list --params '{"index":0,"size":20,"imgSize":20,"groupSize":4}'
znas photos similar task-create --json '{"dirPath":["/personal/Photos"]}'
znas photos similar group-list --params '{"taskId":123,"index":0,"size":20,"imgSize":20}'
znas photos similar group-detail --params '{"taskId":123,"groupId":456,"offset":0,"size":50}'

地圖與 AI 功能相簿

znas photos map last-location
znas photos map bounds --params '{"minLat":30,"maxLat":31,"minLon":120,"maxLon":121,"zoomLevel":10}'
znas photos feature progress --params '{"taskType":1}'
znas photos feature album-list --params '{"taskType":1,"index":0,"size":20,"isHide":false}'
znas photos feature album-photos --params '{"albumId":123,"index":0,"size":50}'

功能

album

  • POST download -> /downloadFiles (auth)
    • 旗標:binary
    • 標準指令:photos album download
    • 負載:--json
    • 範例:znas photos album download --json '{"album_id":123,"download_name_prefix":"album"}' -o album.zip
    • 陷阱:下載可使用 album_id 或 str_paths;會回傳二進位 zip 資料,需要 -o <file>。
  • POST create -> /album/createAlbum (auth)
    • 旗標:write
    • 負載:--json;必填:name
    • 範例:znas photos album create --json '{"name":"Trip","description":"2026 trip"}'
    • 陷阱:先建立相簿,再用 album add-photos 加入照片。
  • PUT update -> /album/updateAlbum (auth)
    • 旗標:write
    • 負載:--json;必填:id
    • 範例:znas photos album update --json '{"id":123,"name":"Trip edited"}'
    • 陷阱:一般相簿更新使用後端欄位 id,而非 album_id。
  • DELETE delete -> /album/deleteAlbum (auth)
    • 旗標:destructive
    • 負載:--json;必填:id
    • 範例:znas photos album delete --json '{"id":123}'
    • 陷阱:僅在讀取相簿後才刪除;除非後端行為變更,否則這不代表刪除原始檔案。
  • GET list -> /album/listAlbum (auth)
    • 負載:--params;必填:size
    • 範例:znas photos album list --params '{"index":0,"size":20,"sort_type":2,"sort_order":1}'
    • 陷阱:列表為 GET 查詢;使用 index 與 size,而非 JSON 主體。
  • POST add-photos -> /album/addPhotoToAlbum (auth)
    • 旗標:write
    • 負載:--json;必填:album_id
    • 範例:znas photos album add-photos --json '{"album_id":123,"fileIds":["456"]}'
    • 陷阱:後端欄位為大寫 I 的 fileIds;當你有確切 NAS 路徑時也支援 paths。
  • DELETE remove-photos -> /album/removeAlubmPhotos (auth)
    • 旗標:destructive
    • 標準指令:photos album remove-photos
    • 負載:--json;必填:album_id
    • 範例:znas photos album remove-photos --json '{"album_id":123,"fileIds":["456"]}'
    • 陷阱:CLI 隱藏了上游拼寫錯誤 removeAlubmPhotos;使用語義命令 remove-photos。
  • GET get -> /album/getAlbum (auth)
    • 負載:--params;必填:album_id
    • 範例:znas photos album get --params '{"album_id":123}'
    • 陷阱:相簿詳細資訊為 GET 查詢;透過 --params 傳遞 album_id。

feature

  • GET progress -> /feature/process (auth)
    • 負載:--params
    • 範例:znas photos feature progress --params '{"taskType":1}'
    • 陷阱:省略 taskType 會讀取後端預設進度;當使用者特別詢問臉部或寵物時請傳遞。
  • DELETE clear -> /feature/clear (auth)
    • 旗標:destructive
    • 負載:--json;必填:taskType
    • 範例:znas photos feature clear --json '{"taskType":1}'
    • 陷阱:這會重設該任務類型的已發現功能相簿資料;先讀取進度/列表。
  • GET switch -> /feature/switch (auth)
    • 負載:--params;必填:type
    • 範例:znas photos feature switch --params '{"type":1}'
    • 陷阱:開關讀取使用欄位 type;任務相簿篩選使用 taskType。
  • PUT set-switch -> /feature/switch (auth)
    • 旗標:write
    • 負載:--json;必填:type、switch
    • 範例:znas photos feature set-switch --json '{"type":1,"switch":1}'
    • 陷阱:切換後,在回報最終狀態前重新讀取 feature switch。
  • PUT set-config -> /feature/switch/config (auth)
    • 旗標:write
    • 負載:--json;必填:type、hideNum
    • 範例:znas photos feature set-config --json '{"type":1,"hideNum":5}'
    • 陷阱:使用確切的 hideNum;此後端不接受蛇形命名(snake_case)。
  • GET album-list -> /feature/album/list (auth)
    • 負載:--params;必填:index、size
    • 範例:znas photos feature album-list --params '{"taskType":1,"index":0,"size":20,"isHide":false}'
    • 陷阱:已辨識的功能相簿使用駝峰命名(camelCase)欄位,例如 taskType 與 isHide。
  • GET album-count -> /feature/album/count (auth)
    • 負載:--params
    • 範例:znas photos feature album-count --params '{"taskType":1,"isHide":false}'
    • 陷阱:當你需要相簿身分識別而非僅計數時,請使用 album-list。
  • GET relation -> /feature/relation (auth)
    • 負載:--params
    • 範例:znas photos feature relation --params '{"taskType":1}'
    • 陷阱:關係是已辨識相簿的選項;在更新關係文字前先讀取。
  • GET album-get -> /feature/album (auth)
    • 負載:--params;必填:albumId
    • 範例:znas photos feature album-get --params '{"albumId":123}'
    • 陷阱:功能相簿 ID 使用欄位 albumId,不同於一般相簿詳細資訊使用的 album_id。
  • PUT album-update -> /feature/album (auth)
    • 旗標:write
    • 負載:--json;必填:albumId
    • 範例:znas photos feature album-update --json '{"albumId":123,"name":"Alice"}'
    • 陷阱:僅從先前的讀取取得數值時才使用 coverId、coverPath 或 relation。
  • POST album-hide -> /feature/album/hide (auth)
    • 旗標:write
    • 負載:--json;必填:albumIds、isHide
    • 範例:znas photos feature album-hide --json '{"albumIds":[123],"isHide":true}'
    • 陷阱:變更 isHide 後,驗證隱藏與可見列表。
  • POST album-merge -> /feature/album/merge (auth)
    • 旗標:destructive
    • 負載:--json;必填:albumIds、targetId
    • 範例:znas photos feature album-merge --json '{"albumIds":[123,124],"targetId":123}'
    • 陷阱:先讀取所有來源相簿;targetId 必須是保留下來的相簿。
  • GET album-photos -> /feature/album/photos (auth)
    • 負載:--params;必填:albumId、index、size
    • 範例:znas photos feature album-photos --params '{"albumId":123,"index":0,"size":50}'
    • 陷阱:對已辨識相簿使用此功能;對一般使用者相簿使用 album get。
  • PUT album-photo-update -> /feature/album/photo (auth)
    • 旗標:write
    • 負載:--json;必填:albumId、fIds
    • 範例:znas photos feature album-photo-update --json '{"albumId":123,"fIds":[456]}'
    • 陷阱:這會移動已辨識的功能照片列;fIds 是來自 album-photos 的功能列 ID。
  • DELETE album-photo-delete -> /feature/album/photo (auth)
    • 旗標:destructive
    • 負載:--json;必填:fIds
    • 範例:znas photos feature album-photo-delete --json '{"fIds":[456]}'
    • 陷阱:先讀取 album-photos 並重複使用回傳的功能列 ID。
  • GET avatar -> /feature/avatar (auth)
    • 旗標:binary
    • 負載:--params;必填:eaHash
    • 範例:znas photos feature avatar --params '{"eaHash":"<hash>"}' -o avatar.jpg
    • 陷阱:此路由回傳圖片檔案;務必傳遞 -o <file>。

map

  • GET forward -> /map/forward (auth)
    • 負載:--params;必填:coords、model
    • 範例:znas photos map forward --params '{"coords":"116.3,39.9","model":1}'
    • 陷阱:多個座標在 coords 內以分號分隔。
  • GET switch -> /map/switch (auth)
    • 負載:--params;必填:type
    • 範例:znas photos map switch --params '{"type":2}'
    • 陷阱:地圖開關使用功能請求欄位 type;當前地圖開關類型通常為 2。
  • PUT set-switch -> /map/switch (auth)
    • 旗標:write
    • 負載:--json;必填:type、switch
    • 範例:znas photos map set-switch --json '{"type":2,"switch":1}'
    • 陷阱:寫入後在回報最終狀態前重新讀取 map switch。
  • GET last-location -> /map/lastLocation (auth)
    • 負載:none
    • 範例:znas photos map last-location
    • 陷阱:空結果可能表示沒有已索引的照片包含可用的 GPS 資料。
  • GET bounds -> /map/bounds (auth)
    • 負載:--params;必填:minLat、maxLat、minLon、maxLon、zoomLevel
    • 範例:znas photos map bounds --params '{"minLat":30,"maxLat":31,"minLon":120,"maxLon":121,"zoomLevel":10}'
    • 陷阱:邊界使用駝峰命名的經緯度欄位;最小值必須小於最大值。
  • GET geohash -> /map/geohash (auth)
    • 負載:--params;必填:geohash、index、size
    • 範例:znas photos map geohash --params '{"geohash":"wtw3;wtw6","index":0,"size":20,"sortOrder":1}'
    • 陷阱:多個 geohash 在單一 geohash 字串內以分號分隔。
  • GET countries -> /map/location/country (auth)
    • 負載:--params;必填:index、size、viewType、citySize
    • 範例:znas photos map countries --params '{"index":0,"size":20,"viewType":1,"citySize":5}'
    • 陷阱:使用此路由進行分組位置概覽;選擇國家後使用 cities。
  • GET cities -> /map/location/city (auth)
    • 負載:--params;必填:country、offset、size
    • 範例:znas photos map cities --params '{"country":"China","offset":0,"size":20}'
    • 陷阱:城市查詢需要 countries 回傳的確切 country 字串。
  • GET city-photos -> /map/location/city/photo (auth)
    • 負載:--params;必填:addressId、index、size
    • 範例:znas photos map city-photos --params '{"addressId":123,"index":0,"size":50}'
    • 陷阱:使用城市回應中的 addressId,而非顯示的城市名稱。

photo

  • POST search -> /photos/search (auth)
    • 負載:--json;必填:index、size
    • 範例:znas photos photo search --json '{"index":0,"size":20,"keyword_search":"beach"}'
    • 陷阱:照片搜尋為 POST JSON;保留後端欄位名稱,例如 keyword_search、album_ids 與 city_ids。
  • GET timeline -> /photos/getTimeBuckets (auth)
    • 負載:--params
    • 範例:znas photos photo timeline --params '{"time_tpl":"YYYY-MM","sort_order":1}'
    • 陷阱:時間軸為 GET 路由;使用 --params 傳遞篩選條件,而非 --json。
  • GET stream -> /photos/stream (auth)
    • 旗標:binary
    • 負載:--params;必填:id
    • 範例:znas photos photo stream --params '{"id":123456}' -o live.mov
    • 陷阱:此路由回傳二進位即時照片資料;務必傳遞 -o <file>。

setting

  • POST init -> /setting/init (auth)
    • 旗標:write
    • 負載:--json;必填:init_path
    • 範例:`znas photos setting init --json '{"init_path":"/personal/Photos"}'

… [為翻譯而截斷]

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

相關技能