Community이미지github.com

znas-photos

Zettos NAS 포토 API를 호출하여 사진 검색, 타임라인 버킷, 사용자 앨범, 유사 사진 작업, 사진 지도 및 AI 인식 앨범을 관리합니다.

znas-photos란 무엇인가요?

이 스킬은 Zettos NAS의 Photos 기능을 완전히 제어할 수 있는 CLI 기반 도구입니다. 사용자는 사진/비디오 검색, 타임라인 및 지도 데이터 탐색, 앨범 생성/수정/삭제/다운로드, 유사 사진 스캔 작업 관리, AI가 인식한 사람/반려동물 앨범 조회 등 다양한 작업을 수행할 수 있습니다. `znas photos --help`와 같은 점진적 CLI 발견 규칙을 따르며, 모든 쓰기/삭제 작업 전 상태를 읽고 성공 후 다시 확인하는 안전 규칙을 적용합니다. 이진 출력 경로는 `-o <file>` 플래그를 필수로 사용하며, 스키마 정보는 `znas schema photos` 명령어로 확인할 수 있습니다. 백엔드 필드 이름(예: `fileIds`, `album_id`, `albumId`)을 정확히 유지하고, 업로드 시 JSON 페이로드나 파라미터를 올바르게 전달해야 합니다.

지원 대상~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에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

znas photos

사용자가 NAS Photos에 대해 질문할 때 이 스킬을 사용하세요: 사진/비디오 검색, 타임라인/지도 데이터 탐색, 앨범 관리, 앨범 다운로드, 유사 사진 찾기, AI 인식 사람/반려동물 앨범 확인.

이 스킬의 용도

  • Photos 설정 경로를 읽고 업데이트합니다.
  • 인덱싱된 사진/비디오를 검색하고 타임라인 버킷을 읽습니다.
  • 사용자 앨범을 생성, 목록 조회, 업데이트, 삭제 및 다운로드합니다.
  • 유사 사진 스캔 작업을 시작/목록 조회/삭제하고 그룹을 검사합니다.
  • 사진 지도 클러스터, 위치 및 지도 스위치 상태를 읽습니다.
  • 사람 또는 반려동물과 같은 AI 인식 기능 앨범을 읽고 관리합니다.

발견 규칙

  1. 추측 대신 점진적 CLI 발견을 선호합니다:
    • znas photos --help
    • znas photos <feature> --help
    • znas photos <feature> <command> --help
  2. 경로 인벤토리, 페이로드 유형, 예제 및 바이너리/쓰기 플래그가 필요할 때 znas schema photos를 사용합니다.
  3. help/schema에 표시된 대로 백엔드 필드 이름을 정확히 유지합니다: 예를 들어 fileIds, taskId, groupId, albumId, album_id, fIds, eaHash.
  4. 모든 ID를 맹목적으로 문자열로 변환하지 마십시오. 이전 API 읽기에서 반환된 필드 이름과 값 형태를 유지합니다.

안전 규칙

  1. 모든 쓰기 또는 삭제 전에 현재 상태를 읽습니다.
  2. 쓰기/삭제가 성공한 후, 최종 성공을 보고하기 전에 일치하는 읽기 명령을 다시 실행합니다.
  3. Photos 제어 평면 작업에 대해 호스트 네이티브 도구나 직접 내부 curl을 사용하지 말고 znas photos ...에 해당 경로가 있을 때 사용하십시오.
  4. Photos 백엔드는 범용 드라이런 모드를 제공하지 않습니다. 파괴적인 작업의 경우 정확한 대상을 먼저 검사하고 변경 범위를 좁게 유지하십시오.
  5. 비동기 유사 사진 스캔의 경우 작업 생성은 작업을 대기열에 넣을 뿐입니다. 상태 확인을 위해 similar task-list 및 그룹 읽기를 사용하십시오.
  6. 일반 앨범 경로와 AI 기능 앨범 경로는 서로 다른 표면입니다. album_id와 albumId를 혼용하지 마십시오.

바이너리 출력 규칙

바이너리로 표시된 경로는 stdout을 구문 분석 가능하게 유지하기 위해 -o <file>이 필요합니다:

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

명령이 실패하면 CLI는 파일을 쓰기 전에 JSON 오류 응답을 검증합니다.

일반적인 워크플로

Photos 상태 읽기

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"}'
    • 주의: 일반 앨범 업데이트에는 album_id가 아닌 백엔드 필드 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 쿼리입니다. JSON 본문이 아닌 index와 size를 사용하십시오.
  • 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}'
    • 주의: 인식된 기능 앨범은 taskType 및 isHide와 같은 camelCase 필드를 사용합니다.
  • GET album-count -> /feature/album/count (auth)
    • 페이로드: --params
    • 예제: znas photos feature album-count --params '{"taskType":1,"isHide":false}'
    • 주의: 개수뿐만 아니라 앨범 ID가 필요하면 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는 album_id를 사용하는 일반 앨범 상세와 달리 필드 albumId를 사용합니다.
  • 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}'
    • 주의: 경계는 camelCase 위도/경도 필드를 사용합니다. 최소값은 최대값보다 작아야 합니다.
  • GET geohash -> /map/geohash (auth)
    • 페이로드: --params; 필수: geohash, index, size
    • 예제: znas photos map geohash --params '{"geohash":"wtw3;wtw6","index":0,"size":20,"sortOrder":1}'
    • 주의: 여러 지오해시는 단일 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 경로입니다. --json이 아닌 --params로 필터를 전달하십시오.
  • 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.

관련 스킬