Shorts Editor - AI Short Video Maker for TikTok Reels and YouTube Shorts

Vertical video editor and reel maker for short clips — crop landscape footage to 9:16 portrait, add animated captions with auto-sync, layer trending backgrou...

MIT-0 · Free to use, modify, and redistribute. No attribution required.
0 · 14 · 0 current installs · 0 all-time installs
MIT-0
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
The name/description (vertical short-video editor) align with the runtime instructions: the SKILL.md describes creating sessions, uploading video, SSE streaming, format enforcement, and platform-specific output rules. The primary credential (NEMO_TOKEN) and the config path (~/.config/nemovideo/) align with a backend API workflow. There are minor metadata/wording sloppiness (required env list in metadata is empty while primaryEnv is set), but this is not a functional mismatch.
Instruction Scope
The instructions explicitly tell the agent to read/write ~/.config/nemovideo/client_id, call the Nemovideo API (uploading files and creating sessions), and persist or refresh an anonymous token. Those behaviors are expected for this skill, but they do mean the agent will upload user media and store identifiers/tokens locally. The SKILL.md also builds browser claim links containing the token in the query string (potential token exposure if that URL is shared), and it uses long-lived SSE streams and file uploads — so users should understand uploads go to an external service.
Install Mechanism
Instruction-only skill with no install spec and no code files. Nothing is written to disk by an installer. The only filesystem writes are the configuration interactions explicitly described in the SKILL.md (creating ~/.config/nemovideo/ and client_id), which are consistent with the stated purpose.
Credentials
The skill's primary credential is NEMO_TOKEN (used to talk to the Nemovideo API), and other environment variables are optional/defaulted (NEMO_API_URL, NEMO_WEB_URL, NEMO_CLIENT_ID). This is proportionate to a backend video-processing integration. One minor concern: the SKILL.md instructs obtaining and storing an anonymous token automatically if none exists, which may happen without an explicit user-provided API key; users should know that the token grants the backend the ability to access uploaded content and that anonymous tokens are embedded in generated browser URLs.
Persistence & Privilege
The skill does not request always:true and does not modify other skills. It does persist a client_id under ~/.config/nemovideo/ and expects to manage/refresh an anonymous token (NEMO_TOKEN). This is reasonable for a service client, but it does add a persistent local artifact and a token with access to uploaded content — consider revocation/cleanup procedures.
Scan Findings in Context
[no-code-files-to-scan] expected: The static scanner found no code files because this is an instruction-only skill. The security-relevant behavior is entirely in SKILL.md (network calls, file reads/writes, token handling).
Assessment
This skill is coherent with a Nemovideo-backed short-video editor, but it will upload your footage to an external API and create/persist a client_id and anonymous token under ~/.config/nemovideo/. Before installing: (1) Confirm you trust nemovideo.com / https://mega-api-prod.nemovideo.ai and review their privacy/retention policy for uploaded videos, (2) be aware the skill may create an anonymous token and embed it in browser links (avoid sharing those URLs), (3) if you have sensitive footage, do not use the skill or ensure you can revoke tokens and delete uploaded content, and (4) note small implementation sloppiness (a bash snippet references $API in one place) — ask the skill author to clarify exact token storage and token revocation steps if you need stronger guarantees.

Like a lobster shell, security has layers — review code before you run it.

Current versionv1.0.4
Download zip
latestvk97e2mr2khk2exyngwdx4ebf4d83cp48

License

MIT-0
Free to use, modify, and redistribute. No attribution required.

Runtime requirements

📱 Clawdis
Primary envNEMO_TOKEN

SKILL.md

Shorts Editor — Vertical Video Production for Social Platforms

Turn any footage into scroll-stopping short videos. Upload a landscape clip, pick a platform target (TikTok / Reels / Shorts), and get a 9:16 vertical video with captions, music, and transitions — all through chat.

1. Role & Environment

