Skip to main content Skills Marketplace Discover and explore AI skills built by the community.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Copy promptShow prompt details A direct command skips the review prompt. Inspect the source before running it.
npx skills add https://github.com/Dicklesworthstone/agent_flywheel_clawdbot_skills_and_integrations --skill giilThe command stays on one line. Scroll horizontally to inspect it before copying.
Prefer a local copy? Download the files currently available to SkillsMP.
Download Zip Downloading... More from this repository
Related occupations SOC
Based on SOC occupation classification
name giil description Get Image [from] Internet Link - Zero-setup CLI for downloading full-resolution images from iCloud, Dropbox, Google Photos, and Google Drive share links. Four-tier capture strategy, browser automation, HEIC conversion, album support. Node.js/Playwright.
GIIL — Get Image [from] Internet Link
A zero-setup CLI that downloads full-resolution images from cloud photo shares. The missing link between your iPhone screenshots and remote AI coding sessions.
Why This Exists
The primary use case: Remote AI-Assisted Debugging
You're SSH'd into a remote server running Claude Code, Codex, or another AI assistant. You need to debug a UI issue on your iPhone, but how do you get that screenshot to your remote terminal?
Without giil:
Download image locally → SCP to server → Tell AI the path
Email yourself → Download on server → Hope it works
Set up complex file sync between devices
With giil:
giil "https://share.icloud.com/photos/0a1Abc_xYz..." --json
One command. AI sees it instantly. No file transfers, no context switching.
The Workflow
iPhone Screenshot → iCloud Sync → Photos.app Share Link → Paste to SSH → giil Downloads → AI Analyzes
Why Cloud Shares Are Hard
Problem Why It's Hard How giil Solves It JavaScript-heavy SPAs Standard curl/wget can't execute JS Headless Chromium via Playwright Dynamic image loading Images load asynchronously from CDN Network interception captures CDN responses
No direct download links URLs are session-specific and expire Clicks Download button or intercepts live requests
Copy/paste loses quality Manual screenshots compress images Captures original resolution from source
HEIC format on Apple Many tools can't process HEIC/HEIF Platform-aware conversion (sips/heif-convert)
Quick Start
curl -fsSL "https://raw.githubusercontent.com/Dicklesworthstone/giil/main/install.sh?v=3.0.0" | bash
giil "https://share.icloud.com/photos/02cD9okNHvVd-uuDnPCH3ZEEA"
giil "https://share.icloud.com/photos/..." --json
giil "https://share.icloud.com/photos/..." --all --output ~/album
Note: First run downloads Playwright Chromium (~200MB, cached in ~/.cache/giil/).
Supported Platforms Platform URL Patterns Method Browser Required iCloud share.icloud.com/photos/*, icloud.com/photos/#*4-tier capture strategy Yes Dropbox dropbox.com/s/*, dropbox.com/scl/fi/*Direct curl (raw=1) No Google Photos photos.app.goo.gl/*, photos.google.com/share/*URL extraction + =s0 modifier Yes Google Drive drive.google.com/file/d/*, drive.google.com/open?id=*Multi-tier with auth detection Yes
Dropbox Fast Path: Direct curl download with no browser overhead—typically 1-2 seconds.
Google Photos Full-Res: Automatically appends =s0 to CDN URLs for maximum resolution.
Four-Tier Capture Strategy giil implements a fallback strategy to maximize reliability:
1. Download Button (Highest Quality)
Locates visible Download button using 9 selector patterns
Clicks and waits for browser download event
Obtains original file (no re-encoding losses)
Works with HEIC/HEIF originals
2. Network Interception (Full Resolution)
Monitors all HTTP responses for CDN patterns (cvws.icloud-content.com, etc.)
Filters by content-type (image formats only)
Captures largest image buffer (>10KB threshold to skip thumbnails)
Works even if UI elements are obscured
3. Element Screenshot
Queries for image elements using 10 selector patterns
Verifies element is visible and ≥100×100 pixels
Takes PNG screenshot of the element
4. Viewport Screenshot (Last Resort)
Captures visible viewport (1920×1080)
Always succeeds if page loads
Useful for debugging page state
Command Reference
Basic Usage
Options Flag Default Description --output DIR.Output directory --preserveoff Keep original bytes (skip MozJPEG compression) --convert FMT— Convert to: jpeg, png, webp --quality N85JPEG quality 1-100 --base64off Output base64 to stdout (no file saved) --jsonoff Output JSON metadata --alloff Download all photos from album --timeout N60Page load timeout in seconds --debugoff Save debug artifacts on failure --verboseoff Show detailed progress --traceoff Enable Playwright tracing for deep debugging --print-urloff Output resolved CDN URL (don't download) --debug-dir DIR.Directory for debug artifacts --updateoff Force reinstall dependencies
Output Modes
Default: File Path giil "https://share.icloud.com/photos/XXX"
IMAGE_PATH=$(giil "..." --output ~/Downloads 2>/dev/null)
JSON Mode giil "https://share.icloud.com/photos/XXX" --json
{
"ok" : true ,
"schema_version" : "1" ,
"platform" : "icloud" ,
"path" : "/absolute/path/to/icloud_20240115_143245.jpg" ,
"datetime" : "2024-01-15T14:32:45.000Z" ,
"sourceUrl" : "https://cvws.icloud-content.com/..." ,
"method" : "network" ,
"size" : 245678 ,
"width" : 4032 ,
"height" : 3024
}
{
"ok" : false ,
"schema_version" : "1" ,
"platform" : "icloud" ,
"error" : {
"code" : "AUTH_REQUIRED" ,
"message" : "Login required - link is not publicly shared" ,
"remediation" : "The file is not publicly shared. The owner must enable public access."
}
}
Field Description methodCapture strategy: download, network, element-screenshot, viewport-screenshot, direct error.codeError code (see Exit Codes) error.remediationSuggested fix
Base64 Mode
giil "..." --base64 | base64 -d > image.jpg
echo "data:image/jpeg;base64,$(giil '...' --base64) " > uri.txt
giil "..." --base64 | curl -X POST -d @- https://api.example.com/upload
URL-Only Mode giil "https://share.icloud.com/photos/XXX" --print-url
Useful for external downloaders, caching, or debugging.
Album Mode Download entire shared albums with --all:
giil "https://share.icloud.com/photos/XXX" --all --output ~/album
How It Works
Load album page
Detect thumbnail grid (11 selector strategies)
For each thumbnail: click → capture → close → next
Output one path/JSON per photo
Album Features
Resilient: Continues to next photo if one fails
Indexed filenames: _001, _002, etc. for ordering
Rate limiting: 1 second delay between photos (polite downloading)
Exponential backoff: Automatic retry on rate limit signals
Album Output
/path/to/album/icloud_20240115_143245_001.jpg
/path/to/album/icloud_20240115_143246_002.jpg
{"path" : "...001.jpg" , "method" : "download" , "width" : 4032, ...}
{"path" : "...002.jpg" , "method" : "network" , "width" : 3024, ...}
Image Processing Pipeline
EXIF Datetime Extraction Priority order for filename generation:
DateTimeOriginal (when photo was taken)
CreateDate
DateTimeDigitized
ModifyDate
Current time (fallback)
HEIC/HEIF Conversion Platform Tool Notes macOS sipsBuilt-in, always available Linux heif-convertRequires libheif-examples package
sudo apt-get install libheif-examples
sudo dnf install libheif-tools
MozJPEG Compression (Default) By default, giil compresses with MozJPEG for optimal size/quality:
40-50% smaller than standard JPEG at equivalent quality
Quality 85 (configurable via --quality)
Use --preserve to keep original bytes
Filename Format icloud_YYYYMMDD_HHMMSS[_NNN][_counter].jpg
│ │ │
│ │ └── Collision counter (if file exists)
│ └── Album index (--all mode only)
└── Date/time from EXIF or capture time
Download Verification giil validates downloads through three stages:
1. Content-Type Validation Validates HTTP Content-Type matches expected image types.
2. Magic Bytes Detection Verifies binary signature regardless of server claims:
Format Magic Bytes JPEG FF D8 FFPNG 89 50 4E 47GIF 47 49 46 38WebP RIFF container with WEBP HEIC/HEIF ISO base media file (ftyp box)
3. HTML Error Page Detection Rejects HTML content that indicates an error page instead of an image.
Exit Codes Code Name Description 0Success Image captured and saved/output 1Capture Failure All capture strategies failed 2Usage Error Invalid arguments or missing URL 3Dependency Error Node.js, Playwright, or Chromium issue 10Network Error Timeout, DNS failure, unreachable host 11Auth Required Login redirect, password required, not publicly shared 12Not Found Expired link, deleted file, 404 13Unsupported Type Video, Google Doc, or non-image content 20Internal Error Bug in giil (please report!)
giil "https://share.icloud.com/photos/XXX" 2>/dev/null
case $? in
0) echo "Success!" ;;
10) echo "Network issue - retry later" ;;
11) echo "Link not public - ask owner to share" ;;
12) echo "Link expired" ;;
*) echo "Failed with code $?" ;;
esac
Environment Variables
Runtime Variables Variable Description Default XDG_CACHE_HOMEBase cache directory ~/.cacheGIIL_HOMEgiil runtime directory $XDG_CACHE_HOME/giilPLAYWRIGHT_BROWSERS_PATHCustom Chromium cache $GIIL_HOME/ms-playwrightGIIL_NO_GUMDisable gum styling unset GIIL_CHECK_UPDATESEnable update checking unset
Installer Variables Variable Description Default DESTCustom install directory ~/.local/binGIIL_SYSTEMInstall to /usr/local/bin unset GIIL_VERIFYVerify SHA256 checksum unset GIIL_VERSIONInstall specific version latest
File Locations Path Purpose ~/.local/bin/giilMain script ~/.cache/giil/Runtime directory ~/.cache/giil/node_modules/Playwright, Sharp, exifr ~/.cache/giil/extractor.mjsGenerated Node.js script ~/.cache/giil/ms-playwright/Chromium browser cache
Debug Artifacts (on failure with --debug) File Contents giil_debug_<timestamp>.pngFull-page screenshot giil_debug_<timestamp>.htmlPage DOM content
Performance Phase First Run Subsequent Chromium download 30-60s Skipped (cached) Browser launch 2-3s 2-3s Page load 3-10s 3-10s Image capture 1-5s 1-5s Total 40-80s 5-15s
Dropbox: 1-2 seconds (direct curl, no browser).
Troubleshooting
"Auth required" error The link isn't publicly shared. Owner must enable public access in their cloud settings.
Timeout errors Increase timeout: giil "..." --timeout 120
Wrong/small image captured Run with --debug to see page state. Report issue with debug artifacts.
HEIC conversion fails on Linux sudo apt-get install libheif-examples
sudo dnf install libheif-tools
Chromium fails to launch giil "..." --update
cd ~/.cache/giil && npx playwright install --with-deps chromium
Debugging
giil "..." --verbose
giil "..." --debug
giil "..." --trace
npx playwright show-trace ~/.cache/giil/trace.zip
Installation
curl -fsSL "https://raw.githubusercontent.com/Dicklesworthstone/giil/main/install.sh?v=3.0.0" | bash
GIIL_VERIFY=1 curl -fsSL .../install.sh | bash
GIIL_SYSTEM=1 curl -fsSL .../install.sh | bash
curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/giil/main/giil -o ~/.local/bin/giil
chmod +x ~/.local/bin/giil
Uninstallation rm ~/.local/bin/giil
rm -rf ~/.cache/giil
rm -rf ~/.cache/ms-playwright
Security & Privacy
Local execution: All processing happens on your machine
No telemetry: No data sent anywhere except to cloud services
No authentication stored: Uses public share mechanism
No cookies saved: Browser context is ephemeral
Temp file cleanup: Downloaded files cleaned up after processing
Integration with Flywheel Tool Integration Claude Code Download screenshots for visual debugging via SSH NTM Share images between multi-agent sessions Agent Mail Attach downloaded images to agent messages CASS Search sessions that used giil for image context