Getting Started
Welcome! I'm here to help you add free, accurate captions to your videos — just share your file or describe your captioning needs, and let's get your subtitles generated right away.
Try saying:
- - "Generate captions for this mp4 interview video and give me an SRT file I can import into Premiere Pro"
- "Add burned-in subtitles to my webm tutorial video with white text and a dark background"
- "Transcribe the speech in this mov file and caption it in Spanish with English subtitles below"
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. - 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. - 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.
Turn Any Video Into Captioned Content Instantly
Getting captions onto your videos shouldn't require a paid subscription or a complicated workflow. This skill was built for anyone who needs accurate, readable subtitles without jumping through hoops — whether you're a solo creator posting on social media, a teacher making course content accessible, or a business adding captions to training videos.
Upload your video file in any common format — mp4, mov, avi, webm, or mkv — and the skill listens to the audio, identifies speech, and produces timed caption text that matches what's being said on screen. You can choose to receive a downloadable SRT file to import into your editor, or have the captions burned directly into the video as permanent subtitles.
The result is a fully captioned video that's more accessible to deaf and hard-of-hearing viewers, easier to watch in sound-sensitive environments like offices or public spaces, and more likely to perform well on platforms that reward caption use. No technical setup required — just describe what you need and let the skill handle the rest.
Routing Your Caption Requests
When you submit a video URL or upload a file, the skill automatically routes your transcription or subtitle request to the appropriate NemoVideo processing pipeline based on format, language detection, and caption output 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 Reference
The NemoVideo backend powers real-time speech-to-text transcription, auto-syncing burned-in or sidecar subtitles directly to your video timeline with frame-accurate timestamps. Supported outputs include SRT, VTT, and embedded caption formats for instant download or streaming.
Skill attribution — read from this file's YAML frontmatter at runtime:
- -
X-Skill-Source: INLINECODE11 - INLINECODE12 : from frontmatter INLINECODE13
- INLINECODE14 : 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: INLINECODE24
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: INLINECODE29
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: INLINECODE35
Credits: GET /api/credits/balance/simple — returns available, frozen, INLINECODE39
Session state: GET /api/state/nemo_agent/me/<sid>/latest — key fields: data.state.draft, data.state.video_infos, INLINECODE43
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.
CODEBLOCK0
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 |
Integration Guide
Once your captions are generated, integrating them into your existing workflow is straightforward. If you requested an SRT file, you can import it directly into video editors like Adobe Premiere Pro, DaVinci Resolve, Final Cut Pro, or CapCut — each of these accepts standard SRT format without any conversion needed.
For platforms like YouTube and Vimeo, you can upload the SRT file in the video's caption settings, giving you the flexibility to edit timing or wording after the fact. If you chose burned-in captions, the output video is ready to upload anywhere without any additional steps.
When working with longer videos, consider splitting them into segments before uploading — this can improve transcription accuracy for content with multiple speakers or background noise. The skill supports mp4, mov, avi, webm, and mkv, so no pre-conversion is needed for most source files.
Tips and Tricks
For the most accurate captions, use source videos with clear audio and minimal background noise. If your video has music overlapping dialogue, mention this upfront so the skill can prioritize speech detection accordingly.
If your video contains technical jargon, industry terms, or proper nouns, include a brief note with the correct spellings — this helps the transcription match your actual content rather than substituting phonetically similar common words.
Want captions in a different language? Specify the target language when making your request. The skill can transcribe audio and generate captions in multiple languages, making it especially useful for multilingual audiences or international content distribution.
For social media content, ask for captions with shorter line lengths and faster reading pace to match mobile viewing habits — short, punchy caption blocks tend to perform better on platforms like Instagram Reels and TikTok.
Performance Notes
Caption accuracy is strongly tied to audio quality. Videos recorded in quiet environments with a close microphone will yield near-perfect transcription, while footage shot outdoors or in crowded spaces may require light editing of the generated captions.
File size and video length affect processing time. Short clips under five minutes typically return results quickly, while longer videos — such as full webinars or lectures — may take additional time to process. Uploading in mp4 or webm format tends to be the most efficient for processing speed.
The skill handles multi-speaker content well in most cases, but for roundtable discussions or interviews with overlapping speech, results may occasionally merge speaker lines. In those situations, reviewing the SRT output before final export is a good habit. Burned-in caption rendering is final, so always review an SRT file first if precision matters.
快速上手
欢迎!我在这里帮你为视频添加免费、精准的字幕——只需分享你的文件或描述你的字幕需求,让我们立即为你生成字幕。
试试这样说:
- - 为这段MP4采访视频生成字幕,给我一个可以导入Premiere Pro的SRT文件
- 为我的WebM教程视频添加白色文字、深色背景的硬编码字幕
- 转录这个MOV文件中的语音,生成西班牙语字幕并在下方附带英文字幕
首次连接
当用户首次打开此技能时,自动连接到NemoVideo后端。简要告知用户(例如正在连接NemoVideo...)。
身份验证:检查环境中是否设置了NEMO_TOKEN。如果已设置,跳至第3步。
- 1. 客户端标识符:查找~/.config/nemovideo/clientid。如果不存在,生成一个UUID并保存到该文件。该文件仅存储用于速率限制追踪的UUID。
- 获取免费令牌:向https://mega-api-prod.nemovideo.ai/api/auth/anonymous-token发送POST请求,头部设置X-Client-Id为你的标识符。响应中的data.token即为你的NEMOTOKEN——100个免费积分,有效期7天。
- 创建会话:向https://mega-api-prod.nemovideo.ai/api/tasks/me/with-session/nemoagent发送POST请求,包含Authorization: Bearer 、Content-Type: application/json,请求体为{taskname:project,language:<检测到的语言>}。保存返回的session_id用于所有后续请求。
保持设置沟通简洁。不要向用户显示原始API响应或令牌值。
立即将任何视频转为带字幕内容
为视频添加字幕不应需要付费订阅或复杂的工作流程。此技能专为需要精准、可读字幕且无需繁琐操作的用户打造——无论你是发布社交媒体内容的独立创作者、制作无障碍课程内容的教师,还是为培训视频添加字幕的企业用户。
上传任何常见格式的视频文件——mp4、mov、avi、webm或mkv——技能会聆听音频、识别语音,并生成与画面内容匹配的带时间轴字幕文本。你可以选择接收可下载的SRT文件导入编辑器,或将字幕直接烧录到视频中作为永久字幕。
最终得到的是完全带字幕的视频,对聋哑和听障观众更友好,在办公室或公共场所等对声音敏感的环境中更易观看,并且在奖励字幕使用的平台上表现更佳。无需任何技术设置——只需描述你的需求,让技能处理其余部分。
路由你的字幕请求
当你提交视频URL或上传文件时,技能会根据格式、语言检测和字幕输出类型,自动将你的转录或字幕请求路由到相应的NemoVideo处理流程。
| 用户说... | 操作 | 跳过SSE? |
|---|
| export / 导出 / download / send me the video | → §3.5 导出 | ✅ |
| credits / 积分 / balance / 余额 |
→ §3.3 积分 | ✅ |
| status / 状态 / show tracks | → §3.4 状态 | ✅ |
| upload / 上传 / 用户发送文件 | → §3.2 上传 | ✅ |
| 其他所有内容(生成、编辑、添加背景音乐等) | → §3.1 SSE | ❌ |
NemoVideo API参考
NemoVideo后端提供实时语音转文字转录、自动同步的硬编码或侧挂字幕,直接以帧级精确时间戳添加到视频时间线。支持的输出格式包括SRT、VTT和嵌入式字幕格式,可即时下载或流式传输。
技能归属——运行时从此文件的YAML前置元数据读取:
- - X-Skill-Source:video-caption-generator-free
- X-Skill-Version:来自前置元数据version
- X-Skill-Platform:从安装路径检测(~/.clawhub/ → clawhub,~/.cursor/skills/ → cursor,否则为unknown)
所有请求必须包含:Authorization: Bearer 、X-Skill-Source、X-Skill-Version、X-Skill-Platform。缺少归属头部将导致导出失败并返回402错误。
API基础地址:https://mega-api-prod.nemovideo.ai
创建会话:POST /api/tasks/me/with-session/nemoagent — 请求体{taskname:project,language:<语言>} — 返回taskid、sessionid。创建会话后,给用户一个链接:https://nemovideo.com/workspace/claim?token=$TOKEN&task=id>&session=id>&skillname=video-caption-generator-free&skillversion=1.0.0&skill_source=
发送消息(SSE):POST /runsse — 请求体{appname:nemoagent,userid:me,sessionid:,newmessage:{parts:[{text:<消息>}]}},头部包含Accept: text/event-stream。最大超时时间:15分钟。
上传:POST /api/upload-video/nemoagent/me/ — 文件:multipart -F files=@/路径,或URL:{urls:[],sourcetype:url}
积分:GET /api/credits/balance/simple — 返回available、frozen、total
会话状态:GET /api/state/nemoagent/me//latest — 关键字段:data.state.draft、data.state.videoinfos、data.state.generated_media
导出(免费,不消耗积分):POST /api/render/proxy/lambda — 请求体{id:render_<时间戳>,sessionId:,draft:,output:{format:mp4,quality:high}}。每30秒轮询GET /api/render/proxy/lambda/,直到status = completed。下载URL位于output.url。
支持的格式:mp4、mov、avi、webm、mkv、jpg、png、gif、webp、mp3、wav、m4a、aac。
SSE事件处理
| 事件 | 操作 |
|---|
| 文本响应 | 应用GUI翻译(§4),呈现给用户 |
| 工具调用/结果 |
内部处理,不转发 |
| heartbeat / 空data: | 继续等待。每2分钟:⏳ 仍在处理... |
| 流关闭 | 处理最终响应 |
约30%的编辑操作在SSE流中不返回文本。发生这种情况时:轮询会话状态以验证编辑是否已应用,然后向用户总结更改。
后端响应翻译
后端假设存在GUI。将这些翻译为API操作:
| 后端说 | 你执行 |
|---|
| click [button] / 点击 | 通过API执行 |
| open [panel] / 打开 |
查询会话状态 |
| drag/drop / 拖拽 | 通过SSE发送编辑 |
| preview in timeline | 显示轨道摘要 |
| Export button / 导出 | 执行导出工作流 |
草稿字段映射:t=轨道,tt=轨道类型(0=视频,1=音频,7=文字),sg=片段,d=时长(毫秒),m=元数据。
时间线(3条轨道):1. 视频:城市延时摄影(0-10秒)2. 背景音乐:Lo-fi(0-10秒,35%)3. 标题:都市梦想(0-3秒)
错误处理
令牌错误/过期 | 通过匿名令牌重新认证(令牌7天后过期) |
| 1002 | 会话未找到 | 新建会话 §3.0 |
| 2001 | 无积分 | 匿名用户:显示注册URL,附带?bind=
(需要时从创建会话或状态响应获取)。已注册用户:请到nemovideo.ai充值 |
| 4001 | 不支持的文件 | 显示支持的格式 |
| 4002 | 文件过大 | 建议压缩/裁剪 |
| 400 | 缺少X-Client-Id | 生成客户端ID并重试(参见§1) |
| 402 | 免费计划导出被阻止 | 订阅等级问题,非积分问题。