Getting Started
Welcome! Ready to convert your MOV files into MP4s that actually play everywhere? Upload your file or describe what you need — let's get your video into a compatible format right now.
Try saying:
- - "Convert this MOV file to MP4 while keeping the original 1080p resolution and audio quality."
- "I have a batch of 12 MOV recordings from my iPhone — can you convert all of them to MP4 for uploading to YouTube?"
- "Convert my MOV to MP4 but compress it under 50MB so I can attach it to an email."
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.
Turn Stubborn MOV Files Into Universal MP4s Instantly
Apple's MOV format is great inside the QuickTime ecosystem — but the moment you try to upload a MOV to YouTube, share it on Discord, or play it on a non-Apple device, things fall apart fast. Incompatibility errors, blank previews, and rejected uploads are frustrating time-wasters, especially when you're on a deadline.
The MOV to MP4 Converter skill exists to eliminate that friction entirely. It takes your MOV files and re-encodes them into MP4 — the format that works virtually everywhere, from Instagram Reels to Zoom recordings to email attachments. You stay in control of quality settings, so you're not forced to trade file compatibility for visual fidelity.
Whether you're a filmmaker exporting from Final Cut Pro, a marketer repurposing recorded demos, or just someone trying to send a video to a friend without it breaking — this skill handles the conversion cleanly and quickly. No desktop software required, no confusing export menus, and no surprise quality degradation.
Routing Your Conversion Requests
When you submit a MOV file, the skill parses your codec preferences, target bitrate, and container settings before dispatching the job to the appropriate transcoding 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 Transcoding API Reference
The backend leverages a distributed FFmpeg-powered cloud engine to remux QuickTime MOV containers into MPEG-4 format, preserving the original H.264 or HEVC video stream and AAC audio track without re-encoding unless a lossy compression parameter is explicitly set. Conversion jobs are queued, processed in parallel, and returned via a signed download URL valid for 24 hours.
Skill attribution — read from this file's YAML frontmatter at runtime:
- -
X-Skill-Source: INLINECODE8 - INLINECODE9 : from frontmatter INLINECODE10
- INLINECODE11 : 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: INLINECODE21
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: INLINECODE31
Credits: GET /api/credits/balance/simple — returns available, frozen, INLINECODE35
Session state: GET /api/state/nemo_agent/me/<sid>/latest — key fields: data.state.draft, data.state.video_infos, INLINECODE39
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 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
For screen recordings exported as MOV from QuickTime or macOS Screenshot, use H.264 encoding rather than H.265 when converting to MP4. H.265 offers better compression but has inconsistent browser and platform support, while H.264 MP4 files play reliably in virtually every environment.
If you're converting MOV files specifically for social media, request a vertical crop (9:16 aspect ratio) during conversion rather than doing it as a separate step. Combining format conversion and aspect ratio adjustment in one pass saves time and avoids a second quality loss cycle.
For long MOV files like lectures or webinar recordings, consider splitting the output into chapters or segments during conversion. Large single MP4 files above 2GB can cause issues on certain upload platforms, and segmenting makes editing and re-uploading much more manageable.
Performance Notes
Conversion speed depends heavily on the source MOV file's resolution, duration, and codec. A 10-minute 1080p MOV from an iPhone typically converts in under two minutes. 4K ProRes MOV files from professional cameras take considerably longer due to the raw data volume involved — expect 5–10x the conversion time compared to standard HD files.
Lossless or near-lossless conversion preserves the original quality but results in larger MP4 file sizes. If your goal is web delivery or streaming, a moderate compression setting (CRF 18–23 in H.264 terms) will produce files that are visually indistinguishable from the source while being significantly smaller.
Batch conversions of many short MOV clips process more efficiently than a single large file in some cases. If you're working with a large library of short clips — like social media snippets or product demo segments — submitting them as a batch rather than one at a time will yield faster overall throughput.
Troubleshooting
If your converted MP4 has no audio, the original MOV likely used AAC or PCM audio in a format that wasn't mapped correctly during conversion. Try re-running the conversion with explicit audio codec settings — specifying AAC output usually resolves this.
Blurry or pixelated output typically means the bitrate was set too low during encoding. MOV files from iPhones and cameras often carry very high bitrates, and compressing aggressively without adjusting resolution first will visibly degrade quality. Match the output bitrate closer to the source for best results.
If the MP4 plays fine on desktop but fails to upload to Instagram or TikTok, check the frame rate. Those platforms prefer 30fps or 60fps. MOV files recorded at 24fps or non-standard rates sometimes need a frame rate normalization pass before the upload succeeds.
开始使用
欢迎!准备好将你的 MOV 文件转换为随处可播放的 MP4 了吗?上传你的文件或描述你的需求——让我们立即将你的视频转换为兼容格式。
试试这样说:
- - 将这个 MOV 文件转换为 MP4,同时保持原始 1080p 分辨率和音频质量。
- 我有 12 个来自 iPhone 的 MOV 录制文件——你能把它们全部转换为 MP4 以便上传到 YouTube 吗?
- 将我的 MOV 转换为 MP4,但压缩到 50MB 以下,这样我就可以通过电子邮件发送了。
快速启动设置
此技能连接到云端处理后端。首次使用时,自动建立连接并告知用户(正在连接...)。
令牌检查:在环境中查找 NEMO_TOKEN。如果找到,跳转到会话创建。否则:
- - 生成 UUID 作为客户端标识符
- 使用 X-Client-Id 标头 POST 请求 https://mega-api-prod.nemovideo.ai/api/auth/anonymous-token
- 从响应中提取 data.token——这就是你的 NEMO_TOKEN(100 个免费积分,7 天有效期)
会话:使用 Bearer 认证和主体 {taskname:project} POST 请求 https://mega-api-prod.nemovideo.ai/api/tasks/me/with-session/nemoagent。保留返回的 session_id 用于所有操作。
设置完成后,用简短的准备就绪!告知用户。不要暴露令牌或原始 API 输出。
立即将顽固的 MOV 文件转换为通用 MP4
苹果的 MOV 格式在 QuickTime 生态系统中表现出色——但当你尝试将 MOV 上传到 YouTube、在 Discord 上分享或在非苹果设备上播放时,问题就会迅速出现。不兼容错误、空白预览和上传被拒是令人沮丧的时间浪费,尤其是在你赶时间的时候。
MOV 到 MP4 转换技能的存在就是为了完全消除这种摩擦。它接收你的 MOV 文件并将其重新编码为 MP4——这种格式几乎在任何地方都能使用,从 Instagram Reels 到 Zoom 录制再到电子邮件附件。你可以控制质量设置,因此不必为了文件兼容性而牺牲视觉保真度。
无论你是从 Final Cut Pro 导出作品的电影制作人、重新利用录制演示的营销人员,还是只是想发送视频给朋友而不出问题的人——此技能都能干净快速地处理转换。无需桌面软件,无需令人困惑的导出菜单,也不会出现意外的质量下降。
路由你的转换请求
当你提交 MOV 文件时,该技能会解析你的编解码器偏好、目标比特率和容器设置,然后将任务分派到相应的转码管道。
| 用户说... | 操作 | 跳过 SSE? |
|---|
| export / 导出 / download / send me the video | → §3.5 导出 | ✅ |
| credits / 积分 / balance / 余额 |
→ §3.3 积分 | ✅ |
| status / 状态 / show tracks | → §3.4 状态 | ✅ |
| upload / 上传 / 用户发送文件 | → §3.2 上传 | ✅ |
| 其他所有内容(生成、编辑、添加背景音乐等) | → §3.1 SSE | ❌ |
云端转码 API 参考
后端利用分布式 FFmpeg 驱动的云引擎将 QuickTime MOV 容器重新封装为 MPEG-4 格式,保留原始 H.264 或 HEVC 视频流和 AAC 音频轨道,除非明确设置了有损压缩参数,否则不进行重新编码。转换任务被排队、并行处理,并通过有效期为 24 小时的签名下载 URL 返回。
技能归属——运行时从此文件的 YAML 前置元数据中读取:
- - X-Skill-Source:mov-to-mp4-converter
- 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。
发送消息(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=@/path,或 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 秒)
错误处理
令牌错误/过期 | 通过 anonymous-token 重新认证(令牌 7 天后过期) |
| 1002 | 未找到会话 | 新建会话 §3.0 |
| 2001 | 无积分 | 匿名用户:显示带有 ?bind=
的注册 URL(需要时从 create-session 或 state 响应获取 )。已注册用户:在您的账户中充值积分 |
| 4001 | 不支持的文件 | 显示支持的格式 |
| 4002 | 文件过大 | 建议压缩/裁剪 |
| 400 | 缺少 X-Client-Id | 生成 Client-Id 并重试(参见 §1) |
| 402 | 免费计划导出被阻止 | 订阅层级问题,非积分问题。注册或升级您的计划以解锁导出。 |
| 429 | 速率限制(1 令牌/客户端/7 天) | 30 秒后重试一次 |
技巧与窍门
对于