{"id":20983,"plugin_id":"plugins_6aab7349aeac819190867d3343cc17b3","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:16:41.931Z","digest":"bc2db4189d2f75e4d773737f4434be50c4ea3d7d340ae7376a56d6510697594d","against":null,"payload":{"description":"AI video editor for creators. Transform raw footage into polished vlogs, talking-head videos, or social media content (TikTok/Shorts/Reels). From cloning a reference style to natural language editing, simply describe your vision and let Sparki handle the rest. Runs on the cloud-hosted Sparki API — no local rendering, no ffmpeg.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":152},{"relative_path":"references/sparki-reference.md","size_in_bytes":4987},{"relative_path":"scripts/install.sh","size_in_bytes":926},{"relative_path":"scripts/sparki_web_runner.py","size_in_bytes":57605}],"name":"sparki-video-editor","skill_md_contents":"---\r\nname: sparki-video-editor\r\ndescription: AI video editor for creators. Transform raw footage into polished vlogs, talking-head videos, or social media content (TikTok/Shorts/Reels). From cloning a reference style to natural language editing, simply describe your vision and let Sparki handle the rest. Runs on the cloud-hosted Sparki API — no local rendering, no ffmpeg.\r\n---\r\n\r\n# Sparki Video Editor\r\n\r\nSkill version: 1.1.7\r\n\r\nUse this skill whenever the user asks to edit, clip, caption, translate, or\r\nreformat video. Sparki renders in the cloud; never use ffmpeg or a local video\r\nrenderer.\r\n\r\n## 1. Choose one runtime\r\n\r\nDo this before setup or editing:\r\n\r\n- **Codex browser / hosted cloud workspace:** use the bundled Web Runner. Do\r\n  not install `uv`, pip packages, or `sparki-cli`.\r\n- **Codex desktop app / local terminal:** use the Local CLI.\r\n- **Uncertain:** a chat attachment under a disposable workspace means Web\r\n  Runner. Otherwise ask one short question before installing software.\r\n\r\nAlways write results to `./sparki-output/<name>.mp4` in the current working\r\ndirectory. A browser workspace is not the user's computer: attach the finished\r\nMP4 to the conversation and also report its `local_path` and\r\n`output_directory`.\r\n\r\n## 2. Browser / hosted Codex\r\n\r\nResolve `scripts/sparki_web_runner.py` relative to this `SKILL.md`. Use\r\n`python3 -B`, or `python -B` only when it is Python 3. Never guess or copy the\r\nrunner path.\r\n\r\n### Connect\r\n\r\n```bash\r\npython3 -B <skill-dir>/scripts/sparki_web_runner.py probe\r\npython3 -B <skill-dir>/scripts/sparki_web_runner.py authorize --channel codex --state ./sparki-output/.sparki-web-auth.json\r\n```\r\n\r\nShow the returned `authorization_url`. Ask the user to sign in at Sparki and\r\napprove access. Never ask for an API key. Reuse the same state and URL while it\r\nis unexpired; do not add `--force` for a pending authorization. The runner keeps\r\nthe exchanged key in memory only and removes the state after exchange.\r\n\r\nIf `probe` fails, explain that the hosted environment cannot reach\r\n`agent-api.sparki.io`; installing packages is not a workaround.\r\n\r\n### Confirm and edit\r\n\r\nBrowser approval grants account access but does not authorize a paid editing\r\ntask. Before `run`, ask the user to approve creating the potentially paid\r\nproject. Add `--confirm-charge` only after they agree.\r\n\r\nChoose one mode:\r\n\r\n- `style-guided`: a known format; requires `--style`.\r\n- `prompt-driven`: free-form instructions; requires `--prompt`.\r\n- `style-clone`: copy one reference; requires exactly one of\r\n  `--reference-url` or `--reference-file`.\r\n\r\nExamples:\r\n\r\n```bash\r\npython3 -B <runner> run input.mp4 --state ./sparki-output/.sparki-web-auth.json --mode style-guided --style clips/highlight-reel --aspect-ratio 9:16 --output ./sparki-output/highlight.mp4 --confirm-charge\r\npython3 -B <runner> run input.mp4 --state ./sparki-output/.sparki-web-auth.json --mode prompt-driven --prompt \"Create a concise vertical travel reel\" --aspect-ratio 9:16 --output ./sparki-output/travel.mp4 --confirm-charge\r\npython3 -B <runner> run input.mp4 --state ./sparki-output/.sparki-web-auth.json --mode style-clone --reference-file reference.mp4 --aspect-ratio 9:16 --output ./sparki-output/cloned.mp4 --confirm-charge\r\n```\r\n\r\nMultiple positional inputs create one combined output. To create separate\r\noutputs, run one authorized project per input. Ask if intent is ambiguous.\r\n\r\n### Recover without duplicate charges\r\n\r\nIf `run` returns `AUTHORIZATION_PENDING`, show the same returned URL and retry\r\nthe same command only after approval.\r\n\r\nIf an error after project creation contains `task_id`, `mode`, and `output`, do\r\nnot run the full edit again. Create a fresh browser authorization, have the\r\nuser approve it, then resume the existing project:\r\n\r\n```bash\r\npython3 -B <runner> authorize --channel codex --state ./sparki-output/.sparki-web-auth.json\r\npython3 -B <runner> resume --state ./sparki-output/.sparki-web-auth.json --task-id <task-id> --mode <mode> --output <output-path>\r\n```\r\n\r\n`resume` only polls and downloads; it never creates another editing project.\r\nAfter success, attach the MP4 using `local_path`. Never claim that browser\r\nCodex opened the user's native file manager.\r\n\r\n## 3. Codex desktop / local terminal\r\n\r\n### Install the engine\r\n\r\nCheck `uv --version`. If missing, install it only with user authorization and\r\nan already trusted package manager:\r\n\r\n- macOS: `brew install uv`\r\n- Windows: `winget install --id=astral-sh.uv -e`\r\n- Any supported system with pipx: `pipx install uv`\r\n\r\nOtherwise send the user to the official uv installation guide. Do not silently\r\nexecute a downloaded installer.\r\n\r\n```bash\r\nuv tool install --upgrade sparki-cli\r\nuv tool run --from sparki-cli sparki --help\r\n```\r\n\r\nUse `sparki` when it is on `PATH`. Until a shell restart makes it available,\r\nreplace it with `uv tool run --from sparki-cli sparki`.\r\n\r\n### Connect once\r\n\r\n```bash\r\nsparki connect --channel codex --timeout 540\r\n```\r\n\r\nDo not deliberately detach or background this command. Use the longest wait\r\nsupported by the host. If the host returns a running task or session before the\r\ncommand exits, keep polling that same task or session until it finishes. The\r\ncommand reuses an existing credential; otherwise it opens `sparki.io` so the\r\nuser can sign in by email verification code, Google, or Apple and approve\r\naccess. It saves the key and runs doctor before returning. For headless\r\nenvironments add `--no-browser` and show the one-time URL while the same command\r\nkeeps polling. Never request or expose the API key, ask the user to reply when\r\napproval is complete, or start a second connection.\r\n\r\nConfiguration is shared cross-platform at\r\n`Path.home()/.sparki/config/config.json`. `SPARKI_API_KEY` and\r\n`SPARKI_CHANNEL=codex` may override it in managed environments.\r\n\r\nReport connection success only when the final JSON has `ok: true`. Follow a\r\nfailed result's `action`; a rejected credential is replaced with `sparki\r\nconnect --channel codex --force --timeout 540`.\r\n\r\n### Run and deliver\r\n\r\nInspect `sparki run --help` when constructing a command. Typical commands are:\r\n\r\n```bash\r\nsparki run input.mp4 --mode style-guided --style clips/highlight-reel --aspect-ratio 9:16 --output ./sparki-output/highlight.mp4\r\nsparki run input.mp4 --mode prompt-driven --prompt \"Create a concise vertical travel reel\" --aspect-ratio 9:16 --output ./sparki-output/travel.mp4\r\nsparki run input.mp4 --mode style-clone --reference-file reference.mp4 --aspect-ratio 9:16 --output ./sparki-output/cloned.mp4\r\n```\r\n\r\nUse `--reveal` only when the command runs on the user's computer and native GUI\r\napps are available. Omit it for containers, SSH, and headless hosts. Always\r\nreport the absolute `local_path` and `output_directory`; if native reveal fails,\r\ntell the user exactly where the output is stored.\r\n\r\nAsk for explicit confirmation before destructive asset deletion or retrying a\r\nfailed edit as a new potentially paid project. A status/download retry for an\r\nexisting `task_id` is not a new project.\r\n\r\n## 4. Editing choices\r\n\r\nWhen the user has not specified the intended result, ask only for the missing\r\nchoices: mode/style or prompt, aspect ratio, approximate duration, and whether\r\nmultiple inputs should become one output.\r\n\r\nCommon styles:\r\n\r\n- Vlog: `vlog/daily`, `vlog/travel`, `vlog/sports`, `vlog/chill-vibe`\r\n- Clips: `clips/long-to-short`, `clips/highlight-reel`\r\n- Narrative: `narrative/podcast-interview`,\r\n  `narrative/funny-commentary`, `narrative/master-storyteller`\r\n- Tools: `tools/ai-captions`, `tools/ai-translation`\r\n\r\nAspect ratios: `9:16` for TikTok/Reels/Shorts, `1:1` for square posts, and\r\n`16:9` for YouTube/landscape.\r\n\r\n## 5. Error handling\r\n\r\n- `QUOTA_EXCEEDED`: ask the user to top up at `https://sparki.io/`.\r\n- `STORAGE_FULL`: browser users manage assets on `https://sparki.io/`; local\r\n  users may inspect and delete assets with the CLI after confirmation.\r\n- `CONCURRENT_LIMIT`: wait for an active project to finish.\r\n- `AUTHORIZATION_PENDING`: reuse the current URL and state.\r\n- `RENDER_TIMEOUT` or `DOWNLOAD_FAILED` with a browser `task_id`: use `resume`;\r\n  never create another project automatically.\r\n- `NETWORK_ERROR`: retry safe reads; never automatically retry project-creation\r\n  POST requests.\r\n\r\nLoad [references/sparki-reference.md](references/sparki-reference.md) only when\r\nyou need the complete style, status, command, or error tables.\r\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}