Manage Nikon Z5 II photo and video libraries. Batch resize, convert to JPEG XL or optimized JPEG via mozjpeg, create contact sheets, manage EXIF metadata, prepare share-ready albums, and process 4K video. Uses Python scripts via uv run for all batch operations. Use when working with JPG, NEF, HEIF, or MOV photo/video files, or when the user mentions photos, camera, Nikon, resize, sharing pictures, photo library, image optimization, JPEG XL, or contact sheet.
Manage photo and video libraries from the Nikon Z5 II (24.5MP, 6048x4032).
File naming convention: DSC_NNNN.JPG or DSC_NNNN.NEF.
All batch operations use Python scripts executed via uv run (PEP 723 inline
metadata handles dependencies automatically). Scripts live in
${CLAUDE_SKILL_DIR}/scripts/.
Before any operation, verify required tools:
command -v ffmpeg || echo "MISSING: brew install ffmpeg"
command -v cjpeg || echo "MISSING: brew install mozjpeg"
command -v cjxl || echo "MISSING: brew install jpeg-xl"
command -v exiftool || echo "MISSING: brew install exiftool"
command -v uv || echo "MISSING: brew install uv"
If any tool is missing, tell the user the exact brew install command and stop.
Route based on $ARGUMENTS:
resize [max_dim] [quality]Resize photos to a target long-edge dimension (default: 2048px) preserving
aspect ratio. Outputs to share/ subdirectory.
uv run "${CLAUDE_SKILL_DIR}/scripts/resize.py" . --max-dim 2048 --quality 2
optimize [quality] — Optimize JPEG quality/sizeRe-encode JPEGs through djpeg | cjpeg (mozjpeg) pipeline for smaller files at equivalent visual quality. Default quality: 85.
uv run "${CLAUDE_SKILL_DIR}/scripts/optimize.py" . --quality 85
archive — Lossless JPEG XL archivalLosslessly transcode JPEGs to JPEG XL (~20% smaller, perfectly reversible
back to byte-identical original JPEG via djxl).
uv run "${CLAUDE_SKILL_DIR}/scripts/archive.py" .
contact-sheet [columns] [thumb_width] — Visual overviewGenerate a grid contact sheet of all photos for quick review.
uv run "${CLAUDE_SKILL_DIR}/scripts/contact_sheet.py" . --columns 8 --thumb-width 320
share-album [max_dim] [quality] — Full sharing pipelineComplete pipeline: resize + optimize + strip GPS (preserve date/camera info).
uv run "${CLAUDE_SKILL_DIR}/scripts/share_album.py" . --max-dim 2048 --quality 85
metadata <subcommand> — EXIF metadata managementmetadata show <file> — display all EXIF datametadata strip-gps [dir] — remove GPS/location from all filesmetadata dates [dir] — list files with capture datesmetadata rename [dir] — rename files to YYYY-MM-DD_HHMMSS_DSC_NNNN.JPGuv run "${CLAUDE_SKILL_DIR}/scripts/metadata.py" . <subcommand>
video <subcommand> — Video processingvideo compress [crf] — re-encode MOV to HEVC at given CRF (default: 22)video extract-frames <file> [interval] — extract stills every N secondsvideo resize <max_dim> — resize video for sharinguv run "${CLAUDE_SKILL_DIR}/scripts/video.py" . <subcommand>
For Z5 II specs, resolution options, and format details: see z5ii-specs.md
For detailed flags, quality scales, and advanced recipes: see tool-reference.md
For format choices, audience considerations, and platform limits: see sharing-guide.md
For long-term storage strategy and JPEG XL reversibility: see archival-guide.md
This skill does not process RAW (NEF) files. As of 2026-04-14, the user's RAW editing tool is DaVinci Resolve 21 (free, Photo page). Handoff pattern: Z5 II NEF → Resolve (grade + Quick Export JPEG) → this skill (resize, optimize, archive, share, contact-sheet). If the user asks about RAW grading, Magic Mask, Relight, Face Refinement, or AI SuperScale on stills, point them at Resolve — do not try to batch NEFs through the scripts here.