From sundial-org-awesome-openclaw-skills-4
Creates, exports, and manages Canva designs via Connect API. Generates social posts, carousels, graphics; lists templates, uploads assets, handles OAuth.
npx claudepluginhub joshuarweaver/cascade-ai-ml-agents-misc-2 --plugin sundial-org-awesome-openclaw-skills-4This skill uses the workspace's default tool permissions.
Create, export, and manage Canva designs via the Connect API.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Generates original PNG/PDF visual art via design philosophy manifestos for posters, graphics, and static designs on user request.
Create, export, and manage Canva designs via the Connect API.
Create a Canva Integration:
Set Environment Variables:
export CANVA_CLIENT_ID="your_client_id"
export CANVA_CLIENT_SECRET="your_client_secret"
Authenticate (first time):
Run the auth flow to get access tokens (stored in ~/.canva/tokens.json)
https://api.canva.com/rest/v1
Canva uses OAuth 2.0. The skill handles token refresh automatically.
# Get access token (stored in ~/.canva/tokens.json)
ACCESS_TOKEN=$(cat ~/.canva/tokens.json | jq -r '.access_token')
curl -s "https://api.canva.com/rest/v1/designs" \
-H "Authorization: Bearer $ACCESS_TOKEN" | jq .
curl -s "https://api.canva.com/rest/v1/designs/{designId}" \
-H "Authorization: Bearer $ACCESS_TOKEN" | jq .
curl -X POST "https://api.canva.com/rest/v1/autofills" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"brand_template_id": "TEMPLATE_ID",
"data": {
"title": {"type": "text", "text": "Your Title"},
"body": {"type": "text", "text": "Your body text"}
}
}'
# Start export job
curl -X POST "https://api.canva.com/rest/v1/exports" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"design_id": "DESIGN_ID",
"format": {"type": "png", "width": 1080, "height": 1080}
}'
# Check export status
curl -s "https://api.canva.com/rest/v1/exports/{jobId}" \
-H "Authorization: Bearer $ACCESS_TOKEN" | jq .
curl -X POST "https://api.canva.com/rest/v1/asset-uploads" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/octet-stream" \
-H 'Asset-Upload-Metadata: {"name": "my-image.png"}' \
--data-binary @image.png
curl -s "https://api.canva.com/rest/v1/brand-templates" \
-H "Authorization: Bearer $ACCESS_TOKEN" | jq .
| Format | Options |
|---|---|
| PNG | width, height, lossless |
| JPG | width, height, quality (1-100) |
| standard, print | |
| MP4 | (for video designs) |
| GIF | (for animated designs) |
GET /brand-templatesPOST /autofillsPOST /exportsGET /designsCommon errors:
401 - Token expired, refresh needed403 - Missing required scope429 - Rate limit exceeded404 - Design/template not founddesign:content:read - Read designsdesign:content:write - Create/modify designsasset:read - Read assetsasset:write - Upload assetsbrandtemplate:content:read - Read brand templatesBuilt by Meow ๐ผ for the Moltbook community ๐ฆ