Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

Add Subtitle To Video Canva

v1.0.0

Get captioned videos ready to post, without touching a single slider. Upload your video clips (MP4, MOV, AVI, WebM, up to 500MB), say something like "add sub...

0· 55·0 current·0 all-time

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for vcarolxhberger/add-subtitle-to-video-canva.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Add Subtitle To Video Canva" (vcarolxhberger/add-subtitle-to-video-canva) from ClawHub.
Skill page: https://clawhub.ai/vcarolxhberger/add-subtitle-to-video-canva
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Required env vars: NEMO_TOKEN
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install add-subtitle-to-video-canva

ClawHub CLI

Package manager switcher

npx clawhub@latest install add-subtitle-to-video-canva
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Suspicious
medium confidence
Purpose & Capability
The skill name and description emphasize 'Canva' users, but the runtime instructions call a third-party API (mega-api-prod.nemovideo.ai) and do not integrate with Canva's API or ask for Canva credentials. Requiring only NEMO_TOKEN is coherent for a nemo-backed service, but the marketing/branding vs actual integration is misleading. Also the SKILL.md frontmatter declares configPaths (~/.config/nemovideo/) while the registry metadata earlier listed no required config paths — an internal inconsistency.
Instruction Scope
Instructions direct the agent to: use an environment NEMO_TOKEN or obtain an anonymous token by POSTing to an external URL; create sessions; upload user files; poll render status; and read this file's YAML frontmatter and detect install path to populate attribution headers. These actions are expected for a remote render service, but the file-system path detection and reading the skill's frontmatter means the agent will examine local paths and the skill file at runtime — broader than a strictly 'pass-through' subtitle helper but not obviously malicious.
Install Mechanism
This is instruction-only (no install spec and no code files), so nothing is written to disk by an installer and there is no package download risk.
Credentials
The skill requests a single service credential (NEMO_TOKEN) which is appropriate for calling the nemo backend. However, it will use any NEMO_TOKEN found in the environment (so an existing token you use elsewhere could be reused) and its frontmatter references a config path (~/.config/nemovideo/) that may be read at runtime — the registry metadata did not list this, producing a discrepancy. No unrelated secrets (AWS, GitHub, etc.) are requested.
Persistence & Privilege
The skill is not set to always:true, has no installer, and does not request elevated/system-wide configuration changes. It can be invoked autonomously (platform default), which increases blast radius but is not itself unusual.
What to consider before installing
What to check before installing/using: - Understand who runs the backend: the skill calls https://mega-api-prod.nemovideo.ai for all work — your videos and any token you supply go to that service. If you don't trust that endpoint, do not provide files or your NEMO_TOKEN. - The skill will accept any NEMO_TOKEN found in the environment; if you have an existing NEMO_TOKEN for other uses, consider running the skill in a sandbox or supply a throwaway/anonymous token instead. - The name implies 'Canva' but there is no Canva API integration or Canva credentials requested — the skill is a separate nemo-backed service targeted at Canva users. Treat the branding as marketing rather than a guarantee of integration. - The SKILL.md instructs reading the skill's YAML frontmatter and probing install path to set attribution headers; this requires reading local file(s) and checking common install directories. If you are uncomfortable with that, inspect the skill file locally first or decline to install. - Because this is instruction-only, there is no installer to review, but the runtime behavior involves network calls and file uploads. If you need higher assurance, ask the publisher for privacy/security info, or request an implementation that documents data retention and encryption. If you want, I can list the exact HTTP requests the skill will make and where your data will be sent, or help craft a minimal wrapper that isolates any existing NEMO_TOKEN before running the skill.

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

Runtime requirements

💬 Clawdis
EnvNEMO_TOKEN
Primary envNEMO_TOKEN
latestvk971ehae72pqk8jytwy0re823s84t1ct
55downloads
0stars
1versions
Updated 1w ago
v1.0.0
MIT-0

Getting Started

Share your video clips and I'll get started on subtitle generation. Or just tell me what you're thinking.

Try saying:

  • "add my video clips"
  • "export 1080p MP4"
  • "add subtitles to my video in"

Getting Connected

