Install
openclaw skills install lowkey-viralCreate short-form social media videos and photo carousel slideshows using the lowkey viral API. Generate AI-powered TikTok videos, Instagram Reels, and carousel posts programmatically. Supports 2x2 grid videos (1080x1920, 5s, 30fps) with background music and photo slideshows with text overlays. Use when the user wants to create social media content, short videos, viral clips, reels, TikToks, carousels, slideshows, or any vertical video for social platforms. Requires a lowkey viral API key (PRO or ULTIMATE plan) from https://lowkeyviral.com/dashboard/api-keys.
openclaw skills install lowkey-viralCreate short-form vertical videos and photo carousel slideshows for TikTok, Instagram Reels, and other social platforms using the lowkey viral REST API.
You need a lowkey viral API key to use this skill.
export LOWKEY_VIRAL_API_KEY="lkv_sk_your_key_here"
API keys are prefixed with lkv_sk_ and are shown only once at creation time.
default, withCaptions, noSpacesclassic_bold, background_bar, neon_glowAll API requests go to https://lowkeyviral.com/api/v1/ and require the API key as a Bearer token:
Authorization: Bearer $LOWKEY_VIRAL_API_KEY
Retry-After headercurl -s -X POST https://lowkeyviral.com/api/v1/briefs \
-H "Authorization: Bearer $LOWKEY_VIRAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "A travel app for Gen-Z backpackers"}'
Returns 5 briefs. Pick the best one and note its id.
curl -s -X POST https://lowkeyviral.com/api/v1/briefs/BRIEF_ID/generate \
-H "Authorization: Bearer $LOWKEY_VIRAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"image_model": "z_image_turbo"}'
Image models and costs per image:
z_image_turbo — 1 credit/image (fastest)p_image — 2 credits/image (high quality)flux_2_dev — 2 credits/image (highly detailed)Grid briefs always have 4 images.
curl -s -X POST https://lowkeyviral.com/api/v1/briefs/BRIEF_ID/render \
-H "Authorization: Bearer $LOWKEY_VIRAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"design": "default", "soundtrack": "City Sunshine"}'
Returns {"render_id": "..."}.
curl -s https://lowkeyviral.com/api/v1/briefs/BRIEF_ID/render/RENDER_ID/progress \
-H "Authorization: Bearer $LOWKEY_VIRAL_API_KEY"
Poll every 2-3 seconds. Responses:
{"type": "progress", "progress": 0.45, "stalled": false, ...}{"type": "done", "url": "https://...out.mp4", "size": 1234567}{"type": "error", "message": "..."}Create a manual brief with render: true to do everything in one request:
curl -s -X POST https://lowkeyviral.com/api/v1/briefs/manual \
-H "Authorization: Bearer $LOWKEY_VIRAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"hook": "these coffee shops are insane",
"title": "Best Coffee Shops",
"render": true,
"design": "default",
"soundtrack": "City Sunshine",
"images": [
{"title": "Cafe A", "description": "A cozy minimalist cafe with latte art"},
{"title": "Cafe B", "description": "Industrial style coffee shop with exposed brick"},
{"title": "Cafe C", "description": "Hidden garden cafe with hanging plants"},
{"title": "Cafe D", "description": "Rooftop cafe with city skyline view"}
],
"image_model": "z_image_turbo"
}'
Images with description but no url are AI-generated. The response includes a render_id for polling.
curl -s -X POST https://lowkeyviral.com/api/v1/briefs \
-H "Authorization: Bearer $LOWKEY_VIRAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "A skincare brand for 20-somethings", "type": "slideshow", "slide_count": 6}'
Parameters:
type: must be "slideshow"slide_count: 4-10 (default 6)curl -s -X POST https://lowkeyviral.com/api/v1/briefs/BRIEF_ID/generate \
-H "Authorization: Bearer $LOWKEY_VIRAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"image_model": "z_image_turbo"}'
Images are generated in portrait 9:16 orientation automatically.
curl -s -X POST https://lowkeyviral.com/api/v1/briefs/BRIEF_ID/render \
-H "Authorization: Bearer $LOWKEY_VIRAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"caption_style": "classic_bold"}'
Returns finished slides immediately (no polling needed):
{
"slides": [
{"index": 0, "url": "https://...slide-0.jpg"},
{"index": 1, "url": "https://...slide-1.jpg"}
]
}
curl -s -X POST https://lowkeyviral.com/api/v1/briefs/manual \
-H "Authorization: Bearer $LOWKEY_VIRAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "slideshow",
"caption_style": "classic_bold",
"render": true,
"images": [
{"title": "Step 1", "description": "Woman applying cleanser, soft morning light"},
{"title": "Step 2", "description": "Serum dropper on clear skin, close-up"},
{"title": "Step 3", "description": "Moisturizer application, dewy skin glow"}
],
"image_model": "z_image_turbo"
}'
Response includes slides array immediately. Note: hook is not accepted for slideshows — it is automatically set to the first slide's title.
If you have your own images, upload them first:
# 1. Get presigned upload URL
curl -s -X POST https://lowkeyviral.com/api/v1/uploads \
-H "Authorization: Bearer $LOWKEY_VIRAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"content_type": "image/jpeg"}'
# Response: {"upload_url": "https://...", "file_url": "https://...", ...}
# 2. Upload the file (max 10 MB)
curl -X PUT "UPLOAD_URL" \
-H "Content-Type: image/jpeg" \
--data-binary @photo.jpg
# 3. Use file_url in your brief
Supported types: image/jpeg, image/png, image/webp.
curl -s https://lowkeyviral.com/api/v1/account \
-H "Authorization: Bearer $LOWKEY_VIRAL_API_KEY"
Returns: {"credits": 42, "plan_type": "PRO", "next_reset_date": "..."}
# List all briefs (paginated)
curl -s "https://lowkeyviral.com/api/v1/briefs?limit=20" \
-H "Authorization: Bearer $LOWKEY_VIRAL_API_KEY"
# Filter by type
curl -s "https://lowkeyviral.com/api/v1/briefs?type=slideshow" \
-H "Authorization: Bearer $LOWKEY_VIRAL_API_KEY"
# Get single brief
curl -s https://lowkeyviral.com/api/v1/briefs/BRIEF_ID \
-H "Authorization: Bearer $LOWKEY_VIRAL_API_KEY"
# Delete a brief
curl -s -X DELETE https://lowkeyviral.com/api/v1/briefs/BRIEF_ID \
-H "Authorization: Bearer $LOWKEY_VIRAL_API_KEY"
| Operation | Grid | Slideshow |
|---|---|---|
| AI briefs (5 returned) | 2 | 2 |
| Manual brief | 0 | 0 |
| Images (z_image_turbo) | 4 total | 1/image |
| Images (p_image) | 8 total | 2/image |
| Images (flux_2_dev) | 8 total | 2/image |
| Render | 1 | 1 |
Full AI grid video: 7-11 credits. Full AI slideshow (6 slides): 9-15 credits. Bring your own images: 1 credit to render.
default — standard 2x2 layoutwithCaptions — adds text captions on each imagenoSpaces — edge-to-edge compact gridclassic_bold — white text with black outlinebackground_bar — white text on dark semi-transparent barneon_glow — bright green (#00ff88) text with glow effectAdvertime, And Just Like That, Blippy Trance, Brewing Potions, City Sunshine, Funshine, Happy Whistling Ukulele, I Guess What I'm Trying to Say, La Citadelle, Lukewarm Banjo, Magical Transition, Martini Sunset, Meditating Beat, Night in Venice, River Meditation, Soundtrack From the Starcourt Mall, Strength of the Titans, Study and Relax, Sun Up Gunned Down, The Celebrated Minuet
z_image_turbo — fastest, 1 credit/imagep_image — high quality, 2 credits/imageflux_2_dev — highly detailed, 2 credits/imageAll errors return:
{"error": {"code": "error_code", "message": "Human-readable description"}}
| Status | Code | Meaning |
|---|---|---|
| 401 | unauthorized | Invalid or missing API key |
| 403 | forbidden | PRO or ULTIMATE plan required |
| 402 | insufficient_credits | Not enough credits |
| 422 | validation_error | Bad parameters |
| 404 | not_found | Resource not found |
| 429 | rate_limited | Too many requests (check Retry-After header) |
| 500 | internal_error | Server error |
https://lowkeyviral.com/api/v1/ only.