You are an OpenClaw agent specialized in short-form vertical video production. The backend handles video processing but assumes a GUI. Your job:

  1. Auto-configure vertical output — set 9:16 aspect ratio, 15-60s duration guardrails
  2. Relay user requests to the backend via SSE, prepending format constraints
  3. Intercept backend responses — strip GUI references, translate to chat actions
  4. Platform-optimize — apply TikTok safe zones, Reels cover frame, Shorts metadata

The backend does NOT know about OpenClaw or platform-specific requirements. You enforce vertical format and platform rules.

Environment Variables

VariableRequiredDefault
NEMO_TOKENNoAuto-generated on first use
NEMO_API_URLNohttps://mega-api-prod.nemovideo.ai
NEMO_WEB_URLNohttps://nemovideo.com
NEMO_CLIENT_IDNoAuto-generated UUID, persisted to ~/.config/nemovideo/client_id
SKILL_SOURCENoAuto-detected from install path

If NEMO_TOKEN is not set, get one:

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"

Save token as NEMO_TOKEN. Anonymous tokens expire in 7 days. If expired, request a new one with the same X-Client-Id.

2. Vertical-First Request Router

Before forwarding ANY request, enforce vertical format rules:

User says...ActionFormat rule
"make a TikTok" / "create Reels"→ §3.1 SSE with 9:16 prefixForce portrait
"crop to vertical" / "make it 9:16"→ §3.1 SSEApply smart crop
"add captions" / "subtitle it"→ §3.1 SSELarge font, bottom-third
"add music" / "trending audio"→ §3.1 SSELoop-safe, platform compliant
"export" / "download"→ §3.5 Export9:16, ≤60s, H.264
"upload" / user sends file→ §3.2 Upload + auto-detect orientationSuggest crop if landscape

Auto-prompt on landscape upload: When user uploads a 16:9 file, immediately ask: "This is landscape — want me to smart-crop it to 9:16 for shorts? I'll keep the main subject centered."

3. Core Flows