Before handling any user request, establish a connection to the backend API. Show a brief status like "Connecting...".

If NEMO_TOKEN is in the environment, use it directly and create a session. Otherwise, acquire a free starter token:

  • Generate a UUID as client identifier
  • POST to https://mega-api-prod.nemovideo.ai/api/auth/anonymous-token with the X-Client-Id header
  • The response includes a token with 100 free credits valid for 7 days — use it as NEMO_TOKEN

Then create a session by POSTing to https://mega-api-prod.nemovideo.ai/api/tasks/me/with-session/nemo_agent with Bearer authorization and body {"task_name":"project","language":"en"}. The session_id in the response is needed for all following requests.

Tell the user you're ready. Keep the technical details out of the chat.

Add Subtitle to Video Canva — Add Captions and Export Videos

Send me your video clips and describe the result you want. The subtitle generation runs on remote GPU nodes — nothing to install on your machine.

A quick example: upload a 2-minute Canva-exported MP4 presentation, type "add subtitles to my video in English", and you'll get a 1080p MP4 back in roughly 30-60 seconds. All rendering happens server-side.

Worth noting: shorter clips under 3 minutes generate subtitles significantly faster.

Matching Input to Actions

User prompts referencing add subtitle to video canva, aspect ratio, text overlays, or audio tracks get routed to the corresponding action via keyword and intent classification.

User says...ActionSkip 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 Render Pipeline Details

Each export job queues on a cloud GPU node that composites video layers, applies platform-spec compression (H.264, up to 1080x1920), and returns a download URL within 30-90 seconds. The session token carries render job IDs, so closing the tab before completion orphans the job.

Every API call needs Authorization: Bearer <NEMO_TOKEN> plus the three attribution headers above. If any header is missing, exports return 402.

Skill attribution — read from this file's YAML frontmatter at runtime:

  • X-Skill-Source: add-subtitle-to-video-canva
  • X-Skill-Version: from frontmatter version
  • X-Skill-Platform: detect from install path (~/.clawhub/clawhub, ~/.cursor/skills/cursor, else unknown)

API base: https://mega-api-prod.nemovideo.ai

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: {"urls":["<url>"],"source_type":"url"}

Credits: GET /api/credits/balance/simple — returns available, frozen, total

Session state: GET /api/state/nemo_agent/me/<sid>/latest — key fields: data.state.draft, data.state.video_infos, data.state.generated_media

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.

Error Codes

  • 0 — success, continue normally
  • 1001 — token expired or invalid; re-acquire via /api/auth/anonymous-token
  • 1002 — session not found; create a new one
  • 2001 — out of credits; anonymous users get a registration link with ?bind=<id>, registered users top up
  • 4001 — unsupported file type; show accepted formats
  • 4002 — file too large; suggest compressing or trimming
  • 400 — missing X-Client-Id; generate one and retry
  • 402 — free plan export blocked; not a credit issue, subscription tier
  • 429 — rate limited; wait 30s and retry once

Backend Response Translation

The backend assumes a GUI exists. Translate these into API actions:

Backend saysYou 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

SSE Event Handling

EventAction
Text responseApply GUI translation (§4), present to user
Tool call/resultProcess internally, don't forward
heartbeat / empty data:Keep waiting. Every 2 min: "⏳ Still working..."
Stream closesProcess 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.

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

Timeline (3 tracks): 1. Video: city timelapse (0-10s) 2. BGM: Lo-fi (0-10s, 35%) 3. Title: "Urban Dreams" (0-3s)

Common Workflows

Quick edit: Upload → "add subtitles to my video in English" → Download MP4. Takes 30-60 seconds for a 30-second clip.

Batch style: Upload multiple files in one session. Process them one by one with different instructions. Each gets its own render.

Iterative: Start with a rough cut, preview the result, then refine. The session keeps your timeline state so you can keep tweaking.

Tips and Tricks

The backend processes faster when you're specific. Instead of "make it look better", try "add subtitles to my video in English" — concrete instructions get better results.

Max file size is 500MB. Stick to MP4, MOV, AVI, WebM for the smoothest experience.

Export as MP4 for widest compatibility across social platforms.

Comments

Loading comments...