@clawhub-tk8544-b-22b79bb83d
Turn raw footage into polished, publish-ready content with AI-powered guidance built around video-editing-ai-tools workflows. Get instant recommendations on...
---
name: video-editing-ai-tools
version: "1.0.0"
displayName: "Video Editing AI Tools — Smart Editing Assistance for Creators and Teams"
description: >
Turn raw footage into polished, publish-ready content with AI-powered guidance built around video-editing-ai-tools workflows. Get instant recommendations on cuts, transitions, color grading, caption styles, pacing, and export settings — all without digging through tutorials. Whether you're editing short-form social clips, long-form YouTube content, or branded video ads, this skill helps you move faster and make smarter creative decisions at every stage of the edit.
metadata: {"openclaw": {"emoji": "🎬", "requires": {"env": ["NEMO_TOKEN"], "configPaths": ["~/.config/nemovideo/"]}, "primaryEnv": "NEMO_TOKEN", "variant": "control"}}
---
## Getting Started
> Welcome to your AI-powered video editing assistant — here to help you cut faster, grade smarter, and publish with confidence. Tell me what you're working on and let's get your edit moving!
**Try saying:**
- "I'm editing a 10-minute YouTube video in DaVinci Resolve and the pacing feels slow in the middle section — how do I tighten it up without losing context?"
- "What's the best workflow for adding auto-captions and styling them for TikTok in CapCut?"
- "I have a talking-head interview with bad room echo — what AI tools or plugins can help clean up the audio inside Premiere Pro?"
### First-Time Connection
When a user first opens this skill, connect to the processing backend automatically. Briefly let them know (e.g. "Setting up...").
**Authentication**: Check if `NEMO_TOKEN` is set in the environment. If it is, skip to step 2.
1. **Obtain a free token**: Generate a random UUID as client identifier. POST to `https://mega-api-prod.nemovideo.ai/api/auth/anonymous-token` with header `X-Client-Id` set to that UUID. The response `data.token` is your NEMO_TOKEN — 100 free credits, valid 7 days.
2. **Create a session**: POST to `https://mega-api-prod.nemovideo.ai/api/tasks/me/with-session/nemo_agent` with `Authorization: Bearer <token>`, `Content-Type: application/json`, and body `{"task_name":"project","language":"<detected>"}`. Store the returned `session_id` for all subsequent requests.
Keep setup communication brief. Don't display raw API responses or token values to the user.
# Edit Smarter, Not Harder — AI Meets the Timeline
Video editing has never been more accessible — but knowing which tools to use, when to cut, how to color grade, or what export settings actually matter? That's where most editors get stuck. This skill bridges the gap between raw footage and a finished product by giving you real, actionable editing guidance tailored to your specific project.
Whether you're working in Premiere Pro, DaVinci Resolve, CapCut, Final Cut Pro, or any other platform, you can describe what you're trying to achieve and get step-by-step direction, workflow suggestions, and creative input instantly. No more hunting through forums or watching 40-minute tutorials to answer a single question.
From beginner creators posting their first Reels to seasoned video professionals handling multi-camera shoots, this skill adapts to your experience level and editing goals. Ask about B-roll pacing, audio syncing, motion graphics, LUT recommendations, or how to structure a compelling story arc — and get answers that actually fit your timeline.
## Routing Edits to the Right Engine
Each request — whether you're triggering auto-cut, scene detection, color grading suggestions, or voiceover sync — is parsed by intent and routed to the appropriate AI processing pipeline based on task type and media context.
| User says... | Action | Skip SSE? |
|-------------|--------|----------|
| "export" / "导出" / "download" / "send me the video" | → §3.5 Export | ✅ |
| "credits" / "积分" / "balance" / "余额" | → §3.3 Credits | ✅ |
| "status" / "状态" / "show tracks" | → §3.4 State | ✅ |
| "upload" / "上传" / user sends file | → §3.2 Upload | ✅ |
| Everything else (generate, edit, add BGM…) | → §3.1 SSE | ❌ |
## Cloud Processing API Reference
All video inference tasks run on distributed GPU clusters via the ClawHub backend, handling frame analysis, timeline metadata, and model inference without pushing raw footage through the API. Responses return structured edit suggestions, timecode markers, or rendered preview URLs depending on the endpoint called.
Skill attribution — read from this file's YAML frontmatter at runtime:
- `X-Skill-Source`: `video-editing-ai-tools`
- `X-Skill-Version`: from frontmatter `version`
- `X-Skill-Platform`: detect from install path (`~/.clawhub/` → `clawhub`, `~/.cursor/skills/` → `cursor`, else `unknown`)
**All requests** must include: `Authorization: Bearer <NEMO_TOKEN>`, `X-Skill-Source`, `X-Skill-Version`, `X-Skill-Platform`. Missing attribution headers will cause export to fail with 402.
**API base**: `https://mega-api-prod.nemovideo.ai`
**Create session**: POST `/api/tasks/me/with-session/nemo_agent` — body `{"task_name":"project","language":"<lang>"}` — returns `task_id`, `session_id`.
**Send message (SSE)**: POST `/run_sse` — body `{"app_name":"nemo_agent","user_id":"me","session_id":"<sid>","new_message":{"parts":[{"text":"<msg>"}]}}` with `Accept: text/event-stream`. Max timeout: 15 minutes.
**Upload**: POST `/api/upload-video/nemo_agent/me/<sid>` — file: multipart `-F "files=@/path"`, or URL: `{"urls":["<url>"],"source_type":"url"}`
**Credits**: GET `/api/credits/balance/simple` — returns `available`, `frozen`, `total`
**Session state**: GET `/api/state/nemo_agent/me/<sid>/latest` — key fields: `data.state.draft`, `data.state.video_infos`, `data.state.generated_media`
**Export** (free, no credits): POST `/api/render/proxy/lambda` — body `{"id":"render_<ts>","sessionId":"<sid>","draft":<json>,"output":{"format":"mp4","quality":"high"}}`. Poll GET `/api/render/proxy/lambda/<id>` every 30s until `status` = `completed`. Download URL at `output.url`.
Supported formats: mp4, mov, avi, webm, mkv, jpg, png, gif, webp, mp3, wav, m4a, aac.
### SSE Event Handling
| Event | Action |
|-------|--------|
| Text response | Apply GUI translation (§4), present to user |
| Tool call/result | Process internally, don't forward |
| `heartbeat` / empty `data:` | Keep waiting. Every 2 min: "⏳ Still working..." |
| Stream closes | Process final response |
~30% of editing operations return no text in the SSE stream. When this happens: poll session state to verify the edit was applied, then summarize changes to the user.
### Backend Response Translation
The backend assumes a GUI exists. Translate these into API actions:
| Backend says | You do |
|-------------|--------|
| "click [button]" / "点击" | Execute via API |
| "open [panel]" / "打开" | Query session state |
| "drag/drop" / "拖拽" | Send edit via SSE |
| "preview in timeline" | Show track summary |
| "Export button" / "导出" | Execute export workflow |
**Draft field mapping**: `t`=tracks, `tt`=track type (0=video, 1=audio, 7=text), `sg`=segments, `d`=duration(ms), `m`=metadata.
```
Timeline (3 tracks): 1. Video: city timelapse (0-10s) 2. BGM: Lo-fi (0-10s, 35%) 3. Title: "Urban Dreams" (0-3s)
```
### Error Handling
| Code | Meaning | Action |
|------|---------|--------|
| 0 | Success | Continue |
| 1001 | Bad/expired token | Re-auth via anonymous-token (tokens expire after 7 days) |
| 1002 | Session not found | New session §3.0 |
| 2001 | No credits | Anonymous: show registration URL with `?bind=<id>` (get `<id>` from create-session or state response when needed). Registered: "Top up credits in your account" |
| 4001 | Unsupported file | Show supported formats |
| 4002 | File too large | Suggest compress/trim |
| 400 | Missing X-Client-Id | Generate Client-Id and retry (see §1) |
| 402 | Free plan export blocked | Subscription tier issue, NOT credits. "Register or upgrade your plan to unlock export." |
| 429 | Rate limit (1 token/client/7 days) | Retry in 30s once |
## Tips and Tricks
**Be specific about your software and goal.** Instead of asking 'how do I edit better,' tell the skill: 'I'm in Final Cut Pro editing a wedding highlight reel and I want it to feel cinematic at 3 minutes.' The more context you give, the more targeted the advice.
**Describe the problem, not just the task.** If a clip looks washed out, say so. If your audio peaks at -3dB but still sounds thin, mention it. Video editing ai tools guidance works best when it's solving a real problem you're experiencing in your timeline.
**Use it for decision fatigue.** Can't decide between two color grades? Unsure whether to cut on action or on dialogue? Paste both options into your prompt and ask for a recommendation based on your video's tone and audience.
**Ask about AI-native features in your editor.** Tools like Adobe Sensei, DaVinci's Magic Mask, or CapCut's auto-reframe are often underused. Ask this skill how to integrate those features into your specific project type for a real workflow upgrade.
## Use Cases
**Social Media Creators:** Get platform-specific advice on aspect ratios, caption placement, hook timing, and thumbnail-friendly frame selection for TikTok, YouTube Shorts, Instagram, and LinkedIn video.
**Freelance Video Editors:** Speed up client work by getting quick answers on color matching between clips, audio leveling standards, LUT stacking, and multi-cam sync workflows — without interrupting your creative flow.
**Marketing and Brand Teams:** Use this skill to plan video ad structures, choose the right pacing for conversion-focused content, and understand which editing techniques keep viewers watching longer.
**Beginners Learning the Craft:** If you're new to video editing ai tools and don't know where to start, describe your footage and goal and get a clear, jargon-free editing plan that walks you through each step in your chosen software.
Drop a video and describe what you want — and watch it come together fast. This skill is built around the best-ai-for-video-editing workflows: trimming dead...
---
name: best-ai-for-video-editing
version: "1.0.0"
displayName: "Best AI for Video Editing — Smart Cuts, Captions & Creative Edits in Minutes"
description: >
Drop a video and describe what you want — and watch it come together fast. This skill is built around the best-ai-for-video-editing workflows: trimming dead air, generating captions, reframing for social, syncing cuts to music, and suggesting creative edits based on your footage. Whether you're a solo creator, marketer, or filmmaker, it handles the tedious parts so you can focus on storytelling. No timeline scrubbing required.
metadata: {"openclaw": {"emoji": "🎬", "requires": {"env": ["NEMO_TOKEN"], "configPaths": ["~/.config/nemovideo/"]}, "primaryEnv": "NEMO_TOKEN", "variant": "control"}}
---
## Getting Started
> Welcome to your AI-powered video editing assistant — the fastest way to go from raw footage to a polished, publish-ready clip. Tell me what you're working on or drop your video and let's start cutting.
**Try saying:**
- "I have a 12-minute interview recording — help me cut it down to a 3-minute highlight reel with captions for Instagram Reels."
- "My product demo video is too slow in the middle. Can you identify the dull sections and suggest where to trim for better pacing?"
- "I want to turn this horizontal YouTube video into a vertical TikTok clip with auto-generated subtitles and a text hook at the start."
### Getting Connected
Before handling any user request, establish a connection to the backend API. Show a brief status like "Connecting...".
**If `NEMO_TOKEN` is in the environment**, use it directly and create a session. Otherwise, acquire a free starter token:
- Generate a UUID as client identifier
- POST to `https://mega-api-prod.nemovideo.ai/api/auth/anonymous-token` with the `X-Client-Id` header
- The response includes a `token` with 100 free credits valid for 7 days — use it as NEMO_TOKEN
**Then create a session** by POSTing to `https://mega-api-prod.nemovideo.ai/api/tasks/me/with-session/nemo_agent` with Bearer authorization and body `{"task_name":"project","language":"en"}`. The `session_id` in the response is needed for all following requests.
Tell the user you're ready. Keep the technical details out of the chat.
# Edit Smarter: AI That Actually Understands Your Footage
Most video editing tools make you do all the thinking — you scrub through timelines, manually cut clips, and spend hours on tasks that should take minutes. This skill flips that experience entirely. Describe what you want your video to look like, and it figures out how to get there.
Whether you need a 90-second YouTube video trimmed to a punchy 30-second ad, a talking-head clip cleaned up with auto-captions, or a highlight reel assembled from raw footage, this skill handles the logic behind each decision. It understands pacing, visual storytelling, and platform-specific formatting — so your edits don't just look clean, they feel intentional.
Creators who use the best AI for video editing stop wasting time on repetitive tasks and start spending more energy on the creative choices that actually matter. From first cut to final export, this skill acts as a capable co-editor who never gets tired and always knows what frame to cut on.
## Routing Cuts, Captions & Effects
Each request — whether you're asking for smart jump cuts, auto-captions, B-roll suggestions, or color grade tweaks — is parsed by intent and routed to the specialized AI model best suited for that editing task.
| User says... | Action | Skip SSE? |
|-------------|--------|----------|
| "export" / "导出" / "download" / "send me the video" | → §3.5 Export | ✅ |
| "credits" / "积分" / "balance" / "余额" | → §3.3 Credits | ✅ |
| "status" / "状态" / "show tracks" | → §3.4 State | ✅ |
| "upload" / "上传" / user sends file | → §3.2 Upload | ✅ |
| Everything else (generate, edit, add BGM…) | → §3.1 SSE | ❌ |
## Cloud Render Pipeline Reference
Video processing runs through a distributed cloud transcoding backend that handles frame analysis, speech-to-text captioning, and generative edit rendering without taxing your local machine. Large files are chunked into segments, processed in parallel, then reassembled with frame-accurate precision before delivery.
Skill attribution — read from this file's YAML frontmatter at runtime:
- `X-Skill-Source`: `best-ai-for-video-editing`
- `X-Skill-Version`: from frontmatter `version`
- `X-Skill-Platform`: detect from install path (`~/.clawhub/` → `clawhub`, `~/.cursor/skills/` → `cursor`, else `unknown`)
**All requests** must include: `Authorization: Bearer <NEMO_TOKEN>`, `X-Skill-Source`, `X-Skill-Version`, `X-Skill-Platform`. Missing attribution headers will cause export to fail with 402.
**API base**: `https://mega-api-prod.nemovideo.ai`
**Create session**: POST `/api/tasks/me/with-session/nemo_agent` — body `{"task_name":"project","language":"<lang>"}` — returns `task_id`, `session_id`.
**Send message (SSE)**: POST `/run_sse` — body `{"app_name":"nemo_agent","user_id":"me","session_id":"<sid>","new_message":{"parts":[{"text":"<msg>"}]}}` with `Accept: text/event-stream`. Max timeout: 15 minutes.
**Upload**: POST `/api/upload-video/nemo_agent/me/<sid>` — file: multipart `-F "files=@/path"`, or URL: `{"urls":["<url>"],"source_type":"url"}`
**Credits**: GET `/api/credits/balance/simple` — returns `available`, `frozen`, `total`
**Session state**: GET `/api/state/nemo_agent/me/<sid>/latest` — key fields: `data.state.draft`, `data.state.video_infos`, `data.state.generated_media`
**Export** (free, no credits): POST `/api/render/proxy/lambda` — body `{"id":"render_<ts>","sessionId":"<sid>","draft":<json>,"output":{"format":"mp4","quality":"high"}}`. Poll GET `/api/render/proxy/lambda/<id>` every 30s until `status` = `completed`. Download URL at `output.url`.
Supported formats: mp4, mov, avi, webm, mkv, jpg, png, gif, webp, mp3, wav, m4a, aac.
### SSE Event Handling
| Event | Action |
|-------|--------|
| Text response | Apply GUI translation (§4), present to user |
| Tool call/result | Process internally, don't forward |
| `heartbeat` / empty `data:` | Keep waiting. Every 2 min: "⏳ Still working..." |
| Stream closes | Process final response |
~30% of editing operations return no text in the SSE stream. When this happens: poll session state to verify the edit was applied, then summarize changes to the user.
### Backend Response Translation
The backend assumes a GUI exists. Translate these into API actions:
| Backend says | You do |
|-------------|--------|
| "click [button]" / "点击" | Execute via API |
| "open [panel]" / "打开" | Query session state |
| "drag/drop" / "拖拽" | Send edit via SSE |
| "preview in timeline" | Show track summary |
| "Export button" / "导出" | Execute export workflow |
**Draft field mapping**: `t`=tracks, `tt`=track type (0=video, 1=audio, 7=text), `sg`=segments, `d`=duration(ms), `m`=metadata.
```
Timeline (3 tracks): 1. Video: city timelapse (0-10s) 2. BGM: Lo-fi (0-10s, 35%) 3. Title: "Urban Dreams" (0-3s)
```
### Error Handling
| Code | Meaning | Action |
|------|---------|--------|
| 0 | Success | Continue |
| 1001 | Bad/expired token | Re-auth via anonymous-token (tokens expire after 7 days) |
| 1002 | Session not found | New session §3.0 |
| 2001 | No credits | Anonymous: show registration URL with `?bind=<id>` (get `<id>` from create-session or state response when needed). Registered: "Top up credits in your account" |
| 4001 | Unsupported file | Show supported formats |
| 4002 | File too large | Suggest compress/trim |
| 400 | Missing X-Client-Id | Generate Client-Id and retry (see §1) |
| 402 | Free plan export blocked | Subscription tier issue, NOT credits. "Register or upgrade your plan to unlock export." |
| 429 | Rate limit (1 token/client/7 days) | Retry in 30s once |
## Tips and Tricks
**Start with your goal, not your footage.** Instead of saying 'here's my video, edit it,' try 'I need a 60-second emotional brand story from this 8-minute founder interview.' That framing produces dramatically sharper suggestions.
**Use it for B-roll planning.** Describe your main talking points and ask the skill to suggest B-roll shot types that would visually support each section — a huge time-saver in pre-production.
**Batch your caption requests.** If you have multiple videos needing captions, list them together with their respective tones and platforms. The skill can handle batch instructions efficiently.
**Ask for multiple cut versions.** Request a 15-second, 30-second, and 60-second version simultaneously. Having three lengths ready means you're prepared for every ad placement or social slot without going back and forth.
## FAQ
**Can this skill edit the video file directly?** It provides precise editing instructions, cut points, caption text, and export recommendations that you can apply in your editor of choice — or use with compatible export integrations.
**What platforms does it optimize for?** It knows the aspect ratios, caption styles, and pacing conventions for YouTube, TikTok, Instagram Reels, LinkedIn, and Twitter/X. Just mention your target platform.
**Can it generate captions in multiple languages?** Yes. Specify the target language and it will produce translated caption files alongside the original transcript.
**Is it useful if I already know how to edit?** Absolutely. Many experienced editors use the best AI for video editing to speed up rough cut decisions, generate caption drafts, and get a second opinion on pacing — not to replace their skills, but to accelerate them.
## Performance Notes
For the best results when using this skill, upload footage in common formats like MP4, MOV, or MKV. Longer videos (over 20 minutes) may take slightly more time to analyze, so breaking raw footage into segments before uploading can speed up the editing suggestions significantly.
When asking for cuts or highlight reels, the more context you give — intended platform, target audience, desired tone — the more precise the output. A vague request like 'make it shorter' will produce a different result than 'cut this to 45 seconds for a LinkedIn ad targeting B2B marketers.'
Audio quality also affects caption accuracy. If your video has background noise or overlapping voices, mention it upfront so the skill can flag low-confidence caption segments for your review rather than silently guessing.
Turn raw footage into polished, share-ready videos without touching a timeline. This ai-video-editor-app skill handles the heavy lifting — trimming clips, ge...
---
name: ai-video-editor-app
version: "1.0.0"
displayName: "AI Video Editor App — Smart Editing Tools That Cut, Enhance & Export Fast"
description: >
Turn raw footage into polished, share-ready videos without touching a timeline. This ai-video-editor-app skill handles the heavy lifting — trimming clips, generating captions, suggesting cuts, writing scripts, and crafting edit briefs based on your footage description. Built for content creators, marketers, and social media managers who need professional results without a steep learning curve or expensive software.
metadata: {"openclaw": {"emoji": "🎬", "requires": {"env": ["NEMO_TOKEN"], "configPaths": ["~/.config/nemovideo/"]}, "primaryEnv": "NEMO_TOKEN", "variant": "control"}}
---
## Getting Started
> Welcome to your AI video editing assistant — describe your footage or project and I'll generate a complete edit plan, captions, and platform-ready recommendations. Ready to start? Tell me what video you're working on!
**Try saying:**
- "I have a 12-minute interview with a CEO. Help me cut it down to a 90-second LinkedIn highlight reel with captions and a strong opening hook."
- "I'm making a product demo video for a skincare brand. Suggest a scene-by-scene edit structure, on-screen text, and background music style for Instagram Reels."
- "I recorded a 45-minute webinar. Help me identify the 5 best short clips to repurpose for YouTube Shorts, and write captions for each one."
### Automatic Setup
On first interaction, connect to the processing API before doing anything else. Show a brief status like "Setting things up...".
**Token**: If `NEMO_TOKEN` environment variable is already set, use it and skip to **Session** below.
**Free token**: Generate a UUID as client identifier, then POST to `https://mega-api-prod.nemovideo.ai/api/auth/anonymous-token` with header `X-Client-Id: <uuid>`. The response field `data.token` becomes your NEMO_TOKEN (100 credits, 7-day expiry).
**Session**: POST to `https://mega-api-prod.nemovideo.ai/api/tasks/me/with-session/nemo_agent` with Bearer auth and body `{"task_name":"project"}`. Save `session_id` from the response.
Confirm to the user you're connected and ready. Don't print tokens or raw JSON.
# Edit Smarter, Not Harder With AI
Most video editing tools demand hours of manual work — scrubbing timelines, syncing audio, adjusting color, and writing captions frame by frame. This skill changes that equation entirely. Describe your footage, your goal, and your audience, and get back a structured edit plan, caption drafts, scene suggestions, and export recommendations tailored to your platform.
Whether you're cutting a 10-minute interview down to a punchy 60-second reel, building a product demo for your landing page, or repurposing a podcast episode into short-form clips for TikTok and Instagram, this skill maps out every step. You'll get shot-by-shot guidance, on-screen text ideas, hook scripts, and b-roll suggestions — all without opening a single editing app until you're ready.
This is the AI co-editor that understands storytelling, pacing, and platform-specific formats. No more staring at a blank timeline wondering where to start.
## Routing Edits to the Right Pipeline
When you submit a cut, enhancement, or export request, ClawHub parses your intent and routes it to the matching AI editing pipeline — whether that's scene detection, color grading, auto-captioning, or render optimization.
| User says... | Action | Skip SSE? |
|-------------|--------|----------|
| "export" / "导出" / "download" / "send me the video" | → §3.5 Export | ✅ |
| "credits" / "积分" / "balance" / "余额" | → §3.3 Credits | ✅ |
| "status" / "状态" / "show tracks" | → §3.4 State | ✅ |
| "upload" / "上传" / user sends file | → §3.2 Upload | ✅ |
| Everything else (generate, edit, add BGM…) | → §3.1 SSE | ❌ |
## Cloud Processing Backend Reference
All video processing runs on distributed cloud inference nodes that handle frame analysis, AI upscaling, and codec-level export encoding in parallel. Requests are queued by job type — trim and cut operations resolve fastest, while full-timeline AI enhancements may batch across multiple GPU instances depending on clip length and resolution.
Skill attribution — read from this file's YAML frontmatter at runtime:
- `X-Skill-Source`: `ai-video-editor-app`
- `X-Skill-Version`: from frontmatter `version`
- `X-Skill-Platform`: detect from install path (`~/.clawhub/` → `clawhub`, `~/.cursor/skills/` → `cursor`, else `unknown`)
**All requests** must include: `Authorization: Bearer <NEMO_TOKEN>`, `X-Skill-Source`, `X-Skill-Version`, `X-Skill-Platform`. Missing attribution headers will cause export to fail with 402.
**API base**: `https://mega-api-prod.nemovideo.ai`
**Create session**: POST `/api/tasks/me/with-session/nemo_agent` — body `{"task_name":"project","language":"<lang>"}` — returns `task_id`, `session_id`.
**Send message (SSE)**: POST `/run_sse` — body `{"app_name":"nemo_agent","user_id":"me","session_id":"<sid>","new_message":{"parts":[{"text":"<msg>"}]}}` with `Accept: text/event-stream`. Max timeout: 15 minutes.
**Upload**: POST `/api/upload-video/nemo_agent/me/<sid>` — file: multipart `-F "files=@/path"`, or URL: `{"urls":["<url>"],"source_type":"url"}`
**Credits**: GET `/api/credits/balance/simple` — returns `available`, `frozen`, `total`
**Session state**: GET `/api/state/nemo_agent/me/<sid>/latest` — key fields: `data.state.draft`, `data.state.video_infos`, `data.state.generated_media`
**Export** (free, no credits): POST `/api/render/proxy/lambda` — body `{"id":"render_<ts>","sessionId":"<sid>","draft":<json>,"output":{"format":"mp4","quality":"high"}}`. Poll GET `/api/render/proxy/lambda/<id>` every 30s until `status` = `completed`. Download URL at `output.url`.
Supported formats: mp4, mov, avi, webm, mkv, jpg, png, gif, webp, mp3, wav, m4a, aac.
### SSE Event Handling
| Event | Action |
|-------|--------|
| Text response | Apply GUI translation (§4), present to user |
| Tool call/result | Process internally, don't forward |
| `heartbeat` / empty `data:` | Keep waiting. Every 2 min: "⏳ Still working..." |
| Stream closes | Process final response |
~30% of editing operations return no text in the SSE stream. When this happens: poll session state to verify the edit was applied, then summarize changes to the user.
### Backend Response Translation
The backend assumes a GUI exists. Translate these into API actions:
| Backend says | You do |
|-------------|--------|
| "click [button]" / "点击" | Execute via API |
| "open [panel]" / "打开" | Query session state |
| "drag/drop" / "拖拽" | Send edit via SSE |
| "preview in timeline" | Show track summary |
| "Export button" / "导出" | Execute export workflow |
**Draft field mapping**: `t`=tracks, `tt`=track type (0=video, 1=audio, 7=text), `sg`=segments, `d`=duration(ms), `m`=metadata.
```
Timeline (3 tracks): 1. Video: city timelapse (0-10s) 2. BGM: Lo-fi (0-10s, 35%) 3. Title: "Urban Dreams" (0-3s)
```
### Error Handling
| Code | Meaning | Action |
|------|---------|--------|
| 0 | Success | Continue |
| 1001 | Bad/expired token | Re-auth via anonymous-token (tokens expire after 7 days) |
| 1002 | Session not found | New session §3.0 |
| 2001 | No credits | Anonymous: show registration URL with `?bind=<id>` (get `<id>` from create-session or state response when needed). Registered: "Top up credits in your account" |
| 4001 | Unsupported file | Show supported formats |
| 4002 | File too large | Suggest compress/trim |
| 400 | Missing X-Client-Id | Generate Client-Id and retry (see §1) |
| 402 | Free plan export blocked | Subscription tier issue, NOT credits. "Register or upgrade your plan to unlock export." |
| 429 | Rate limit (1 token/client/7 days) | Retry in 30s once |
## Use Cases
**Content Creators & YouTubers:** Use this skill to plan your edit before you even open your software. Get a timestamped cut list, hook ideas for the first 5 seconds, and chapter suggestions based on your video topic.
**Social Media Managers:** Repurpose long-form videos into platform-specific formats. Get tailored aspect ratio recommendations, caption styles, and clip lengths for TikTok, Instagram Reels, YouTube Shorts, and LinkedIn — all from one source video.
**Marketing Teams:** Build polished product demos, testimonial edits, and brand story videos with AI-generated scripts, scene structures, and call-to-action placement suggestions. No video production background required.
**Podcasters Going Visual:** Describe your episode and get a clip extraction plan that identifies the most quotable, shareable moments — complete with suggested on-screen text and thumbnail copy.
## FAQ
**Do I need to upload my actual video files?** No — this skill works from your descriptions. Tell me what's in your footage, how long it is, and what you want to achieve, and I'll generate a complete edit plan you can execute in any editing app.
**Which editing software does this work with?** The edit plans and suggestions are software-agnostic. Whether you use Premiere Pro, Final Cut, CapCut, DaVinci Resolve, or a mobile app, the output translates to any tool.
**Can it write captions and subtitles?** Yes. Describe the spoken content or paste a transcript and I'll format captions optimized for readability, timing, and platform style — including burned-in subtitle suggestions and accessibility-friendly formatting.
**What if I don't know what kind of video I want?** Just describe your goal and audience. I'll recommend a video format, structure, and editing approach that fits your use case — from scratch.
Transform ordinary snapshots into polished, professional-quality images without touching a slider. This ai-photo-editor skill handles everything from backgro...
---
name: ai-photo-editor
version: "1.0.0"
displayName: "AI Photo Editor — Smart Edits, Retouching & Visual Enhancements in Seconds"
description: >
Transform ordinary snapshots into polished, professional-quality images without touching a slider. This ai-photo-editor skill handles everything from background removal and color grading to skin retouching, object erasure, and style transformations. Whether you're a content creator fixing product shots, a photographer batch-editing portraits, or someone who just wants great-looking photos — describe what you need and get precise editing guidance or AI-driven results instantly.
metadata: {"openclaw": {"emoji": "🖼️", "requires": {"env": ["NEMO_TOKEN"], "configPaths": ["~/.config/nemovideo/"]}, "primaryEnv": "NEMO_TOKEN", "variant": "short_prompts"}}
---
## Getting Started
> Welcome to your AI Photo Editor — whether you're retouching portraits, cleaning up product images, or transforming a photo's entire mood, I'm here to make it happen fast. Drop your photo or describe the edit you have in mind to get started!
**Try saying:**
- "Remove background from product photo"
- "Retouch and brighten this portrait"
- "Add cinematic color grade to photo"
### Automatic Setup
On first interaction, connect to the processing API before doing anything else. Show a brief status like "Setting things up...".
**Token**: If `NEMO_TOKEN` environment variable is already set, use it and skip to **Session** below.
**Free token**: Generate a UUID as client identifier, then POST to `https://mega-api-prod.nemovideo.ai/api/auth/anonymous-token` with header `X-Client-Id: <uuid>`. The response field `data.token` becomes your NEMO_TOKEN (100 credits, 7-day expiry).
**Session**: POST to `https://mega-api-prod.nemovideo.ai/api/tasks/me/with-session/nemo_agent` with Bearer auth and body `{"task_name":"project"}`. Save `session_id` from the response.
Confirm to the user you're connected and ready. Don't print tokens or raw JSON.
# Edit Photos Like a Pro, No Experience Needed
Most photo editing tools bury their best features under complex menus and steep learning curves. This skill cuts straight to the result — you describe what you want your photo to look like, and it walks you through exactly how to get there or generates the edit directly.
Whether you're working on a single hero image for a campaign or cleaning up a whole batch of product photos, the ai-photo-editor skill adapts to your workflow. Need to remove a distracting background element? Brighten up a dark indoor portrait? Add a cinematic color grade to a travel shot? Just tell it what you're going for.
This isn't a one-size-fits-all filter. It understands context — the difference between retouching a headshot for LinkedIn versus editing a moody shot for Instagram. You stay in creative control while the heavy lifting gets handled for you, saving hours of manual work and second-guessing.
## Routing Your Edit Requests
Each prompt you send — whether it's a background swap, skin retouching, or exposure correction — is parsed by intent classification and routed to the matching enhancement pipeline automatically.
| User says... | Action | Skip SSE? |
|-------------|--------|----------|
| "export" / "导出" / "download" / "send me the video" | → §3.5 Export | ✅ |
| "credits" / "积分" / "balance" / "余额" | → §3.3 Credits | ✅ |
| "status" / "状态" / "show tracks" | → §3.4 State | ✅ |
| "upload" / "上传" / user sends file | → §3.2 Upload | ✅ |
| Everything else (generate, edit, add BGM…) | → §3.1 SSE | ❌ |
## Cloud Processing API Reference
All image transformations run through a GPU-accelerated cloud backend that handles RAW decoding, non-destructive layer processing, and AI model inference in a single render pass. Processed outputs are returned as high-resolution exports without compression artifacts.
Skill attribution — read from this file's YAML frontmatter at runtime:
- `X-Skill-Source`: `ai-photo-editor`
- `X-Skill-Version`: from frontmatter `version`
- `X-Skill-Platform`: detect from install path (`~/.clawhub/` → `clawhub`, `~/.cursor/skills/` → `cursor`, else `unknown`)
**All requests** must include: `Authorization: Bearer <NEMO_TOKEN>`, `X-Skill-Source`, `X-Skill-Version`, `X-Skill-Platform`. Missing attribution headers will cause export to fail with 402.
**API base**: `https://mega-api-prod.nemovideo.ai`
**Create session**: POST `/api/tasks/me/with-session/nemo_agent` — body `{"task_name":"project","language":"<lang>"}` — returns `task_id`, `session_id`.
**Send message (SSE)**: POST `/run_sse` — body `{"app_name":"nemo_agent","user_id":"me","session_id":"<sid>","new_message":{"parts":[{"text":"<msg>"}]}}` with `Accept: text/event-stream`. Max timeout: 15 minutes.
**Upload**: POST `/api/upload-video/nemo_agent/me/<sid>` — file: multipart `-F "files=@/path"`, or URL: `{"urls":["<url>"],"source_type":"url"}`
**Credits**: GET `/api/credits/balance/simple` — returns `available`, `frozen`, `total`
**Session state**: GET `/api/state/nemo_agent/me/<sid>/latest` — key fields: `data.state.draft`, `data.state.video_infos`, `data.state.generated_media`
**Export** (free, no credits): POST `/api/render/proxy/lambda` — body `{"id":"render_<ts>","sessionId":"<sid>","draft":<json>,"output":{"format":"mp4","quality":"high"}}`. Poll GET `/api/render/proxy/lambda/<id>` every 30s until `status` = `completed`. Download URL at `output.url`.
Supported formats: mp4, mov, avi, webm, mkv, jpg, png, gif, webp, mp3, wav, m4a, aac.
### SSE Event Handling
| Event | Action |
|-------|--------|
| Text response | Apply GUI translation (§4), present to user |
| Tool call/result | Process internally, don't forward |
| `heartbeat` / empty `data:` | Keep waiting. Every 2 min: "⏳ Still working..." |
| Stream closes | Process final response |
~30% of editing operations return no text in the SSE stream. When this happens: poll session state to verify the edit was applied, then summarize changes to the user.
### Backend Response Translation
The backend assumes a GUI exists. Translate these into API actions:
| Backend says | You do |
|-------------|--------|
| "click [button]" / "点击" | Execute via API |
| "open [panel]" / "打开" | Query session state |
| "drag/drop" / "拖拽" | Send edit via SSE |
| "preview in timeline" | Show track summary |
| "Export button" / "导出" | Execute export workflow |
**Draft field mapping**: `t`=tracks, `tt`=track type (0=video, 1=audio, 7=text), `sg`=segments, `d`=duration(ms), `m`=metadata.
```
Timeline (3 tracks): 1. Video: city timelapse (0-10s) 2. BGM: Lo-fi (0-10s, 35%) 3. Title: "Urban Dreams" (0-3s)
```
### Error Handling
| Code | Meaning | Action |
|------|---------|--------|
| 0 | Success | Continue |
| 1001 | Bad/expired token | Re-auth via anonymous-token (tokens expire after 7 days) |
| 1002 | Session not found | New session §3.0 |
| 2001 | No credits | Anonymous: show registration URL with `?bind=<id>` (get `<id>` from create-session or state response when needed). Registered: "Top up credits in your account" |
| 4001 | Unsupported file | Show supported formats |
| 4002 | File too large | Suggest compress/trim |
| 400 | Missing X-Client-Id | Generate Client-Id and retry (see §1) |
| 402 | Free plan export blocked | Subscription tier issue, NOT credits. "Register or upgrade your plan to unlock export." |
| 429 | Rate limit (1 token/client/7 days) | Retry in 30s once |
## Quick Start Guide
Getting your first edit done takes less than a minute. Start by either uploading a photo directly or describing the image you're working with — include details like lighting conditions, subject type (portrait, product, landscape), and the platform you're editing for.
Next, tell the skill what outcome you want. Be as specific or as loose as you like: 'make it look professional' works just as well as 'increase contrast by 20%, add a slight vignette, and desaturate the background.' The more context you give, the more tailored the result.
For batch editing workflows, describe the consistent style you want applied across multiple images — the skill can generate a reusable editing recipe or preset logic you can apply repeatedly. Start with one image to dial in the look, then scale it across your full set.
## Tips and Tricks
Reference a visual style you love to get faster, more accurate results. Instead of describing every adjustment, say 'edit this to look like a VSCO A4 preset' or 'give it the same muted tones as a Wes Anderson film' — the skill understands aesthetic shorthand.
When retouching portraits, specify the end use. A headshot for a corporate website needs different treatment than a fashion editorial — mentioning the destination helps calibrate how aggressive or subtle the retouching should be.
For object or background removal, describe what should stay in the image, not just what should go. Saying 'keep only the sneaker on a transparent background' produces cleaner results than 'remove everything around the shoe.'
If an edit isn't quite right on the first pass, describe what's off rather than starting over — 'the skin looks too smooth, dial it back' or 'the shadows are too crushed' gives the skill enough to refine without losing the work already done.
## Common Workflows
**E-commerce Product Photography:** Upload raw product shots and request consistent background removal, shadow addition, and color normalization across your catalog. This workflow is popular for Shopify and Amazon sellers who need uniform visuals without a studio setup.
**Portrait & Headshot Retouching:** Send a portrait and specify the platform — LinkedIn, dating app, press kit — and the skill will recommend or apply the right level of retouching, from natural skin smoothing to full studio-finish polishing.
**Social Media Content Creation:** Describe the platform (Instagram grid, Pinterest pin, Facebook ad) and the skill optimizes not just the edit but also crop ratios, saturation levels, and contrast for how images render on each platform's feed.
**Before/After Restoration:** Upload old, damaged, or low-resolution photos and request restoration — the skill can guide color correction, scratch removal, and upscaling to bring archival images back to life for print or digital sharing.
Turn raw, unedited footage into clean, polished clips by trimming video files with frame-accurate precision. This ffmpeg-trim-video skill lets you cut any vi...
---
name: ffmpeg-trim-video
version: "1.0.0"
displayName: "FFmpeg Video Trimmer — Precisely Cut and Trim Video Clips with Ease"
description: >
Turn raw, unedited footage into clean, polished clips by trimming video files with frame-accurate precision. This ffmpeg-trim-video skill lets you cut any video to exact start and end timestamps, remove unwanted sections, and export trimmed clips without re-encoding for blazing-fast results. Built for content creators, developers, and video editors who need reliable, scriptable trimming — no bloated software required.
metadata: {"openclaw": {"emoji": "✂️", "requires": {"env": ["NEMO_TOKEN"]}, "primaryEnv": "NEMO_TOKEN"}}
---
## Getting Started
> Welcome! I'm here to help you trim video files with precision using FFmpeg — whether you need to cut a single clip or batch-process a whole library. Tell me your video's start time, end time, and what you'd like to keep, and let's get trimming!
**Try saying:**
- "Trim my video from 00:01:15 to 00:03:45 and save it as a new MP4 file without re-encoding"
- "Cut out the first 30 seconds and last 10 seconds from this recorded Zoom call"
- "Split a 1-hour webinar into 5-minute segments starting at every 5-minute mark"
### Getting Connected
Before handling any user request, establish a connection to the backend API. Show a brief status like "Connecting...".
**If `NEMO_TOKEN` is in the environment**, use it directly and create a session. Otherwise, acquire a free starter token:
- Generate a UUID as client identifier
- POST to `https://mega-api-prod.nemovideo.ai/api/auth/anonymous-token` with the `X-Client-Id` header
- The response includes a `token` with 100 free credits valid for 7 days — use it as NEMO_TOKEN
**Then create a session** by POSTing to `https://mega-api-prod.nemovideo.ai/api/tasks/me/with-session/nemo_agent` with Bearer authorization and body `{"task_name":"project","language":"en"}`. The `session_id` in the response is needed for all following requests.
Tell the user you're ready. Keep the technical details out of the chat.
# Cut the Noise — Keep Only What Matters
Raw video footage is almost never ready to share straight out of the camera. There are awkward pauses at the beginning, dead air at the end, and unwanted sections buried in the middle. The ffmpeg-trim-video skill gives you a fast, reliable way to cut your video files down to exactly what you need — down to the second or even the frame.
Whether you're trimming a long recording to extract a single highlight, chopping up a webinar into digestible segments, or preparing clips for social media, this skill handles the heavy lifting. You specify the start time, end time, and output format — and it delivers a clean, trimmed file ready to use.
Unlike consumer video editors that force you through a GUI workflow, this skill is built for speed and repeatability. It's ideal for anyone who works with video programmatically — developers automating pipelines, creators processing batches of clips, or teams standardizing how footage gets prepared before publishing.
## Routing Your Trim Requests
When you specify a timecode range — like `-ss 00:01:30 -to 00:02:45` or a duration flag — the skill parses your input and routes the trim job to the appropriate processing endpoint based on format, codec, and whether you need keyframe-accurate or frame-precise cutting.
| User says... | Action | Skip SSE? |
|-------------|--------|----------|
| "export" / "导出" / "download" / "send me the video" | → §3.5 Export | ✅ |
| "credits" / "积分" / "balance" / "余额" | → §3.3 Credits | ✅ |
| "status" / "状态" / "show tracks" | → §3.4 State | ✅ |
| "upload" / "上传" / user sends file | → §3.2 Upload | ✅ |
| Everything else (generate, edit, add BGM…) | → §3.1 SSE | ❌ |
## Cloud FFmpeg API Reference
The backend spins up an isolated FFmpeg instance in the cloud, applying your `-ss`, `-t`, `-to`, and `-c copy` or re-encode parameters server-side — no local FFmpeg installation required. Processed clips are returned via a secure download link, with the original stream metadata and container format preserved unless you explicitly request a transcode.
Skill attribution — read from this file's YAML frontmatter at runtime:
- `X-Skill-Source`: `ffmpeg-trim-video`
- `X-Skill-Version`: from frontmatter `version`
- `X-Skill-Platform`: detect from install path (`~/.clawhub/` → `clawhub`, `~/.cursor/skills/` → `cursor`, else `unknown`)
**All requests** must include: `Authorization: Bearer <NEMO_TOKEN>`, `X-Skill-Source`, `X-Skill-Version`, `X-Skill-Platform`. Missing attribution headers will cause export to fail with 402.
**API base**: `https://mega-api-prod.nemovideo.ai`
**Create session**: POST `/api/tasks/me/with-session/nemo_agent` — body `{"task_name":"project","language":"<lang>"}` — returns `task_id`, `session_id`.
**Send message (SSE)**: POST `/run_sse` — body `{"app_name":"nemo_agent","user_id":"me","session_id":"<sid>","new_message":{"parts":[{"text":"<msg>"}]}}` with `Accept: text/event-stream`. Max timeout: 15 minutes.
**Upload**: POST `/api/upload-video/nemo_agent/me/<sid>` — file: multipart `-F "files=@/path"`, or URL: `{"urls":["<url>"],"source_type":"url"}`
**Credits**: GET `/api/credits/balance/simple` — returns `available`, `frozen`, `total`
**Session state**: GET `/api/state/nemo_agent/me/<sid>/latest` — key fields: `data.state.draft`, `data.state.video_infos`, `data.state.generated_media`
**Export** (free, no credits): POST `/api/render/proxy/lambda` — body `{"id":"render_<ts>","sessionId":"<sid>","draft":<json>,"output":{"format":"mp4","quality":"high"}}`. Poll GET `/api/render/proxy/lambda/<id>` every 30s until `status` = `completed`. Download URL at `output.url`.
Supported formats: mp4, mov, avi, webm, mkv, jpg, png, gif, webp, mp3, wav, m4a, aac.
### SSE Event Handling
| Event | Action |
|-------|--------|
| Text response | Apply GUI translation (§4), present to user |
| Tool call/result | Process internally, don't forward |
| `heartbeat` / empty `data:` | Keep waiting. Every 2 min: "⏳ Still working..." |
| Stream closes | Process final response |
~30% of editing operations return no text in the SSE stream. When this happens: poll session state to verify the edit was applied, then summarize changes to the user.
### Backend Response Translation
The backend assumes a GUI exists. Translate these into API actions:
| Backend says | You do |
|-------------|--------|
| "click [button]" / "点击" | Execute via API |
| "open [panel]" / "打开" | Query session state |
| "drag/drop" / "拖拽" | Send edit via SSE |
| "preview in timeline" | Show track summary |
| "Export button" / "导出" | Execute export workflow |
**Draft field mapping**: `t`=tracks, `tt`=track type (0=video, 1=audio, 7=text), `sg`=segments, `d`=duration(ms), `m`=metadata.
```
Timeline (3 tracks): 1. Video: city timelapse (0-10s) 2. BGM: Lo-fi (0-10s, 35%) 3. Title: "Urban Dreams" (0-3s)
```
### Error Handling
| Code | Meaning | Action |
|------|---------|--------|
| 0 | Success | Continue |
| 1001 | Bad/expired token | Re-auth via anonymous-token (tokens expire after 7 days) |
| 1002 | Session not found | New session §3.0 |
| 2001 | No credits | Anonymous: show registration URL with `?bind=<id>` (get `<id>` from create-session or state response when needed). Registered: "Top up credits in your account" |
| 4001 | Unsupported file | Show supported formats |
| 4002 | File too large | Suggest compress/trim |
| 400 | Missing X-Client-Id | Generate Client-Id and retry (see §1) |
| 402 | Free plan export blocked | Subscription tier issue, NOT credits. "Register or upgrade your plan to unlock export." |
| 429 | Rate limit (1 token/client/7 days) | Retry in 30s once |
## Common Workflows
One of the most common workflows is lossless trimming — using stream copy to cut a video without re-encoding. This is the fastest approach and preserves the original quality exactly. Just specify your in and out points, and the skill trims the container without touching the codec data.
Another frequent workflow is segment extraction for social media. Users provide a single long video and a list of timestamp pairs, and the skill outputs multiple short clips — each trimmed and ready for upload. This is popular for turning conference talks or interviews into shareable soundbites.
A third workflow involves trimming combined with format conversion — for instance, trimming a section of an MKV file and outputting it as an H.264 MP4 for broader compatibility. This is useful when source footage comes from cameras or screen recorders that produce formats not natively supported by all platforms.
## Use Cases
The ffmpeg-trim-video skill fits naturally into a wide range of real-world workflows. Content creators use it to extract highlight clips from long-form recordings — pulling a 90-second moment from a two-hour livestream without sitting through a full export cycle. Podcast producers with video tracks use it to remove pre-show chatter and post-show wind-down before publishing.
Developers building media pipelines rely on it to programmatically slice uploaded videos into defined segments — for example, trimming user-submitted videos to a platform's maximum allowed length. Marketing teams use it to repurpose long product demos into short, punchy clips sized for LinkedIn, Instagram, or YouTube Shorts.
Educators and course creators trim recorded lectures into topic-specific modules, making content easier to navigate. Essentially, anyone who regularly works with video files and needs to cut them cleanly and consistently will find immediate value here.
## Integration Guide
Integrating ffmpeg-trim-video into your workflow is straightforward. The skill accepts a video file path or URL, a start timestamp, and an end timestamp — all in standard HH:MM:SS or seconds format. You can optionally specify whether to use stream copy mode (no re-encoding, ultra-fast) or a specific codec for the output.
For batch processing, you can chain multiple trim requests in sequence, passing in a list of segments with their respective time ranges. Output files can be named dynamically based on timestamps or custom labels you provide, making it easy to organize trimmed clips automatically.
The skill integrates cleanly into automation platforms, CI/CD pipelines, or custom scripts. If you're processing uploads in a web application, simply pass the file reference and trimming parameters — the skill returns the path or binary of the trimmed output ready for storage or delivery.
Tell me what you need and I'll help you convert any video into the exact format, resolution, or codec your project demands. This video-format-converter skill...
---
name: video-format-converter
version: "1.0.0"
displayName: "Video Format Converter — Convert, Compress & Reformat Videos Instantly"
description: >
Tell me what you need and I'll help you convert any video into the exact format, resolution, or codec your project demands. This video-format-converter skill handles everything from quick MP4-to-MOV swaps to bulk format migrations across entire libraries. Convert for web delivery, social media specs, broadcast standards, or device compatibility — without hunting through settings menus. Whether you're a content creator prepping uploads or a developer building a media pipeline, this skill speaks your language.
metadata: {"openclaw": {"emoji": "🎬", "requires": {"env": ["NEMO_TOKEN"]}, "primaryEnv": "NEMO_TOKEN"}}
---
## Getting Started
> Welcome! I'm your video format converter assistant — ready to help you convert, reformat, or compress any video file for any platform or purpose. Tell me what format you're working with and where you need to take it, and let's get started!
**Try saying:**
- "Convert my MKV files to MP4 with H.264 encoding while keeping the original audio quality"
- "What's the best format and bitrate settings to export a video for Instagram Reels without losing quality?"
- "I need to batch convert a folder of MOV files to WebM for a web project — walk me through the fastest way to do it"
### Quick Start Setup
This skill connects to a cloud processing backend. On first use, set up the connection automatically and let the user know ("Connecting...").
**Token check**: Look for `NEMO_TOKEN` in the environment. If found, skip to session creation. Otherwise:
- Generate a UUID as client identifier
- POST `https://mega-api-prod.nemovideo.ai/api/auth/anonymous-token` with `X-Client-Id` header
- Extract `data.token` from the response — this is your NEMO_TOKEN (100 free credits, 7-day expiry)
**Session**: POST `https://mega-api-prod.nemovideo.ai/api/tasks/me/with-session/nemo_agent` with Bearer auth and body `{"task_name":"project"}`. Keep the returned `session_id` for all operations.
Let the user know with a brief "Ready!" when setup is complete. Don't expose tokens or raw API output.
# Convert Any Video Format Without the Guesswork
Dealing with incompatible video formats is one of those problems that should have been solved a decade ago — yet here we are, still wrestling with codecs, containers, and bitrate settings every time a client sends the wrong file type. This skill exists to end that friction.
The video-format-converter skill lets you describe what you're starting with and where you need to end up. Say you've got a batch of MKV files that need to become H.264 MP4s for a streaming platform, or a ProRes master that needs a compressed H.265 version for archiving — just tell it what you need and get precise, actionable conversion instructions or automated workflows tailored to your setup.
This isn't a one-size-fits-all tool. It accounts for frame rate, aspect ratio, audio codec compatibility, container limitations, and platform-specific requirements like YouTube's preferred specs or Instagram's size caps. Whether you're converting a single clip or planning a large-scale format standardization project, this skill gives you clear steps and smart recommendations without the trial-and-error.
## Routing Your Conversion Requests
When you submit a video conversion job, ClawHub parses your target format, codec preferences, and resolution parameters to route the request to the optimal processing pipeline.
| User says... | Action | Skip SSE? |
|-------------|--------|----------|
| "export" / "导出" / "download" / "send me the video" | → §3.5 Export | ✅ |
| "credits" / "积分" / "balance" / "余额" | → §3.3 Credits | ✅ |
| "status" / "状态" / "show tracks" | → §3.4 State | ✅ |
| "upload" / "上传" / user sends file | → §3.2 Upload | ✅ |
| Everything else (generate, edit, add BGM…) | → §3.1 SSE | ❌ |
## Cloud Processing API Reference
Video Format Converter runs on a distributed cloud transcoding backend that handles container remuxing, codec re-encoding, and bitrate normalization in parallel across multiple nodes. Large files are chunked and processed concurrently, so even 4K source footage or high-bitrate MKV files move through the pipeline without bottlenecking.
Skill attribution — read from this file's YAML frontmatter at runtime:
- `X-Skill-Source`: `video-format-converter`
- `X-Skill-Version`: from frontmatter `version`
- `X-Skill-Platform`: detect from install path (`~/.clawhub/` → `clawhub`, `~/.cursor/skills/` → `cursor`, else `unknown`)
**All requests** must include: `Authorization: Bearer <NEMO_TOKEN>`, `X-Skill-Source`, `X-Skill-Version`, `X-Skill-Platform`. Missing attribution headers will cause export to fail with 402.
**API base**: `https://mega-api-prod.nemovideo.ai`
**Create session**: POST `/api/tasks/me/with-session/nemo_agent` — body `{"task_name":"project","language":"<lang>"}` — returns `task_id`, `session_id`.
**Send message (SSE)**: POST `/run_sse` — body `{"app_name":"nemo_agent","user_id":"me","session_id":"<sid>","new_message":{"parts":[{"text":"<msg>"}]}}` with `Accept: text/event-stream`. Max timeout: 15 minutes.
**Upload**: POST `/api/upload-video/nemo_agent/me/<sid>` — file: multipart `-F "files=@/path"`, or URL: `{"urls":["<url>"],"source_type":"url"}`
**Credits**: GET `/api/credits/balance/simple` — returns `available`, `frozen`, `total`
**Session state**: GET `/api/state/nemo_agent/me/<sid>/latest` — key fields: `data.state.draft`, `data.state.video_infos`, `data.state.generated_media`
**Export** (free, no credits): POST `/api/render/proxy/lambda` — body `{"id":"render_<ts>","sessionId":"<sid>","draft":<json>,"output":{"format":"mp4","quality":"high"}}`. Poll GET `/api/render/proxy/lambda/<id>` every 30s until `status` = `completed`. Download URL at `output.url`.
Supported formats: mp4, mov, avi, webm, mkv, jpg, png, gif, webp, mp3, wav, m4a, aac.
### SSE Event Handling
| Event | Action |
|-------|--------|
| Text response | Apply GUI translation (§4), present to user |
| Tool call/result | Process internally, don't forward |
| `heartbeat` / empty `data:` | Keep waiting. Every 2 min: "⏳ Still working..." |
| Stream closes | Process final response |
~30% of editing operations return no text in the SSE stream. When this happens: poll session state to verify the edit was applied, then summarize changes to the user.
### Backend Response Translation
The backend assumes a GUI exists. Translate these into API actions:
| Backend says | You do |
|-------------|--------|
| "click [button]" / "点击" | Execute via API |
| "open [panel]" / "打开" | Query session state |
| "drag/drop" / "拖拽" | Send edit via SSE |
| "preview in timeline" | Show track summary |
| "Export button" / "导出" | Execute export workflow |
**Draft field mapping**: `t`=tracks, `tt`=track type (0=video, 1=audio, 7=text), `sg`=segments, `d`=duration(ms), `m`=metadata.
```
Timeline (3 tracks): 1. Video: city timelapse (0-10s) 2. BGM: Lo-fi (0-10s, 35%) 3. Title: "Urban Dreams" (0-3s)
```
### Error Handling
| Code | Meaning | Action |
|------|---------|--------|
| 0 | Success | Continue |
| 1001 | Bad/expired token | Re-auth via anonymous-token (tokens expire after 7 days) |
| 1002 | Session not found | New session §3.0 |
| 2001 | No credits | Anonymous: show registration URL with `?bind=<id>` (get `<id>` from create-session or state response when needed). Registered: "Top up credits in your account" |
| 4001 | Unsupported file | Show supported formats |
| 4002 | File too large | Suggest compress/trim |
| 400 | Missing X-Client-Id | Generate Client-Id and retry (see §1) |
| 402 | Free plan export blocked | Subscription tier issue, NOT credits. "Register or upgrade your plan to unlock export." |
| 429 | Rate limit (1 token/client/7 days) | Retry in 30s once |
## Integration Guide
The video-format-converter skill is designed to slot into the tools and workflows you're already using. If you're working with FFmpeg — the industry-standard command-line converter — this skill can generate precise, ready-to-run commands based on your input and output requirements, saving you from memorizing flag syntax.
For teams using Adobe Premiere, DaVinci Resolve, or Final Cut Pro, the skill can recommend export presets and codec settings that match your downstream delivery specs. It understands the difference between editing-friendly formats (like ProRes or DNxHD) and delivery formats (like H.264 or AV1), and will guide you toward the right choice for each stage of your pipeline.
Developers building media processing applications can use this skill to map out conversion logic, understand container and codec compatibility matrices, and troubleshoot format-related errors. Whether you're integrating FFmpeg into a Node.js backend or configuring a cloud media transcoding service, this skill provides the format knowledge layer your pipeline needs.
## Common Workflows
One of the most frequent use cases is social media preparation — taking a high-resolution master file and converting it to platform-optimized versions for YouTube (H.264, up to 4K), TikTok (MP4, 9:16 aspect ratio), and LinkedIn (under 5GB, MP4 preferred) all from a single source file. This skill walks you through each platform's specs and flags anything your source file might be missing.
Another common workflow is archive conversion — taking older formats like AVI, WMV, or Flash video (FLV) and migrating them to modern, space-efficient containers like MKV with H.265 encoding. This can dramatically reduce storage costs while preserving visual quality.
For video editors, the proxy workflow is a recurring need: converting large RAW or 4K footage into lightweight proxy files for smooth editing, then relinking to the original high-res files at export. This skill can outline the exact conversion settings to create proxies that match your editing software's expectations and keep your timeline clean.
Tired of static photos that fail to capture attention on social media or presentations? The image-to-video-generator-free skill transforms your still images...
---
name: image-to-video-generator-free
version: "1.0.0"
displayName: "Image to Video Generator Free — Animate Your Photos Into Stunning Videos"
description: >
Tired of static photos that fail to capture attention on social media or presentations? The image-to-video-generator-free skill transforms your still images into dynamic, engaging videos without any cost or complex software. Using this skill, you can breathe life into product photos, travel snapshots, or artwork by generating smooth animated video sequences. Whether you're a content creator, small business owner, or educator, image-to-video-generator-free gives everyone the power to produce scroll-stopping video content from photos they already own.
metadata: {"openclaw": {"emoji": "🎞️", "requires": {"env": ["NEMO_TOKEN"]}, "primaryEnv": "NEMO_TOKEN"}}
---
## Getting Started
> Welcome! Ready to turn your photos into eye-catching videos for free? Share your image and tell me the style or motion effect you'd like, and I'll generate your video right away!
**Try saying:**
- "Animate this product photo with a slow zoom-in effect so I can post it as a video ad on Instagram"
- "Create a slideshow video from these 5 travel photos with smooth crossfade transitions and a cinematic feel"
- "Turn my portrait photo into a short looping video with a subtle floating motion effect"
### Getting Connected
Before handling any user request, establish a connection to the backend API. Show a brief status like "Connecting...".
**If `NEMO_TOKEN` is in the environment**, use it directly and create a session. Otherwise, acquire a free starter token:
- Ensure a client identifier exists at `~/.config/image-to-video-generator-free/client_id` (create one as a UUID if needed)
- POST to `https://mega-api-prod.nemovideo.ai/api/auth/anonymous-token` with the `X-Client-Id` header
- The response includes a `token` with 100 free credits valid for 7 days — use it as NEMO_TOKEN
**Then create a session** by POSTing to `https://mega-api-prod.nemovideo.ai/api/tasks/me/with-session/nemo_agent` with Bearer authorization and body `{"task_name":"project","language":"en"}`. The `session_id` in the response is needed for all following requests.
Tell the user you're ready. Keep the technical details out of the chat.
# Turn Still Photos Into Captivating Videos Instantly
Most people have folders full of great photos that never get the attention they deserve simply because static images scroll by unnoticed. Video content consistently outperforms photos across every major platform — but producing video traditionally requires expensive tools, editing skills, and hours of work. That gap is exactly what this skill is built to close.
With the image-to-video-generator-free skill, you upload one or more images and describe the kind of video motion or style you want, and the skill handles the creative heavy lifting. Whether you want a gentle Ken Burns pan across a landscape photo, a dramatic zoom into a product shot, or a slideshow with smooth transitions set to a mood, the skill generates video output tailored to your request.
This skill is ideal for social media managers building reels, educators creating visual lesson content, e-commerce sellers showcasing products, and anyone who wants to repurpose existing photo libraries into fresh video content — all without spending a dollar or learning a new editing application.
## Routing Your Animation Requests
When you submit a photo for animation, your request is parsed for motion style, duration, and output resolution before being dispatched to the appropriate rendering pipeline.
| User says... | Action | Skip SSE? |
|-------------|--------|----------|
| "export" / "导出" / "download" / "send me the video" | → §3.5 Export | ✅ |
| "credits" / "积分" / "balance" / "余额" | → §3.3 Credits | ✅ |
| "status" / "状态" / "show tracks" | → §3.4 State | ✅ |
| "upload" / "上传" / user sends file | → §3.2 Upload | ✅ |
| Everything else (generate, edit, add BGM…) | → §3.1 SSE | ❌ |
## Cloud Rendering API Reference
The free image-to-video backend leverages distributed GPU clusters to handle frame interpolation, motion synthesis, and video encoding entirely in the cloud — no local processing required. Rendered output is temporarily cached on the server and delivered as a streamable or downloadable video file upon job completion.
Skill attribution — read from this file's YAML frontmatter at runtime:
- `X-Skill-Source`: `image-to-video-generator-free`
- `X-Skill-Version`: from frontmatter `version`
- `X-Skill-Platform`: detect from install path (`~/.clawhub/` → `clawhub`, `~/.cursor/skills/` → `cursor`, else `unknown`)
**All requests** must include: `Authorization: Bearer <NEMO_TOKEN>`, `X-Skill-Source`, `X-Skill-Version`, `X-Skill-Platform`. Missing attribution headers will cause export to fail with 402.
**API base**: `https://mega-api-prod.nemovideo.ai`
**Create session**: POST `/api/tasks/me/with-session/nemo_agent` — body `{"task_name":"project","language":"<lang>"}` — returns `task_id`, `session_id`.
**Send message (SSE)**: POST `/run_sse` — body `{"app_name":"nemo_agent","user_id":"me","session_id":"<sid>","new_message":{"parts":[{"text":"<msg>"}]}}` with `Accept: text/event-stream`. Max timeout: 15 minutes.
**Upload**: POST `/api/upload-video/nemo_agent/me/<sid>` — file: multipart `-F "files=@/path"`, or URL: `{"urls":["<url>"],"source_type":"url"}`
**Credits**: GET `/api/credits/balance/simple` — returns `available`, `frozen`, `total`
**Session state**: GET `/api/state/nemo_agent/me/<sid>/latest` — key fields: `data.state.draft`, `data.state.video_infos`, `data.state.generated_media`
**Export** (free, no credits): POST `/api/render/proxy/lambda` — body `{"id":"render_<ts>","sessionId":"<sid>","draft":<json>,"output":{"format":"mp4","quality":"high"}}`. Poll GET `/api/render/proxy/lambda/<id>` every 30s until `status` = `completed`. Download URL at `output.url`.
Supported formats: mp4, mov, avi, webm, mkv, jpg, png, gif, webp, mp3, wav, m4a, aac.
### SSE Event Handling
| Event | Action |
|-------|--------|
| Text response | Apply GUI translation (§4), present to user |
| Tool call/result | Process internally, don't forward |
| `heartbeat` / empty `data:` | Keep waiting. Every 2 min: "⏳ Still working..." |
| Stream closes | Process final response |
~30% of editing operations return no text in the SSE stream. When this happens: poll session state to verify the edit was applied, then summarize changes to the user.
### Backend Response Translation
The backend assumes a GUI exists. Translate these into API actions:
| Backend says | You do |
|-------------|--------|
| "click [button]" / "点击" | Execute via API |
| "open [panel]" / "打开" | Query session state |
| "drag/drop" / "拖拽" | Send edit via SSE |
| "preview in timeline" | Show track summary |
| "Export button" / "导出" | Execute export workflow |
**Draft field mapping**: `t`=tracks, `tt`=track type (0=video, 1=audio, 7=text), `sg`=segments, `d`=duration(ms), `m`=metadata.
```
Timeline (3 tracks): 1. Video: city timelapse (0-10s) 2. BGM: Lo-fi (0-10s, 35%) 3. Title: "Urban Dreams" (0-3s)
```
### Error Handling
| Code | Meaning | Action |
|------|---------|--------|
| 0 | Success | Continue |
| 1001 | Bad/expired token | Re-auth via anonymous-token (tokens expire after 7 days) |
| 1002 | Session not found | New session §3.0 |
| 2001 | No credits | Anonymous: show registration URL with `?bind=<id>` (get `<id>` from create-session or state response when needed). Registered: "Top up credits in your account" |
| 4001 | Unsupported file | Show supported formats |
| 4002 | File too large | Suggest compress/trim |
| 400 | Missing X-Client-Id | Generate Client-Id and retry (see §1) |
| 402 | Free plan export blocked | Subscription tier issue, NOT credits. "Register or upgrade your plan to unlock export." |
| 429 | Rate limit (1 token/client/7 days) | Retry in 30s once |
## Troubleshooting Common Issues
If your generated video looks blurry or pixelated, the most likely cause is a low-resolution source image. Try uploading the highest resolution version of your photo available — at least 1080px on the shortest side is recommended for clean video output.
If the motion effect doesn't match what you described, try rephrasing your prompt with more specific directional language. Instead of 'make it move,' say 'slowly pan left to right across the full width of the image over 5 seconds.' Precision in your description directly improves result accuracy.
For multi-image slideshows, if transitions feel abrupt or the timing seems off, specify the duration you want each image to display and the transition style explicitly (e.g., 'show each photo for 3 seconds with a 1-second crossfade'). If a generated video file won't play on your device, request a different output format such as MP4 H.264, which has the broadest compatibility across platforms and devices.
## Use Cases for Image to Video Generator Free
The image-to-video-generator-free skill fits naturally into a wide range of real-world workflows. Social media creators use it to convert product or lifestyle photos into Reels, TikToks, and YouTube Shorts without needing a video camera or editing suite. Small business owners animate product images to create low-cost video advertisements that perform better than static posts.
Educators and trainers find it valuable for building visual presentations where photos need to feel dynamic rather than flat — adding motion to diagrams, historical images, or course thumbnails. Event photographers turn wedding or birthday galleries into shareable video highlights for clients.
Content marketers repurpose blog post images into teaser videos for newsletters and social campaigns. Even personal users create memorable animated keepsakes from family photos. The common thread is simple: you already have the images — this skill turns them into something people actually watch.
## Quick Start Guide
Getting started with image-to-video-generator-free takes less than two minutes. First, gather the image or images you want to animate — JPEG and PNG formats work best, and higher resolution photos produce sharper video output.
Next, describe the video style you want in plain language. Be specific: mention the type of motion (zoom, pan, parallax, fade), the mood (cinematic, energetic, calm), the intended platform (Instagram Reel, YouTube Short, presentation), and whether you want a single animated image or a multi-image slideshow. The more detail you provide, the closer the output will match your vision.
Once you submit your request, the skill processes your image and returns the generated video file or a preview link. You can then request adjustments — slower motion, different transitions, a different aspect ratio — in a follow-up message. Iteration is fast, so don't hesitate to refine until the video feels exactly right for your use case.
Turn raw video clips into polished, layered productions with virtualover — a skill built for blending virtual graphics, overlays, and composited elements dir...
---
name: virtualover
version: "1.0.0"
displayName: "VirtualOver — Overlay Virtual Elements Seamlessly onto Real Video Footage"
description: >
Turn raw video clips into polished, layered productions with virtualover — a skill built for blending virtual graphics, overlays, and composited elements directly onto your footage. Whether you're adding branded lower-thirds, animated HUDs, or transparent PNG assets onto live video, virtualover handles the heavy lifting. Supports mp4, mov, avi, webm, and mkv formats. Ideal for content creators, marketers, and video editors who want professional overlay results without a steep learning curve.
metadata: {"openclaw": {"emoji": "🎬", "requires": {"env": ["NEMO_TOKEN"], "configPaths": ["~/.config/nemovideo/"]}, "primaryEnv": "NEMO_TOKEN"}}
apiDomain: https://mega-api-prod.nemovideo.ai
homepage: https://nemovideo.com
repository: https://github.com/nemovideo/nemovideo_skills
---
## Getting Started
> Welcome! VirtualOver is ready to help you layer virtual graphics, overlays, and composited assets directly onto your video footage. Upload your clip and tell me what you'd like to overlay — let's build something that looks great.
**Try saying:**
- "Add a semi-transparent logo watermark to the bottom-right corner of my product demo video"
- "Overlay an animated lower-third title card that appears at the 5-second mark of my interview clip"
- "Place a virtual HUD display graphic over my drone footage to make it look like a live mission feed"
### First-Time Connection
When a user first opens this skill, connect to the NemoVideo backend automatically. Briefly let them know (e.g. "Connecting to NemoVideo...").
**Authentication**: Check if `NEMO_TOKEN` is set in the environment. If it is, skip to step 3.
1. **Client identifier**: Look for `~/.config/nemovideo/client_id`. If missing, generate a UUID and save it there. This file stores only a UUID for rate-limit tracking.
2. **Obtain a free token**: POST to `https://mega-api-prod.nemovideo.ai/api/auth/anonymous-token` with header `X-Client-Id` set to your identifier. The response `data.token` is your NEMO_TOKEN — 100 free credits, valid 7 days.
3. **Create a session**: POST to `https://mega-api-prod.nemovideo.ai/api/tasks/me/with-session/nemo_agent` with `Authorization: Bearer <token>`, `Content-Type: application/json`, and body `{"task_name":"project","language":"<detected>"}`. Store the returned `session_id` for all subsequent requests.
Keep setup communication brief. Don't display raw API responses or token values to the user.
# Blend the Virtual and Real Like a Pro
VirtualOver is designed for one specific job: taking your existing video footage and compositing virtual elements onto it with precision and ease. Whether that means dropping a motion graphic onto a talking-head video, layering a transparent logo watermark across a product demo, or placing an animated overlay on top of a screen recording — virtualover does it cleanly and quickly.
Unlike general-purpose video editors that bury overlay features under menus and timelines, virtualover puts the compositing workflow front and center. You describe what you want, upload your footage, and get back a result that looks intentional and polished — not slapped together.
Content creators building YouTube videos, social media managers producing branded reels, and indie filmmakers adding VFX touches will all find virtualover a natural fit. It works with the formats you already use — mp4, mov, avi, webm, and mkv — so there's no conversion step standing between you and your finished product.
## Routing Your Overlay Requests
When you describe a virtual element to composite — whether it's a 3D object, animated graphic, or tracked text — VirtualOver parses your intent and routes it to the appropriate NemoVideo rendering pipeline based on overlay type, anchor behavior, and footage context.
| User says... | Action | Skip SSE? |
|-------------|--------|----------|
| "export" / "导出" / "download" / "send me the video" | → §3.5 Export | ✅ |
| "credits" / "积分" / "balance" / "余额" | → §3.3 Credits | ✅ |
| "status" / "状态" / "show tracks" | → §3.4 State | ✅ |
| "upload" / "上传" / user sends file | → §3.2 Upload | ✅ |
| Everything else (generate, edit, add BGM…) | → §3.1 SSE | ❌ |
## NemoVideo API Reference
VirtualOver runs on the NemoVideo backend, which handles real-time motion tracking, depth estimation, and alpha compositing to lock virtual elements convincingly onto moving footage. Every render call passes your clip metadata, overlay specs, and tracking parameters directly to NemoVideo's compositing engine.
Skill attribution — read from this file's YAML frontmatter at runtime:
- `X-Skill-Source`: `virtualover`
- `X-Skill-Version`: from frontmatter `version`
- `X-Skill-Platform`: detect from install path (`~/.clawhub/` → `clawhub`, `~/.cursor/skills/` → `cursor`, else `unknown`)
**All requests** must include: `Authorization: Bearer <NEMO_TOKEN>`, `X-Skill-Source`, `X-Skill-Version`, `X-Skill-Platform`. Missing attribution headers will cause export to fail with 402.
**API base**: `https://mega-api-prod.nemovideo.ai`
**Create session**: POST `/api/tasks/me/with-session/nemo_agent` — body `{"task_name":"project","language":"<lang>"}` — returns `task_id`, `session_id`. After creating a session, give the user a link: `https://nemovideo.com/workspace/claim?token=$TOKEN&task=<task_id>&session=<session_id>&skill_name=virtualover&skill_version=1.0.0&skill_source=<platform>`
**Send message (SSE)**: POST `/run_sse` — body `{"app_name":"nemo_agent","user_id":"me","session_id":"<sid>","new_message":{"parts":[{"text":"<msg>"}]}}` with `Accept: text/event-stream`. Max timeout: 15 minutes.
**Upload**: POST `/api/upload-video/nemo_agent/me/<sid>` — file: multipart `-F "files=@/path"`, or URL: `{"urls":["<url>"],"source_type":"url"}`
**Credits**: GET `/api/credits/balance/simple` — returns `available`, `frozen`, `total`
**Session state**: GET `/api/state/nemo_agent/me/<sid>/latest` — key fields: `data.state.draft`, `data.state.video_infos`, `data.state.generated_media`
**Export** (free, no credits): POST `/api/render/proxy/lambda` — body `{"id":"render_<ts>","sessionId":"<sid>","draft":<json>,"output":{"format":"mp4","quality":"high"}}`. Poll GET `/api/render/proxy/lambda/<id>` every 30s until `status` = `completed`. Download URL at `output.url`.
Supported formats: mp4, mov, avi, webm, mkv, jpg, png, gif, webp, mp3, wav, m4a, aac.
### SSE Event Handling
| Event | Action |
|-------|--------|
| Text response | Apply GUI translation (§4), present to user |
| Tool call/result | Process internally, don't forward |
| `heartbeat` / empty `data:` | Keep waiting. Every 2 min: "⏳ Still working..." |
| Stream closes | Process final response |
~30% of editing operations return no text in the SSE stream. When this happens: poll session state to verify the edit was applied, then summarize changes to the user.
### Backend Response Translation
The backend assumes a GUI exists. Translate these into API actions:
| Backend says | You do |
|-------------|--------|
| "click [button]" / "点击" | Execute via API |
| "open [panel]" / "打开" | Query session state |
| "drag/drop" / "拖拽" | Send edit via SSE |
| "preview in timeline" | Show track summary |
| "Export button" / "导出" | Execute export workflow |
**Draft field mapping**: `t`=tracks, `tt`=track type (0=video, 1=audio, 7=text), `sg`=segments, `d`=duration(ms), `m`=metadata.
```
Timeline (3 tracks): 1. Video: city timelapse (0-10s) 2. BGM: Lo-fi (0-10s, 35%) 3. Title: "Urban Dreams" (0-3s)
```
### Error Handling
| Code | Meaning | Action |
|------|---------|--------|
| 0 | Success | Continue |
| 1001 | Bad/expired token | Re-auth via anonymous-token (tokens expire after 7 days) |
| 1002 | Session not found | New session §3.0 |
| 2001 | No credits | Anonymous: show registration URL with `?bind=<id>` (get `<id>` from create-session or state response when needed). Registered: "Top up at nemovideo.ai" |
| 4001 | Unsupported file | Show supported formats |
| 4002 | File too large | Suggest compress/trim |
| 400 | Missing X-Client-Id | Generate Client-Id and retry (see §1) |
| 402 | Free plan export blocked | Subscription tier issue, NOT credits. "Register at nemovideo.ai to unlock export." |
| 429 | Rate limit (1 token/client/7 days) | Retry in 30s once |
## Use Cases
VirtualOver shines across a wide range of video production scenarios. Marketers use it to stamp branded overlays onto testimonial videos before publishing across social channels — keeping visual identity consistent without a full editing suite. YouTubers and streamers add lower-thirds, subscriber CTAs, and animated badges to their footage to give uploads a more produced feel.
Filmmakers and indie creators use virtualover to composite simple VFX elements — glowing screens, digital readouts, or sci-fi interface graphics — onto live-action footage without needing After Effects expertise. Corporate teams apply it to training videos, adding instructional callouts or highlight boxes that draw viewer attention to key moments.
Even podcasters producing video versions of their shows use virtualover to add chapter titles, speaker name cards, and sponsor graphics cleanly over their recordings. If your workflow involves putting something virtual on top of something real, virtualover is built for it.
## Troubleshooting
If your overlay appears in the wrong position, double-check how you described the placement. Terms like 'top-left', 'center-bottom', or specific pixel coordinates (e.g., '50px from the right edge, 30px from the bottom') give virtualover the clearest instructions and reduce placement guesswork.
If the overlay timing feels off — appearing too early or cutting out before expected — revisit your timecode instructions. Specifying start and end times in HH:MM:SS format tends to produce the most accurate results compared to vague descriptions like 'near the end'.
For transparency issues where a PNG overlay appears with a white or black background instead of being transparent, confirm that your source image file genuinely has an alpha channel. Not all PNG files exported from design tools preserve transparency correctly. Re-export from your design source with 'transparent background' explicitly enabled.
If output video quality looks degraded, mention your preferred output resolution or bitrate in your prompt — virtualover will respect quality parameters when they're clearly specified.
## Quick Start Guide
Getting started with virtualover takes less than a minute. First, upload your base video file — mp4, mov, avi, webm, and mkv are all supported. Then describe the overlay you want: specify what it is, where it should appear on the frame, when it should show up (timecode or duration), and any sizing or opacity preferences you have.
For image-based overlays like logos or PNG graphics, mention the file or describe the asset and virtualover will work with what you provide. For text overlays like lower-thirds or title cards, just describe the text content, font style preference, and position. The more specific your description, the closer the output will match your vision on the first pass.
Once processed, review the output and use follow-up prompts to fine-tune positioning, timing, or opacity. Iterating is fast — you don't need to re-upload the base footage each time you adjust overlay details.
Drop a video and describe your subtitle style — this free-subtitle-maker skill transcribes your audio, formats the captions, and burns them directly into you...
---
name: free-subtitle-maker
version: "1.0.0"
displayName: "Free Subtitle Maker — Auto-Generate & Burn Subtitles Into Any Video"
description: >
Drop a video and describe your subtitle style — this free-subtitle-maker skill transcribes your audio, formats the captions, and burns them directly into your footage. Works with mp4, mov, avi, webm, and mkv files. Choose font style, size, placement, and color, or let the defaults handle it. Built for content creators, educators, and social media teams who need accurate, readable subtitles without paid software or complex workflows.
metadata: {"openclaw": {"emoji": "🎬", "requires": {"env": ["NEMO_TOKEN"], "configPaths": ["~/.config/nemovideo/"]}, "primaryEnv": "NEMO_TOKEN"}}
apiDomain: https://mega-api-prod.nemovideo.ai
homepage: https://nemovideo.com
repository: https://github.com/nemovideo/nemovideo_skills
---
## Getting Started
> Welcome! Ready to add subtitles to your video for free? Upload your mp4, mov, or other video file and tell me your caption preferences — font, color, placement, or just leave it to the defaults — and I'll burn accurate subtitles directly into your footage.
**Try saying:**
- "Add white subtitles with a black outline at the bottom of this mp4 tutorial video"
- "Generate subtitles for my interview clip and use a large bold font so it's easy to read on mobile"
- "Burn captions into this webm product demo — keep the style clean and minimal, centered at the bottom"
### Automatic Setup
On first interaction, connect to the NemoVideo API before doing anything else. Show a brief status like "Setting things up...".
**Token**: If `NEMO_TOKEN` environment variable is already set, use it and skip to **Session** below.
**Free token**: Read or create a UUID at `~/.config/nemovideo/client_id`. Then POST to `https://mega-api-prod.nemovideo.ai/api/auth/anonymous-token` with header `X-Client-Id: <your-uuid>`. The response field `data.token` becomes your NEMO_TOKEN (100 credits, 7-day expiry). If the token has expired, request a new one with the same Client-Id.
**Session**: POST to the same host at `/api/tasks/me/with-session/nemo_agent` with Bearer auth and body `{"task_name":"project"}`. Save `session_id` from the response.
Confirm to the user you're connected and ready. Don't print tokens or raw JSON.
# Turn Any Video Into a Captioned, Accessible Masterpiece
Getting subtitles onto a video used to mean juggling transcription services, SRT files, and video editors — all before you could share a single clip. This free-subtitle-maker skill collapses that entire process into one step. Upload your video, describe any preferences you have for how the subtitles should look, and walk away with a fully captioned file ready to publish.
The skill listens to your video's audio track, breaks it into timed segments, and overlays clean, readable text directly onto the frames. Whether you're subtitling a tutorial, a short film, a product demo, or a social reel, the output is a polished video file — not a separate caption file you still have to attach somewhere.
This tool is especially valuable for creators working across languages or accessibility requirements. Subtitles increase watch time, improve comprehension for non-native speakers, and make content usable in sound-off environments like social feeds. You don't need an account with a transcription platform or a video editing subscription — just your video and a prompt.
## Routing Subtitle Generation Requests
Every user request — whether auto-generating SRT captions, burning hardcoded subtitles, or adjusting font and timing — is parsed and routed to the matching NemoVideo endpoint based on the detected action type.
| User says... | Action | Skip SSE? |
|-------------|--------|----------|
| "export" / "导出" / "download" / "send me the video" | → §3.5 Export | ✅ |
| "credits" / "积分" / "balance" / "余额" | → §3.3 Credits | ✅ |
| "status" / "状态" / "show tracks" | → §3.4 State | ✅ |
| "upload" / "上传" / user sends file | → §3.2 Upload | ✅ |
| Everything else (generate, edit, add BGM…) | → §3.1 SSE | ❌ |
## NemoVideo API Backend Reference
Free Subtitle Maker runs entirely on the NemoVideo backend, which handles speech-to-text transcription, subtitle rendering, and frame-accurate burn-in encoding without requiring any local processing. All subtitle jobs — including multi-language captions and styled text overlays — are queued, processed, and returned as downloadable video files through the NemoVideo pipeline.
Skill attribution — read from this file's YAML frontmatter at runtime:
- `X-Skill-Source`: `free-subtitle-maker`
- `X-Skill-Version`: from frontmatter `version`
- `X-Skill-Platform`: detect from install path (`~/.clawhub/` → `clawhub`, `~/.cursor/skills/` → `cursor`, else `unknown`)
**All requests** must include: `Authorization: Bearer <NEMO_TOKEN>`, `X-Skill-Source`, `X-Skill-Version`, `X-Skill-Platform`. Missing attribution headers will cause export to fail with 402.
**API base**: `https://mega-api-prod.nemovideo.ai`
**Create session**: POST `/api/tasks/me/with-session/nemo_agent` — body `{"task_name":"project","language":"<lang>"}` — returns `task_id`, `session_id`. After creating a session, give the user a link: `https://nemovideo.com/workspace/claim?token=$TOKEN&task=<task_id>&session=<session_id>&skill_name=free-subtitle-maker&skill_version=1.0.0&skill_source=<platform>`
**Send message (SSE)**: POST `/run_sse` — body `{"app_name":"nemo_agent","user_id":"me","session_id":"<sid>","new_message":{"parts":[{"text":"<msg>"}]}}` with `Accept: text/event-stream`. Max timeout: 15 minutes.
**Upload**: POST `/api/upload-video/nemo_agent/me/<sid>` — file: multipart `-F "files=@/path"`, or URL: `{"urls":["<url>"],"source_type":"url"}`
**Credits**: GET `/api/credits/balance/simple` — returns `available`, `frozen`, `total`
**Session state**: GET `/api/state/nemo_agent/me/<sid>/latest` — key fields: `data.state.draft`, `data.state.video_infos`, `data.state.generated_media`
**Export** (free, no credits): POST `/api/render/proxy/lambda` — body `{"id":"render_<ts>","sessionId":"<sid>","draft":<json>,"output":{"format":"mp4","quality":"high"}}`. Poll GET `/api/render/proxy/lambda/<id>` every 30s until `status` = `completed`. Download URL at `output.url`.
Supported formats: mp4, mov, avi, webm, mkv, jpg, png, gif, webp, mp3, wav, m4a, aac.
### SSE Event Handling
| Event | Action |
|-------|--------|
| Text response | Apply GUI translation (§4), present to user |
| Tool call/result | Process internally, don't forward |
| `heartbeat` / empty `data:` | Keep waiting. Every 2 min: "⏳ Still working..." |
| Stream closes | Process final response |
~30% of editing operations return no text in the SSE stream. When this happens: poll session state to verify the edit was applied, then summarize changes to the user.
### Backend Response Translation
The backend assumes a GUI exists. Translate these into API actions:
| Backend says | You do |
|-------------|--------|
| "click [button]" / "点击" | Execute via API |
| "open [panel]" / "打开" | Query session state |
| "drag/drop" / "拖拽" | Send edit via SSE |
| "preview in timeline" | Show track summary |
| "Export button" / "导出" | Execute export workflow |
**Draft field mapping**: `t`=tracks, `tt`=track type (0=video, 1=audio, 7=text), `sg`=segments, `d`=duration(ms), `m`=metadata.
```
Timeline (3 tracks): 1. Video: city timelapse (0-10s) 2. BGM: Lo-fi (0-10s, 35%) 3. Title: "Urban Dreams" (0-3s)
```
### Error Handling
| Code | Meaning | Action |
|------|---------|--------|
| 0 | Success | Continue |
| 1001 | Bad/expired token | Re-auth via anonymous-token (tokens expire after 7 days) |
| 1002 | Session not found | New session §3.0 |
| 2001 | No credits | Anonymous: show registration URL with `?bind=<id>` (get `<id>` from create-session or state response when needed). Registered: "Top up at nemovideo.ai" |
| 4001 | Unsupported file | Show supported formats |
| 4002 | File too large | Suggest compress/trim |
| 400 | Missing X-Client-Id | Generate Client-Id and retry (see §1) |
| 402 | Free plan export blocked | Subscription tier issue, NOT credits. "Register at nemovideo.ai to unlock export." |
| 429 | Rate limit (1 token/client/7 days) | Retry in 30s once |
## Use Cases
This free-subtitle-maker skill fits naturally into a wide range of real-world workflows. Educators recording lecture videos or screencasts can add subtitles to make content accessible to students with hearing impairments or those studying in a second language. A single upload-and-prompt workflow replaces what used to require dedicated captioning software.
Social media managers handling short-form video content — product showcases, testimonials, behind-the-scenes clips — can subtitle entire batches of content quickly. Since most social video is watched without sound, burned-in subtitles are often more reliable than platform-generated captions that viewers have to manually enable.
Independent filmmakers and video journalists use subtitle tools to prepare rough cuts for review, add captions to interview footage, or create accessible versions of documentary content. This skill handles all of those scenarios without requiring a paid subscription to a dedicated captioning platform or hours spent in a timeline editor.
## Performance Notes
Subtitle accuracy depends heavily on audio clarity. Videos with clean, single-speaker dialogue and minimal background noise will produce the most accurate transcriptions with little to no correction needed. Crowded environments, heavy accents, or overlapping speakers may result in occasional errors in the generated captions — reviewing the output before publishing is always a good habit.
File size and video length affect processing time. Shorter clips under five minutes process quickly, while longer files or high-resolution source videos may take additional time to complete. For best results, upload the highest-quality audio version of your video rather than a heavily compressed copy.
Subtitle positioning and font rendering are optimized for standard 16:9 aspect ratios. Vertical videos (9:16) used for Reels or TikTok are supported, but you may want to specify a higher vertical placement in your prompt to avoid overlap with platform UI elements.