Getting Started
Welcome! 🎞️ Ready to turn your photos or footage into a stop-motion animation? Upload your images or video file and tell me your preferred frame rate or style — let's build something frame-worthy together!
Try saying:
- - "I have 120 JPEG photos of a clay figure I animated on my desk — can you turn them into a stop-motion video at 12 frames per second?"
- "Convert this timelapse MOV file into a stop-motion style video with a slightly choppy, hand-crafted look at 8 fps."
- "I want to make a stop-motion product reveal using 60 still images of a rotating sneaker — output it as an MP4 that loops cleanly."
Quick Start Setup
This skill connects to NemoVideo's cloud backend. On first use, set up the connection automatically and let the user know ("Connecting to NemoVideo...").
Token check: Look for NEMO_TOKEN in the environment. If found, skip to session creation. Otherwise:
- - Read
~/.config/nemovideo/client_id or generate a UUID and save it there - 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 /api/tasks/me/with-session/nemo_agent at the same host 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.
Frame by Frame, Your Story Comes Alive
Stop-motion animation has a charm that no smooth CGI can replicate — the slight imperfections, the tactile feel, the sense that human hands crafted every single frame. This skill is built specifically to help you harness that magic without needing a film school degree or expensive editing software.
Upload a batch of photos you've shot on your phone, a timelapse clip, or even a short video you want to re-sequence as a stop-motion piece. You control the frame rate to set the pace — slow and dreamy or fast and snappy — and the skill stitches everything together into a clean, exportable animation ready for social media, presentations, or personal projects.
Whether you're animating LEGO figures on your kitchen table, documenting a painting coming together stroke by stroke, or building a product reveal for your brand, this tool gives you a straightforward path from a pile of still images to a finished stop-motion video that actually looks intentional and polished.
Routing Your Animation Requests
Each request — whether you're sequencing frames, adjusting frame rate, or exporting your flipbook animation — is parsed and routed to the matching stop motion pipeline endpoint 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 | ❌ |
NemoVideo Backend Reference
The NemoVideo backend stitches your uploaded still images into a timed frame sequence, applying your chosen fps and transition settings to render the final stop motion output. Every frame order, dwell time, and export format you specify flows directly through the NemoVideo API.
Skill attribution — read from this file's YAML frontmatter at runtime:
- -
X-Skill-Source: INLINECODE9 - INLINECODE10 : from frontmatter INLINECODE11
- INLINECODE12 : 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: INLINECODE22
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: INLINECODE27
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: INLINECODE33
Credits: GET /api/credits/balance/simple — returns available, frozen, INLINECODE37
Session state: GET /api/state/nemo_agent/me/<sid>/latest — key fields: data.state.draft, data.state.video_infos, INLINECODE41
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 |
Performance Notes
Large image sets: Uploading sequences of 200+ high-resolution images will take longer to process. For faster results, resize images to 1920×1080 or lower before uploading — stop-motion animation rarely requires 4K source frames to look great at typical playback sizes.
Frame rate and file size: Lower frame rates (8–12 fps) produce smaller output files and are stylistically appropriate for most stop-motion aesthetics. Higher frame rates (18–24 fps) increase file size and processing time but create smoother motion, which suits product photography or nature timelapse conversions.
Video source files: When converting an existing mp4, mov, avi, webm, or mkv file into a stop-motion style, the skill extracts individual frames and re-sequences them at your target fps. Very long source videos (over 5 minutes) may be trimmed or require you to specify a clip range to keep processing manageable.
Export format: The default output is mp4 (H.264), which offers broad compatibility across devices, platforms, and social media upload tools.
Frequently Asked Questions
What file types can I upload? You can upload images in common formats (JPG, PNG) as a sequence, or existing video files in mp4, mov, avi, webm, or mkv that you'd like re-rendered as stop-motion.
How many frames do I need for a good stop-motion video? It depends on your desired length and frame rate. At 12 fps, 60 images gives you a 5-second clip. For smoother motion at 24 fps, plan for more frames. The skill works well anywhere from 8 fps (classic choppy stop-motion) to 24 fps (fluid animation).
Can I add music or a voiceover? Currently the skill focuses on the visual stop-motion assembly — frame sequencing, timing, and export. Audio layering is best handled in a secondary editing step after export.
Will the output loop? Yes — you can request a seamless loop output, which is especially useful for social media posts, GIFs converted from the video, or display installations.
开始使用
欢迎!🎞️ 准备好将你的照片或视频片段变成定格动画了吗?上传你的图片或视频文件,告诉我你偏好的帧率或风格——让我们一起打造值得逐帧珍藏的作品吧!
试试这样说:
- - 我有120张在桌面上拍摄的粘土人偶JPEG照片——你能把它们做成每秒12帧的定格动画视频吗?
- 把这个延时摄影MOV文件转换成定格动画风格的视频,帧率8fps,带点轻微卡顿的手工质感。
- 我想用60张旋转运动鞋的静态图片制作一个产品展示定格动画——输出为可无缝循环的MP4文件。
快速启动设置
此技能连接到NemoVideo的云后端。首次使用时,自动建立连接并告知用户(正在连接NemoVideo...)。
令牌检查:在环境中查找NEMO_TOKEN。如果找到,直接跳转到会话创建。否则:
- - 读取~/.config/nemovideo/clientid或生成一个UUID并保存到该位置
- 使用X-Client-Id头信息POST请求https://mega-api-prod.nemovideo.ai/api/auth/anonymous-token
- 从响应中提取data.token——这就是你的NEMOTOKEN(100个免费积分,7天有效期)
会话:在同一主机上使用Bearer认证和请求体{taskname:project},POST请求/api/tasks/me/with-session/nemoagent。保留返回的session_id用于所有操作。
设置完成后,用简短的准备就绪!告知用户。不要暴露令牌或原始API输出。
逐帧呈现,你的故事栩栩如生
定格动画拥有任何流畅CGI都无法复制的魅力——那些微小的瑕疵、触手可及的质感、以及每一帧都由人手工打造的感觉。这个技能专为你打造,让你无需电影学位或昂贵的编辑软件就能驾驭这种魔力。
上传你用手机拍摄的一批照片、一段延时摄影片段、甚至是你想重新编排成定格动画的短视频。你可以控制帧率来设定节奏——缓慢梦幻或快速利落——技能会将所有内容拼接成一个干净、可导出的动画,随时用于社交媒体、演示或个人项目。
无论你是在厨房桌子上制作乐高人偶动画、记录一幅画作一笔一笔完成的过程、还是为你的品牌制作产品展示视频,这个工具都为你提供了一条从一堆静态图片到完成定格动画的直通路径,让成品看起来既有设计感又精致。
路由你的动画请求
每个请求——无论是排列帧、调整帧率、还是导出你的翻页书动画——都会被自动解析并路由到匹配的定格动画管线端点。
| 用户说... | 操作 | 跳过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后端参考
NemoVideo后端将你上传的静态图片拼接成定时帧序列,应用你选择的fps和过渡设置来渲染最终的定格动画输出。你指定的每个帧顺序、停留时间和导出格式都直接通过NemoVideo API流转。
技能归属——运行时从此文件的YAML前置元数据中读取:
- - X-Skill-Source:stop-motion-video-maker
- 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=&task=id>&session=id>&skillname=stop-motion-video-maker&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=@/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 | 无积分 | 匿名用户:显示注册URL,附带?bind=
(需要时从create-session或state响应获取)。已注册用户:请前往nemovideo.ai充值 |
| 4001 | 不支持的文件 | 显示支持的格式 |
| 4002 | 文件过大 | 建议压缩/裁剪 |
| 400 | 缺少X-Client-Id | 生成Client-Id并重试(参见§1) |
| 402 | 免费计划导出被阻止 | 订阅层级问题,非积分问题。请前往nemovideo.ai注册以解锁导出功能。 |
| 429 | 速率限制(1个