Run comprehensive health check and configuration validation for Cloudflare Images. Tests API connectivity, verifies authentication, checks transformations enabled, lists variants, and shows quota usage.
Performs comprehensive health check and validates Cloudflare Images configuration, API connectivity, authentication, variants, and quota.
/plugin marketplace add secondsky/claude-skills/plugin install cloudflare-images@claude-skillsRun 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