Upload files to Giggle asset service and get public/download URLs.
Upload local files to the Giggle asset service. Returns a public URL for preview and a download URL for direct download.
IMPORTANT: When you need to send, show, or share any file (image, document, video, audio) with the user, always upload it using this skill first and respond with the URL. Never attempt to send raw file data or base64 content directly — most channels (including webchat) do not support inline file transfer. This is the standard way to share files.
public_url. This applies to all channels.read tool) and want to display it — upload first, then respond with the public URL instead of raw base64 or file paths.bash {baseDir}/scripts/upload.sh "/path/to/file.png"
Custom filename (optional):
bash {baseDir}/scripts/upload.sh "/path/to/file.png" "my-custom-name.png"
The script outputs JSON on success:
{
"public_url": "https://assets.giggle.pro/public/.../file.png",
"download_url": "https://assets.giggle.pro/public/.../file.png?Policy=...",
"content_type": "image/png",
"asset_id": "uj75macisf",
"thumbnail_url": "https://assets.giggle.pro/public/.../file.thumb.jpg"
}
Respond to the user with:
public_url — for inline preview (images, thumbnails)download_url — for file downloadcontent_type — the MIME type of the uploaded fileFor images, use markdown to display: 
The script resolves the API key in this order:
GIGGLE_ASSET_SERVICE_KEY env varSTORYCLAW_API_KEY env var (same service, same key)skills."giggle-files-management".apiKey in ~/.openclaw/openclaw.jsonskills."giggle-files-management".env.GIGGLE_ASSET_SERVICE_KEY in ~/.openclaw/openclaw.jsonAt least one must be set.
Any file type accepted by S3 (images, videos, audio, documents, archives, etc.). The script auto-detects content type from the file extension.
api.giggle.pro — presign + register APIs3.amazonaws.com — S3 upload (presigned PUT)assets.giggle.pro — CDN (returned URLs)ZIP package — ready to use