gallery-manage
Gallery Management
Manage local gallery content before uploading to S3.
Arguments
$ARGUMENTS- Command to execute:list,create,validate,organize, orstats
Commands
List Galleries
Show all local galleries and their status:
ls -la content/galleries/
Create New Gallery
Create a properly structured gallery folder:
GALLERY_ID=$1 # e.g., "portrait-002"
CATEGORY=$2 # brands, portraits, events, custom
mkdir -p content/galleries/$GALLERY_ID/{originals,processed,thumbnails,blur}
# Create gallery metadata file
cat > content/galleries/$GALLERY_ID/metadata.json << 'EOF'
{
"id": "GALLERY_ID_PLACEHOLDER",
"title": "",
"category": "CATEGORY_PLACEHOLDER",
"description": "",
"isPublic": true,
"isClientGallery": false,
"createdAt": "TIMESTAMP_PLACEHOLDER"
}
EOF
Validate Gallery Images
Check images meet requirements before upload:
GALLERY_PATH=$1 # e.g., "content/galleries/portrait-002"
# Check for supported formats
find $GALLERY_PATH/originals -type f \( \
-name "*.jpg" -o -name "*.jpeg" -o -name "*.png" \
-o -name "*.webp" -o -name "*.heic" -o -name "*.heif" \
-o -name "*.tiff" -o -name "*.tif" \
\) -print
# Check for unsupported formats (should be empty)
find $GALLERY_PATH/originals -type f \( \
-name "*.cr2" -o -name "*.nef" -o -name "*.arw" \
-o -name "*.gif" -o -name "*.bmp" -o -name "*.psd" \
\) -print
# Check file sizes (warn if > 50MB)
find $GALLERY_PATH/originals -type f -size +50M -print
# Count total images
find $GALLERY_PATH/originals -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" \) | wc -l
Organize Gallery
Rename files with consistent naming and ordering:
GALLERY_PATH=$1
# Generate sequential names while preserving extension
cd $GALLERY_PATH/originals
count=1
for file in *.{jpg,jpeg,png,webp}; do
if [ -f "$file" ]; then
ext="${file##*.}"
newname=$(printf "img-%03d.%s" $count "$ext")
mv "$file" "$newname"
((count++))
fi
done
Gallery Statistics
Show comprehensive stats for a gallery:
GALLERY_PATH=$1
echo "=== Gallery Statistics ==="
echo "Path: $GALLERY_PATH"
echo ""
# Count by type
echo "Image counts:"
echo " JPG/JPEG: $(find $GALLERY_PATH/originals -name "*.jpg" -o -name "*.jpeg" | wc -l)"
echo " PNG: $(find $GALLERY_PATH/originals -name "*.png" | wc -l)"
echo " WebP: $(find $GALLERY_PATH/originals -name "*.webp" | wc -l)"
echo " HEIC: $(find $GALLERY_PATH/originals -name "*.heic" -o -name "*.heif" | wc -l)"
echo ""
# Total size
echo "Total size:"
du -sh $GALLERY_PATH/originals
# Processed status
echo ""
echo "Processing status:"
echo " Processed variants: $(find $GALLERY_PATH/processed -type f 2>/dev/null | wc -l)"
echo " Thumbnails: $(find $GALLERY_PATH/thumbnails -type f 2>/dev/null | wc -l)"
echo " Blur placeholders: $(find $GALLERY_PATH/blur -type f 2>/dev/null | wc -l)"
Directory Structure
Expected gallery structure:
content/galleries/{gallery-id}/
├── metadata.json # Gallery metadata
├── originals/ # Original uploaded images
│ ├── img-001.jpg
│ ├── img-002.jpg
│ └── ...
├── processed/ # Generated WebP variants
│ └── img-001/
│ ├── 320w.webp
│ ├── 640w.webp
│ └── ...
├── thumbnails/ # Generated thumbnails
│ └── img-001/
│ ├── sm.webp
│ ├── md.webp
│ └── lg.webp
└── blur/ # Blur placeholders
├── img-001.txt
└── ...
Workflow Integration
This skill works with other skills in this order:
/gallery-manage create- Create new gallery structure- Copy images to
originals/folder /gallery-manage validate- Check images meet requirements/optimize-images- Generate variants and thumbnails/sync-content- Upload to S3/db-seedor API call - Create gallery record in DynamoDB
Supported Formats
| Format | Extension | Supported | Max Size |
|---|---|---|---|
| JPEG | .jpg, .jpeg | ✓ | 50MB |
| PNG | .png | ✓ | 50MB |
| WebP | .webp | ✓ | 50MB |
| HEIC | .heic, .heif | ✓ | 50MB |
| TIFF | .tiff, .tif | ✓ | 50MB |
| RAW | .cr2, .nef, .arw | ✗ | N/A |
| GIF | .gif | ✗ | N/A |
| PSD | .psd | ✗ | N/A |
Output
After each command, report:
- Action taken
- Number of files affected
- Any warnings or errors
- Next recommended action
More from forever-efficient/pitfal-solutions-website
optimize-images
Batch optimize images for web delivery. Converts to WebP, generates multiple sizes, and creates blur placeholders.
39logs
View recent CloudWatch logs for Lambda functions and API Gateway.
30stripe-setup
Set up Stripe products, prices, and webhooks for Pitfal Solutions photography packages. Creates products for portrait sessions, event coverage, digital downloads, and prints. Use when configuring payment processing.
30deploy
Deploy the Pitfal Solutions website to AWS. Use when user says deploy, push to production, or update live site. Runs pre-checks, builds Next.js, deploys Terraform infrastructure, syncs to S3, and invalidates CloudFront cache.
29preview
Start local development server for previewing the site.
28sync-content
Sync gallery images and content to S3. Use after adding new photos to the portfolio.
28