Claim this agent
agentCLAWHUBUnverified

riffkit

Riff winning short videos — give one source (a TikTok link, an uploaded video, or an analyzed template) and the backend riffs its emotion formula into your own AI video (post-ready short-form or UGC-style ad creative), with optional digital character, product placement, and language. You riff the formula, not the video. Triggers: the user says 'riff this video', 'turn this TikTok into mine', 'make a video with this product', 'make an ad' / 'make an ad creative' / 'a UGC ad for my product', 'make a promo / marketing video for my app or product', 'remake a viral video', 'generate a short video', 'riff', 'riffkit', or sends a product image / viral link wanting a short video.

OpenClaw

Rank

62

Safety

84

Downloads

3.4k

Updated

Oct 9, 2026

Version

1.9.7

Source

CLAWHUB

About

What it does, and when to use it.

Capability contract not published. No trust telemetry is available yet. 3.4K downloads reported by the source. Last updated 10/9/2026.

Avoid when

  • Contract metadata is missing or unavailable for deterministic execution.

Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing

Public facts

Every fact links back to the source it came from.

Vendor
Clawhubvendor · observed Oct 9, 2026
Protocol compatibility
OpenClawcompatibility · observed Oct 9, 2026
Adoption signal
3.4K downloadsadoption · observed Oct 9, 2026
Latest release
1.9.7release · observed Oct 8, 2026
Handshake status
UNKNOWNsecurity

Install and run

Setup complexity: low.

clawhub skill install s17372mvc3crq7rjgnrgfb48gh89n0m6:riffkit
  1. Install using `clawhub skill install s17372mvc3crq7rjgnrgfb48gh89n0m6:riffkit` in an isolated environment before connecting it to live workloads.
  2. No published capability contract is available yet, so validate auth and request/response behavior manually.
  3. Review the upstream CLAWHUB listing at https://clawhub.ai/riffkit/riffkit before using production credentials.

Contract: missing

curl -s "https://www.xpersona.co/api/v1/agents/clawhub-riffkit-riffkit/snapshot"

Documentation

CLAWHUB

147,025 characters of source documentation, loaded on request.

Extracted files

5 files captured from the source.

SKILL.md

---
name: riffkit
version: "1.9.7"
updated_at: "2026-10-09"
source_url: "https://riffkit.ai/SKILL.md"
homepage: "https://riffkit.ai"
description: "Riff winning short videos — give one source (a TikTok link, an uploaded video, or an analyzed template) and the backend riffs its emotion formula into your own AI video (post-ready short-form or UGC-style ad creative), with optional digital character, product placement, and language. You riff the formula, not the video.
  Triggers: the user says 'riff this video', 'turn this TikTok into mine', 'make a video with this product', 'make an ad' / 'make an ad creative' / 'a UGC ad for my product', 'make a promo / marketing video for my app or product', 'remake a viral video', 'generate a short video', 'riff', 'riffkit', or sends a product image / viral link wanting a short video."
---

# Riffkit Skill

## Start here

1. **Node 20+ installed (`node -v`)?** If `riffkit --version` fails or shows a version below 0.2.0, run `npm i -g @riffkit/cli@latest`. Then run `riffkit login --agent`: it prints the approval link and exits with code 12 while the user has not approved yet (or your command times out). Send the user the link exactly as printed, and run `riffkit login --agent` again after they say they approved (if a re-run prints a new link, send that one). From then on every Riffkit call is a `riffkit` command, never curl: each step of **The flow** names its command, `riffkit help` lists them all with their routes, and `riffkit help <command>` shows what a command does and its options.
2. **No Node 20+, or the install fails?** Each command is one HTTP call: references/api.md lists them, starting with **Auth**.
3. **Three hard stops.** Adapt or Swap is the user's choice: ask unless their words name it. Spend credits (a command run with `--yes`, or an HTTP call that spends) only after the user approved the plan you restated and its quoted price. Never say a video is ready without the finished task's `asset_id`; hand it over with a link from `riffkit get_video_link`.
4. **Read this whole file before acting**, and a reference file (index at the end) when a step points to it. If a web-reading tool gave you a summary, read it again in full: `curl -fsSL https://riffkit.ai/SKILL.md` (save it to a file and read the file if your shell shows only a preview).