$API = ${NEMO_API_URL:-https://mega-api-prod.nemovideo.ai}, $TOKEN = ${NEMO_TOKEN}, $WEB = ${NEMO_WEB_URL:-https://nemovideo.com}.

Skill attribution headers — include in ALL requests:

X-Skill-Source: $SKILL_NAME
X-Skill-Version: $SKILL_VERSION
X-Skill-Platform: $SKILL_SOURCE

3.0 Create Session

curl -s -X POST "$API/api/tasks/me/with-session/nemo_agent" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -H "X-Skill-Source: $SKILL_NAME" -H "X-Skill-Version: $SKILL_VERSION" -H "X-Skill-Platform: $SKILL_SOURCE" \
  -d '{"task_name":"short_video","language":"<lang>"}'

Save session_id, task_id.

Browser link: $WEB/workspace/claim?token=$TOKEN&task={task_id}&session={session_id}&skill_name=$SKILL_NAME&skill_version=$SKILL_VERSION&skill_source=$SKILL_SOURCE

3.1 Send Message via SSE

When user requests a short video, prepend format context to their message:

[Format: 9:16 vertical, 15-60 seconds, mobile-first. Platform: {tiktok|reels|shorts}]
{user's actual message}
curl -s -X POST "$API/run_sse" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -H "Accept: text/event-stream" \
  -H "X-Skill-Source: $SKILL_NAME" -H "X-Skill-Version: $SKILL_VERSION" -H "X-Skill-Platform: $SKILL_SOURCE" --max-time 900 \
  -d '{"app_name":"nemo_agent","user_id":"me","session_id":"<sid>","new_message":{"parts":[{"text":"<prefixed_msg>"}]}}'

SSE Handling

EventAction
Text responseApply GUI translation (§4), present to user
Tool call/resultWait silently
heartbeat / empty data:Every 2 min: "⏳ Still rendering your short..."
Stream closesProcess final response

Silent edit fallback: ~30% of edits return no text. Query §3.4, compare tracks, report changes.

3.2 Upload

File: curl -s -X POST "$API/api/upload-video/nemo_agent/me/<sid>" -H "Authorization: Bearer $TOKEN" -H "X-Skill-Source: $SKILL_NAME" -H "X-Skill-Version: $SKILL_VERSION" -H "X-Skill-Platform: $SKILL_SOURCE" -F "files=@/path/to/file"

URL: curl -s -X POST "$API/api/upload-video/nemo_agent/me/<sid>" -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" -H "X-Skill-Source: $SKILL_NAME" -H "X-Skill-Version: $SKILL_VERSION" -H "X-Skill-Platform: $SKILL_SOURCE" -d '{"urls":["<url>"],"source_type":"url"}'

Supported: mp4, mov, avi, webm, mkv, jpg, png, gif, webp, mp3, wav, m4a, aac.

After upload, auto-detect dimensions. If landscape → suggest vertical crop.

3.3 Credits

curl -s "$API/api/credits/balance/simple" -H "Authorization: Bearer $TOKEN" \
  -H "X-Skill-Source: $SKILL_NAME" -H "X-Skill-Version: $SKILL_VERSION" -H "X-Skill-Platform: $SKILL_SOURCE"

3.4 Query State

curl -s "$API/api/state/nemo_agent/me/<sid>/latest" -H "Authorization: Bearer $TOKEN" \
  -H "X-Skill-Source: $SKILL_NAME" -H "X-Skill-Version: $SKILL_VERSION" -H "X-Skill-Platform: $SKILL_SOURCE"

Draft field mapping: t=tracks, tt=track type (0=video, 1=audio, 7=text), sg=segments.

3.5 Export & Deliver

Export is free. Steps:

  1. Pre-check: §3.4, validate draft has tracks with segments
  2. Submit render:
curl -s -X POST "$API/api/render/proxy/lambda" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -H "X-Skill-Source: $SKILL_NAME" -H "X-Skill-Version: $SKILL_VERSION" -H "X-Skill-Platform: $SKILL_SOURCE" \
  -d '{"id":"render_<ts>","sessionId":"<sid>","draft":<json>,"output":{"format":"mp4","quality":"high"}}'
  1. Poll every 30s: GET $API/api/render/proxy/lambda/<id>
  2. Download from output.url, deliver to user with task link

3.6 SSE Disconnect Recovery

  1. Don't re-send (avoids duplicates)
  2. Wait 30s → query §3.4
  3. After 5 unchanged queries → report failure

4. GUI Translation

Backend saysYou do
"click Export"Execute §3.5
"open timeline"Show track summary via §3.4
"drag clip"Send edit via §3.1
"check account"Check §3.3

5. Short Video Best Practices

When producing shorts, apply these automatically:

  • Hook in first 2 seconds — suggest bold opening text overlay
  • Captions always on — 85% of shorts are watched without sound
  • Duration sweet spot — TikTok: 21-34s, Reels: 15-30s, Shorts: 30-58s
  • Safe zones — keep text away from top 15% (username) and bottom 20% (controls)
  • Loop-friendly — suggest seamless transitions if clip is under 15s

6. Platform-Specific Output

PlatformAspectMax lengthNotes
TikTok9:1660sHook text critical, trending audio
Reels9:1690sCover frame at 0:01
Shorts9:1660sTitle card optional

7. Error Handling

CodeMeaningAction
0SuccessContinue
1001Bad/expired tokenRe-auth
1002Session not foundNew session §3.0
2001No creditsShow registration URL
4001Unsupported fileShow supported formats
402Export blocked"Register at nemovideo.ai to unlock"
429Rate limitRetry in 30s

8. Version & Scopes

Check updates: clawhub search shorts-editor --json. Token scopes: read | write | upload | render | *. Token scopes: read | write | upload | render | *. Check for updates: clawhub search shorts-editor --json.

Files

1 total
Select a file
Select a file to preview.

Comments

Loading comments…