This source did not publish a separate summary. Review SKILL.md before using the skill.
SKILL.md
0. First Contact
When the user opens this skill or sends their first message, greet them immediately:
📝 Ready to blue picture video editor app! Just send me a video or describe your project.
Try saying:
"speed up by 2x"
"add a fade-in transition"
"make it look cinematic"
IMPORTANT: Always greet the user proactively on first contact. Let them know you're setting up while connecting. Always greet the user proactively on first contact.
Auto-Setup
When the user first interacts, set up the connection:
Check token: If NEMO_TOKEN env var is set, use it. Otherwise:
Read or generate Client-ID:
Read ~/.config/nemovideo/client_id if it exists
Otherwise generate a UUID, save it to ~/.config/nemovideo/client_id
Acquire anonymous token:
curl -s -X POST "$API/api/auth/anonymous-token" -H "X-Client-Id: $CLIENT_ID"
Store the returned token as NEMO_TOKEN for this session. You get 100 free credits.
Create a session (§3.0) so you're ready to work immediately.
Let the user know briefly: "Setting things up… ready!" then proceed with their request.
Edit Videos by Simply Describing What You Want
The blue-picture-video-editor-app skill reframes how video editing gets done. Instead of navigating complex timelines and nested menus, you describe your intent — 'cut the first three seconds, boost contrast, and add a fade-out' — and the skill interprets that instruction into precise editing operations applied to your footage.
Under the hood, this skill is powered by the OpenClaw agent, which parses natural language editing requests and maps them to a structured sequence of video processing tasks. The OpenClaw agent handles context across a conversation, so you can refine your edits iteratively — asking for a brighter grade, then requesting a different cut point — without starting over each time. It maintains awareness of your project state throughout the session.
This approach is purpose-built for the blue-picture-video-editor-app use case: creators who work quickly across multiple formats and need an editing assistant that understands both visual language and technical constraints. Whether you are cutting a short-form reel or assembling a longer documentary sequence, the skill adapts to your pacing. File compatibility covers mp4, mov, avi, webm, and mkv, ensuring your source material works regardless of camera origin or export pipeline.
Environment Variables
Variable
Required
Default
NEMO_TOKEN
No
Auto-generated (100 free credits, expires in 7 days, revocable via Settings → API Tokens)
NEMO_API_URL
No
https://mega-api-prod.nemovideo.ai
NEMO_WEB_URL
No
https://nemovideo.com
NEMO_CLIENT_ID
No
Auto-generated UUID, persisted to ~/.config/nemovideo/client_id (UUID only, no secrets)
SKILL_SOURCE
No
Auto-detected from install path, fallback unknown
If NEMO_TOKEN is not set, get one (requires X-Client-Id header):
# Generate or read persisted Client-Id
CLIENT_ID="${NEMO_CLIENT_ID:-$(cat ~/.config/nemovideo/client_id 2>/dev/null)}"
if [ -z "$CLIENT_ID" ]; then
CLIENT_ID=$(uuidgen 2>/dev/null || echo "client-$(date +%s)-$RANDOM")
mkdir -p ~/.config/nemovideo && echo "$CLIENT_ID" > ~/.config/nemovideo/client_id
fi
curl -s -X POST "$API/api/auth/anonymous-token" -H "X-Client-Id: $CLIENT_ID"
# → {"code":0,"data":{"token":"nmv_usr_xxx","credits":100,...}}
Save token as NEMO_TOKEN, CLIENT_ID as NEMO_CLIENT_ID. Anonymous: 1 token per client per 7 days; token expires in 7 days and can be revoked at any time via Settings → API Tokens on nemovideo.com. If your token expires, request a new one with the same X-Client-Id.
Local persistence: This skill writes ~/.config/nemovideo/client_id to persist the Client-Id across sessions. This avoids generating a new ID on every request, which would hit the per-IP rate limit quickly (default 10 tokens per 7 days per IP). The file contains only a UUID — no credentials are stored locally.
2. Routing Incoming Requests
Use the following table to determine which endpoint handles each type of user request.
User says...
Action
Skip SSE?
"export" / "导出" / "download" / "send me the video"
Before any editing actions can occur, a session must be established with the backend. This session token ties all subsequent requests together under a single editing context.
Open in browser: After creating a session, give the user a link to view/edit the task in NemoVideo:
$WEB/workspace/claim?token=$TOKEN&task={task_id}&session={session_id}&skill_name=$SKILL_NAME&skill_version=$SKILL_VERSION&skill_source=$SKILL_SOURCE
All conversational messages to the editor are transmitted via Server-Sent Events, which stream the backend's response back in real time.
SSE Handling
Event
Action
Text response
Apply GUI translation (§4), present to user
Tool call/result
Wait silently, don't forward
heartbeat / empty data:
Keep waiting. Every 2 min: "⏳ Still working..."
Stream closes
Process final response
Typical durations: text 5-15s, video generation 100-300s, editing 10-30s.
Timeout: 10 min heartbeats-only → assume timeout. Never re-send during generation (duplicates + double-charge).
Ignore trailing "I encountered a temporary issue" if prior responses were normal.
Silent Response Fallback (CRITICAL)
Approximately 30% of editing operations complete without returning any text in the response stream. When no text content is detected after the SSE stream closes, do not treat this as an error or prompt the user to retry. Instead, immediately call the state query endpoint to confirm the edit was applied, then acknowledge success to the user based on the returned project state.
Two-stage generation: When a raw video edit is processed, the backend automatically triggers a second processing stage that layers in background music and generates a title overlay — no additional instruction is needed from the assistant. Plan for two distinct completion events: the first signals raw video readiness, and the second confirms the fully composed output with BGM and title applied.
Use me for user in path; backend resolves from token.
Key fields: data.state.draft, data.state.video_infos, data.state.canvas_config, data.state.generated_media.
Draft field mapping: t=tracks, tt=track type (0=video, 1=audio, 7=text), sg=segments, d=duration(ms), m=metadata.
Draft ready for export when draft.t exists with at least one track with non-empty sg.
Export does NOT cost credits. Only generation/editing consumes credits.
Triggering an export does not deduct any credits from the user's account. The export sequence proceeds as follows: (a) call the export endpoint with the current session ID, (b) poll for export job completion using the returned job token, (c) once the status indicates completion retrieve the download URL, (d) present the URL to the user as their finished video, and (e) log the export event in the session record.
Status at top-level status: pending → processing → completed / failed. Download URL at output.url.
d) Download from output.url → send to user. Fallback: $API/api/render/proxy/<id>/download.
e) When delivering the video, always also give the task detail link: $WEB/workspace/claim?token=$TOKEN&task={task_id}&session={session_id}&skill_name=$SKILL_NAME&skill_version=$SKILL_VERSION&skill_source=$SKILL_SOURCE
If the SSE connection drops before the stream completes, follow these recovery steps: (1) Wait two seconds before attempting any recovery action to avoid flooding the server. (2) Call the state query endpoint to determine whether the backend finished processing despite the disconnection. (3) If the state confirms completion, surface the result to the user as normal. (4) If the state shows the operation is still in progress, re-establish the SSE connection using the original session ID and message token. (5) If the state reflects a failed or unknown status, notify the user that a temporary issue occurred and offer to resubmit the last request.
4. Translating GUI Concepts for the Backend
The backend operates under the assumption that all interactions originate from a graphical interface, so the assistant must never forward GUI-specific instructions or interface labels directly to the API.
Backend says
You do
"click [button]" / "点击"
Execute via API
"open [panel]" / "打开"
Show state via §3.4
"drag/drop" / "拖拽"
Send edit via SSE
"preview in timeline"
Show track summary
"Export button" / "导出"
Execute §3.5
"check account/billing"
Check §3.3
Keep content descriptions. Strip GUI actions.
5. Recommended Interaction Patterns
• Always confirm the session is active before sending any editing instruction, re-initializing if the session has expired.
• After every SSE stream closes, verify the outcome via the state endpoint rather than relying solely on streamed text.
• When a user requests an operation that consumes credits, surface the current balance and obtain confirmation before proceeding.
• Break complex multi-step edits into sequential single-intent messages rather than bundling multiple instructions into one request.
• If the backend returns an unexpected status code, consult the error table and resolve the condition before retrying the original request.
6. Known Limitations
• The assistant cannot directly manipulate the video timeline or access raw frame data; all edits are mediated through the messaging endpoint.
• Session tokens are not persistent across separate user conversations and must be re-created for each new session.
• Simultaneous export jobs for the same session are not supported; a second export request must wait until the first job resolves.
• File uploads are limited to the formats and size thresholds defined in the upload endpoint specification; the assistant should validate these constraints client-side before attempting an upload.
• Credit balances are read-only from the assistant's perspective; top-up flows must be handled through the user's account portal outside this skill.
7. Error Identification and Resolution
The table below maps each HTTP status code and backend error identifier to its cause and the recommended corrective action.
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
Common: no video → generate first; render fail → retry new id; SSE timeout → §3.6; silent edit → §3.1 fallback.
8. API Version and Required Token Scopes
Before going live, confirm that the integration is targeting the current stable API version documented in the developer portal — using a deprecated version may result in undocumented behavior. The OAuth token presented with each request must include all scopes required by the endpoints in use; missing scopes will produce 403 responses regardless of token validity. Review the scope list whenever new endpoints are added to the skill to ensure the token covers all necessary permissions.