From cloudflare-images
Checks Cloudflare Images setup: verifies env vars, API connectivity, authentication, transformations, variants, quota usage, recent images, and CDN caching status.
npx claudepluginhub secondsky/claude-skills --plugin cloudflare-images# Check Cloudflare Images Configuration Run a complete health check of your Cloudflare Images setup including API connectivity, authentication, transformations, variants, and quota. ## What This Command Does When you run `/check-images`, Claude will: 1. Verify environment variables are set correctly 2. Test API connectivity 3. Validate authentication (account ID + API token) 4. Check if transformations are enabled for zone 5. List all configured variants 6. Show storage quota and usage 7. Display recent images 8. Verify CDN caching status ## Usage No arguments required - the command ...
Run a complete health check of your Cloudflare Images setup including API connectivity, authentication, transformations, variants, and quota.
When you run /check-images, Claude will:
/check-images
No arguments required - the command will automatically discover configuration from environment variables.
Run the following checks in sequence:
echo "๐ Checking environment variables..."
if [ -z "$CF_ACCOUNT_ID" ]; then
echo "โ CF_ACCOUNT_ID not set"
echo " Set in .env: CF_ACCOUNT_ID=your_account_id"
exit 1
else
echo "โ
CF_ACCOUNT_ID: ${CF_ACCOUNT_ID:0:8}..."
fi
if [ -z "$CF_API_TOKEN" ]; then
echo "โ CF_API_TOKEN not set"
echo " Set in .env: CF_API_TOKEN=your_api_token"
exit 1
else
echo "โ
CF_API_TOKEN: ${CF_API_TOKEN:0:10}..."
fi
if [ -z "$CF_ACCOUNT_HASH" ]; then
echo "โ ๏ธ CF_ACCOUNT_HASH not set (optional for delivery URLs)"
else
echo "โ
CF_ACCOUNT_HASH: ${CF_ACCOUNT_HASH}"
fi
echo ""
echo "๐ Testing API connectivity..."
API_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" \
"https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/images/v1" \
-H "Authorization: Bearer ${CF_API_TOKEN}")
if [ "$API_RESPONSE" = "200" ]; then
echo "โ
API connectivity: OK"
else
echo "โ API connectivity failed (HTTP $API_RESPONSE)"
echo " Verify CF_ACCOUNT_ID and CF_API_TOKEN are correct"
exit 1
fi
echo ""
echo "๐ Validating authentication..."
AUTH_RESULT=$(curl -s \
"https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/images/v1" \
-H "Authorization: Bearer ${CF_API_TOKEN}")
AUTH_SUCCESS=$(echo "$AUTH_RESULT" | jq -r '.success')
if [ "$AUTH_SUCCESS" = "true" ]; then
echo "โ
Authentication: Valid"
# Check permissions
IMAGES_COUNT=$(echo "$AUTH_RESULT" | jq -r '.result.images | length')
echo " Images accessible: $IMAGES_COUNT"
else
echo "โ Authentication failed"
ERRORS=$(echo "$AUTH_RESULT" | jq -r '.errors[].message')
echo " Error: $ERRORS"
exit 1
fi
echo ""
echo "๐จ Checking transformations..."
# Note: Transformations are always enabled for Cloudflare Images
# This checks if zone-based transformations are available
if [ ! -z "$CF_ZONE_ID" ]; then
POLISH_STATUS=$(curl -s \
"https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/settings/polish" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
| jq -r '.result.value')
echo "โ
Zone Polish: $POLISH_STATUS"
else
echo "โน๏ธ Zone transformations: Not configured (CF_ZONE_ID not set)"
echo " Cloudflare Images transformations are always available"
fi
echo ""
echo "๐ Listing configured variants..."
VARIANTS=$(curl -s \
"https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/images/v1/variants" \
-H "Authorization: Bearer ${CF_API_TOKEN}")
VARIANTS_SUCCESS=$(echo "$VARIANTS" | jq -r '.success')
if [ "$VARIANTS_SUCCESS" = "true" ]; then
VARIANT_COUNT=$(echo "$VARIANTS" | jq -r '.result.variants | length')
echo "โ
Variants configured: $VARIANT_COUNT/100"
if [ "$VARIANT_COUNT" -gt 0 ]; then
echo ""
echo " Configured variants:"
echo "$VARIANTS" | jq -r '.result.variants[] | " โข \(.id): \(.options.width // "auto")x\(.options.height // "auto") (\(.options.fit // "scale-down"))"'
else
echo " No custom variants configured (using flexible transformations)"
fi
else
echo "โ ๏ธ Could not list variants"
fi
echo ""
echo "๐พ Checking storage quota..."
STATS=$(curl -s \
"https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/images/v1/stats" \
-H "Authorization: Bearer ${CF_API_TOKEN}")
STATS_SUCCESS=$(echo "$STATS" | jq -r '.success')
if [ "$STATS_SUCCESS" = "true" ]; then
IMAGES_COUNT=$(echo "$STATS" | jq -r '.result.count.current')
IMAGES_ALLOWED=$(echo "$STATS" | jq -r '.result.count.allowed')
echo "โ
Storage usage:"
echo " Images stored: $IMAGES_COUNT"
if [ "$IMAGES_ALLOWED" != "null" ]; then
PERCENT_USED=$(echo "scale=1; $IMAGES_COUNT * 100 / $IMAGES_ALLOWED" | bc)
echo " Quota: $IMAGES_COUNT / $IMAGES_ALLOWED ($PERCENT_USED%)"
else
echo " Quota: Unlimited (paid plan)"
fi
else
echo "โ ๏ธ Could not retrieve storage stats"
fi
echo ""
echo "๐ผ๏ธ Recent images..."
RECENT=$(curl -s \
"https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/images/v1?per_page=5" \
-H "Authorization: Bearer ${CF_API_TOKEN}")
RECENT_SUCCESS=$(echo "$RECENT" | jq -r '.success')
if [ "$RECENT_SUCCESS" = "true" ]; then
IMAGE_COUNT=$(echo "$RECENT" | jq -r '.result.images | length')
if [ "$IMAGE_COUNT" -gt 0 ]; then
echo "โ
Last $IMAGE_COUNT uploaded images:"
echo ""
echo "$RECENT" | jq -r '.result.images[] | " ID: \(.id)\n Uploaded: \(.uploaded)\n Filename: \(.filename)\n Variants: \(.variants | length)\n"'
else
echo "โน๏ธ No images uploaded yet"
fi
else
echo "โ ๏ธ Could not retrieve recent images"
fi
echo ""
echo "๐ Testing image delivery..."
if [ "$IMAGE_COUNT" -gt 0 ] && [ ! -z "$CF_ACCOUNT_HASH" ]; then
# Get first image ID
SAMPLE_ID=$(echo "$RECENT" | jq -r '.result.images[0].id')
# Test delivery
DELIVERY_STATUS=$(curl -s -o /dev/null -w "%{http_code}" \
"https://imagedelivery.net/${CF_ACCOUNT_HASH}/${SAMPLE_ID}/public")
if [ "$DELIVERY_STATUS" = "200" ]; then
echo "โ
Image delivery: Working"
echo " Test URL: https://imagedelivery.net/${CF_ACCOUNT_HASH}/${SAMPLE_ID}/public"
# Check CDN caching
CACHE_STATUS=$(curl -s -I "https://imagedelivery.net/${CF_ACCOUNT_HASH}/${SAMPLE_ID}/public" \
| grep -i "cf-cache-status" | awk '{print $2}' | tr -d '\r')
if [ ! -z "$CACHE_STATUS" ]; then
echo " CDN Cache: $CACHE_STATUS"
fi
else
echo "โ Image delivery failed (HTTP $DELIVERY_STATUS)"
echo " Verify CF_ACCOUNT_HASH is correct"
fi
elif [ "$IMAGE_COUNT" = 0 ]; then
echo "โน๏ธ No images to test delivery"
elif [ -z "$CF_ACCOUNT_HASH" ]; then
echo "โน๏ธ Cannot test delivery (CF_ACCOUNT_HASH not set)"
fi
echo ""
echo "========================================="
echo "โ
Cloudflare Images Health Check Complete"
echo "========================================="
echo ""
echo "Configuration:"
echo " Account ID: ${CF_ACCOUNT_ID:0:8}..."
echo " Account Hash: ${CF_ACCOUNT_HASH:-Not set}"
echo " Zone ID: ${CF_ZONE_ID:-Not configured}"
echo ""
echo "Status:"
echo " API: Connected โ
"
echo " Authentication: Valid โ
"
echo " Images: $IMAGES_COUNT stored"
echo " Variants: $VARIANT_COUNT configured"
echo ""
echo "Next Steps:"
echo " โข Upload test image: See templates/worker-upload.ts"
echo " โข Configure variants: Run /generate-variant"
echo " โข Validate config: Run /validate-config"
echo ""
When everything is configured correctly:
๐ Checking environment variables...
โ
CF_ACCOUNT_ID: 1a2b3c4d...
โ
CF_API_TOKEN: abc123def4...
โ
CF_ACCOUNT_HASH: Vi7wi5KSItxGFsWRG2Us6Q
๐ Testing API connectivity...
โ
API connectivity: OK
๐ Validating authentication...
โ
Authentication: Valid
Images accessible: 42
๐จ Checking transformations...
โ
Zone Polish: lossless
๐ Listing configured variants...
โ
Variants configured: 3/100
Configured variants:
โข thumbnail: 300x300 (cover)
โข medium: 800x800 (scale-down)
โข large: 1600x1600 (scale-down)
๐พ Checking storage quota...
โ
Storage usage:
Images stored: 42
Quota: Unlimited (paid plan)
๐ผ๏ธ Recent images...
โ
Last 5 uploaded images:
ID: 2cdc28f0-017a-49c4-9ed7-87056c83901
Uploaded: 2025-01-15T10:30:00.000Z
Filename: product-photo.jpg
Variants: 4
๐ Testing image delivery...
โ
Image delivery: Working
Test URL: https://imagedelivery.net/Vi7wi5KSItxGFsWRG2Us6Q/2cdc28f0.../public
CDN Cache: HIT
=========================================
โ
Cloudflare Images Health Check Complete
=========================================
Configuration:
Account ID: 1a2b3c4d...
Account Hash: Vi7wi5KSItxGFsWRG2Us6Q
Zone ID: 9z8y7x6w...
Status:
API: Connected โ
Authentication: Valid โ
Images: 42 stored
Variants: 3 configured
Next Steps:
โข Upload test image: See templates/worker-upload.ts
โข Configure variants: Run /generate-variant
โข Validate config: Run /validate-config
Solution: Add to .env file:
CF_ACCOUNT_ID=your_account_id_here
Get account ID from Cloudflare dashboard: Account > Workers & Pages > Account ID
Solution: Invalid API token. Create new token:
.env: CF_API_TOKEN=your_token_hereSolution: Verify permissions:
Solution: This is normal if using flexible transformations. Create variants with:
/generate-variant
/validate-config - Validate wrangler.jsonc and bindings/generate-variant - Create new variant interactivelyreferences/api-reference.md - Complete API documentationreferences/variants-guide.md - Variant configurationreferences/setup-guide.md - Initial setup guide