**Core stance: you riff the formula, not the video.** Give one winning source; the backend analyzes the emotion formula that hijacks attention and migrates it onto your own content. The footage can be completely different as long as the viewer travels the same psychological path. Or keep the footage: a **Swap** re-shoots the source's own shots and changes only who or what is in them.

## Skill scope

This skill makes short AI videos in exactly three modes: **adapt riffs** (analyze a source video's emotion formula and regenerate it as your own story), **swap riffs** (`mode=swap`: keep the source's shots, cuts and timing, and put your character, product or setting into 

_meta.json

{
  "ownerId": "kn75sjmkr973qhn10jzg4v1t7n84z7aq",
  "slug": "riffkit",
  "version": "1.9.7",
  "publishedAt": 1791482759060
}

references/anchor.md

## Core idea: the three responsibility layers (why content_anchor is the agent's value)

| Layer | Role | Locked by | Freedom |
|---|---|---|---|
| **Formula + skeleton** | **Floor guarantee** — a validated emotion mechanism + camera language | At template analysis | None (changing it forfeits the riff's value) |
| **Character + product** | **Base constants** — the digital human + product facts | Chosen in settings (or default) | Different picks = different constants, but constant within one task |
| **content_anchor** | **Ceiling driver** — which selling-point angle, which surface to fill | Agent + user draft it (optional) | **The one degree of strategic freedom** |

The formula skeleton decides which psychological path the viewer walks; `content_anchor` decides what specific content fills that path. The other layers are pre-existing constants, so **the agent's differentiated value is fusing "source formula × product/account × character" into one concrete creative instruction**: which of the product's N selling points to angle on, which surface to fill into the template's emotion mechanism. It is an **optional collaboration, not a blocking hard-stop.**

---

## content_anchor drafting framework (core subsection)

> The formula and skeleton decide which psychological path the viewer walks; `content_anchor` decides what specific content fills that path.
> When non-empty it is the **highest-priority input** for surface direction.
> Failure test: if swapping the surface for any other topic still holds, the anchor never anchored the output → invalid.
>
> **Product-image targeting (on-camera placement)**: naming a product image's exact name in the anchor narrows what the engine receives to ONLY the named image(s) — the rest of the product's images are withheld from that render. Name none → all images ship (default). Use this when the product has many images and the video should feature a specific one (e.g. "开场特写 正面图"); image names come from `GET /api/products` → `images[].name`. Matching is case-insensitive with word boundaries for ASCII names.

**Drafting template:**

```
[a specific emotion-mechanism beat of the template] × [a specific feature of the product/account] → [the viewer mind-shift you want]
```

All three variables must be specific to an actionable level — anything abstract is as good as empty.

| ✅ Focus on | ❌ Don't (lives elsewhere or zero-info) |
|---|---|
| The specific product × template join ("the scan feature × the reveal beat at segment 2") | Product generalities ("show the product's strengths") |
| The angle you want this time (which of N selling points) | Template generalities ("use the funny formula") |
| One specific face of the audience's pain point | Account positioning ("health niche" — already in persona) |
| The viewer mind-shift ("from 'I assumed it was safe' to 'a quick scan reveals hidden additives'") | Generic creative words ("authentic / real / heartfelt") |

**Where the anchor's weight goes per mode:**

| Mode | co

references/api.md

## API reference

### Commands and routes

Each step of **The flow** names a `riffkit` command; each command is one route. Without the CLI, call the route (full parameters below); with it, `riffkit help <command>` shows the same.

| Command | Route | What it does |
|---|---|---|
| `riffkit get_options` | `GET /api/settings` | What this account can use: engines and resolutions (locked or not), default pairs, limits, `credit_cover`, `staged_delivery` |
| `riffkit list_templates` | `GET /api/formulas` | Analyzed templates (a source) |
| `riffkit get_template` | `GET /api/formulas/{formula_id}` | One template's `extraction_summary` |
| `riffkit create_upload_link` | `POST /api/riffs/uploads` | A link where the user adds a video from their phone or computer |
| `riffkit get_upload` | `GET /api/riffs/uploads/{upload_id}` | Has that video arrived (`ready` → its `upload_id` is a source) |
| `riffkit list_characters` | `GET /api/characters` | Digital characters |
| `riffkit list_products` | `GET /api/products` | Products |
| `riffkit create_product` | `POST /api/products` | Create a product |
| `riffkit add_product_image` | `POST /api/products/{product_id}/images` | Add a product image |
| `riffkit list_languages` | `GET /api/languages` | Video language codes |
| `riffkit quote_remake` | `GET /api/riffs/quote` | The price of an adapt or swap riff, from any source |
| `riffkit quote_swap` | `GET /api/riffs/swap-quote` | The price of one swap video from a template |
| `riffkit quote_create` | `GET /api/creation/quote` | The price of a creation video |
| `riffkit remake_video` | `POST /api/riffs` | **Submit an adapt or swap riff** (spends credits) |
| `riffkit remake_video_batch` | `POST /api/pipeline/batch` | Analyzed-template batch, the advanced form of `riffkit remake_video` (spends credits) |
| `riffkit create_video` | `POST /api/creation/batch` | **Submit a creation video** (spends credits) |
| `riffkit get_batch` | `GET /api/tasks/batch/{batch_id}` | A batch's tasks and progress |
| `riffkit get_task` | `GET /api/tasks/{task_id}` | One task |
| `riffkit list_tasks` | `GET /api/tasks` | List tasks |
| `riffkit count_tasks` | `GET /api/tasks/stats` | Task counts |
| `riffkit get_task_content` | `GET /api/tasks/{task_id}/content` | What the engine extracted and rewrote (optional) |
| `riffkit cancel_task` | `POST /api/tasks/{task_id}/cancel` | Stop a task (what rendered stays charged) |
| `riffkit retry_task` | `POST /api/tasks/{task_id}/retry` | Retry a failed task (can spend credits) |
| `riffkit list_videos` | `GET /api/assets` | Finished videos, with caption and hashtags |
| `riffkit get_video_link` | `GET /api/assets/{asset_id}/link` | A link that opens a finished video without signing in (6 hours) |
| `riffkit continue_video` | `POST /api/assets/{asset_id}/continue` | The next section, the rest or a redo of a video made in sections (spends credits) |
| `riffkit quote_ratios` | `GET /api/pipeline/backfill/occupied` | The ratios a video already has, a

references/details.md

## Details by step

What a step of **The flow** needs beyond what it says there, for an agent that makes the calls itself (the CLI or HTTP). The routes are in "API reference".

### Mode (step 0)

| Mode | `mode` | What stays | What changes | Pick it when |
|---|---|---|---|---|
| **Adapt** | `adapt` (also what the API runs when `mode` is omitted) | The emotion formula: hook, rhythm, beats | The story, scenes, script, language | The user wants *their own* video that works like the winner |
| **Swap** | `swap` | The source's camera, cuts, framing, action, timing, sound and frame shape | What the user names: the person (your character, if you pick one), a product, and whatever `content_anchor` names: the setting, an outfit, a line's wording | The user wants *this* video with their character in it ("the same video, but me", "keep every shot") |

Swap rules (backend-enforced):
- **A swap must change at least one thing**: a character (`character_ids`), a product that has images (`product_id`; a product without images changes nothing), or a non-empty `content_anchor`. None of the three → 400 whose `detail` is a plain localized sentence (en: "A swap needs at least one change: …"; the body carries no error code, so relay `detail` rather than matching on it). Checked for every swap source, before anything is analyzed or billed.
- **The character is optional.** With no character the source's own person stays (their real face is in the output); there is no Auto person in swap. One task per character, like adapt; no character = one task. A picked character needs an approved avatar (`has_any_active_avatar=true`), same as adapt. If the user wants a *different* person, recommend picking a character: a person changed only by words in `content_anchor` has no reference image, so the face can differ between shots (and on Seedance 2.0 the voice stays the original's).
- **Whose voice changes.** On engines that change voices (Seedance 2.5, MiniMax H3), a replaced person gets a new voice only on the lines they speak on camera; narration (heard, not seen) keeps the source's voice. To change the narration too, say so in `content_anchor`, e.g. "the narration also in the new person's voice" (vague wording may not be picked up). To keep every original voice, say "keep the original audio".
- **Check the avatar before a paid swap with a character.** The swap takes the person's face, hair and build from the character's avatar image (`reference_image` in `GET /api/characters`; fetch `${BASE_URL}${reference_image}` with the session cookie, like a video's `file_url`). What works: one person, facing the camera, face large in the frame, plain background. The layout the Characters page recommends works too: one image with that person's chest-up close-up on the left and the same person head to toe on the right, same outfit (two large views, so the build and outfit are shown as well). What usually fails to replace the face in a close-up talking-head source is a sheet of many small pose
Github ReposUpdated 6mo agoRank 70

activepieces

AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents

OPENCLAW
Github ReposUpdated 6mo agoRank 70

cherry-studio

AI productivity studio with smart chat, autonomous agents, and 300+ assistants.

MCPOPENCLAW
Github ReposUpdated 6mo agoRank 70

AionUi

Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!

MCPOPENCLAW
Github ReposUpdated 7mo agoRank 70

CopilotKit

The Frontend for Agents & Generative UI. React + Angular

OPENCLAW

Machine-readable data

The same record, as JSON, for agents and crawlers.

{
  "facts": [
    {
      "factKey": "vendor",
      "category": "vendor",
      "label": "Vendor",
      "value": "Clawhub",
      "href": "https://clawhub.ai/riffkit/skills/riffkit",
      "sourceUrl": "https://clawhub.ai/riffkit/skills/riffkit",
      "sourceType": "profile",
      "confidence": "medium",
      "observedAt": "2026-10-09T08:04:50.247Z",
      "isPublic": true
    },
    {
      "factKey": "protocols",
      "category": "compatibility",
      "label": "Protocol compatibility",
      "value": "OpenClaw",
      "href": "https://www.xpersona.co/api/v1/agents/clawhub-riffkit-riffkit/contract",
      "sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-riffkit-riffkit/contract",
      "sourceType": "contract",
      "confidence": "medium",
      "observedAt": "2026-10-09T08:04:50.247Z",
      "isPublic": true
    },
    {
      "factKey": "traction",
      "category": "adoption",
      "label": "Adoption signal",
      "value": "3.4K downloads",
      "href": "https://clawhub.ai/riffkit/riffkit",
      "sourceUrl": "https://clawhub.ai/riffkit/riffkit",
      "sourceType": "profile",
      "confidence": "medium",
      "observedAt": "2026-10-09T08:04:50.247Z",
      "isPublic": true
    },
    {
      "factKey": "latest_release",
      "category": "release",
      "label": "Latest release",
      "value": "1.9.7",
      "href": "https://clawhub.ai/riffkit/riffkit",
      "sourceUrl": "https://clawhub.ai/riffkit/riffkit",
      "sourceType": "release",
      "confidence": "medium",
      "observedAt": "2026-10-08T18:05:59.060Z",
      "isPublic": true
    },
    {
      "factKey": "handshake_status",
      "category": "security",
      "label": "Handshake status",
      "value": "UNKNOWN",
      "href": "https://www.xpersona.co/api/v1/agents/clawhub-riffkit-riffkit/trust",
      "sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-riffkit-riffkit/trust",
      "sourceType": "trust",
      "confidence": "medium",
      "observedAt": null,
      "isPublic": true
    }
  ],
  "events": [
    {
      "eventType": "release",
      "title": "Release 1.9.7",
      "description": "Update to v1.9.7",
      "href": "https://clawhub.ai/riffkit/riffkit",
      "sourceUrl": "https://clawhub.ai/riffkit/riffkit",
      "sourceType": "release",
      "confidence": "medium",
      "observedAt": "2026-10-08T18:05:59.060Z",
      "isPublic": true
    }
  ]
}

Record generated Oct 9, 2026.

Sponsored

Ads related to riffkit and adjacent AI workflows.