# Send Demo-Slap Highlights to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- Download the package from Yavira.
- Extract it into a folder your agent can access.
- Paste one of the prompts below and point your agent at the extracted folder.
## Suggested prompts
### New install

```text
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
```
### Upgrade existing

```text
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
```
## Machine-readable fields
```json
{
  "schemaVersion": "1.0",
  "item": {
    "slug": "demo-slap",
    "name": "Demo-Slap Highlights",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/Damirikys/demo-slap",
    "canonicalUrl": "https://clawhub.ai/Damirikys/demo-slap",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadUrl": "/downloads/demo-slap",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=demo-slap",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "SKILL.md",
      "scripts/demo_slap_analyze.py",
      "scripts/demo_slap_common.py",
      "scripts/demo_slap_match_pick.py",
      "scripts/demo_slap_matches.py",
      "scripts/demo_slap_render.py"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "slug": "demo-slap",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-02T11:03:03.878Z",
      "expiresAt": "2026-05-09T11:03:03.878Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=demo-slap",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=demo-slap",
        "contentDisposition": "attachment; filename=\"demo-slap-0.1.4.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "demo-slap"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/demo-slap"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    }
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/demo-slap",
    "downloadUrl": "https://openagent3.xyz/downloads/demo-slap",
    "agentUrl": "https://openagent3.xyz/skills/demo-slap/agent",
    "manifestUrl": "https://openagent3.xyz/skills/demo-slap/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/demo-slap/agent.md"
  }
}
```
## Documentation

### Demo-Slap Highlight Skill

Generate MP4 highlights and fragmovies from CS2 demos.

This skill is designed for OpenClaw environments where background jobs, local helper scripts, and chat-aware delivery are available. It uses Python 3 scripts and the requests package for HTTP API access.

Expected runtime inputs:

Required: DEMOSLAP_API_KEY
Optional: LEETIFY_API_KEY
Optional deployment helper: DEMO_SLAP_WATCHDOG_JOB_ID

### Scripts

Run bundled scripts relative to the skill root, usually from scripts/.

### Demo-Slap

ScriptPurposedemo_slap_matches.pyList recent matches from Demo-Slap /public-api/matchesdemo_slap_resolve.pyTry to resolve replay/demo URL from Demo-Slap match history by index; fail clearly if the API exposes only jobIddemo_slap_match_pick.pyPick a Demo-Slap match by index and return structured match info including jobIddemo_slap_analyze.pySubmit a demo for analysis, poll until done, output highlights JSONdemo_slap_render.pyRender one or more highlights, poll until done, output clip URLdemo_slap_common.pyShared utilities (config, API calls, state)

### Leetify

ScriptPurposeleetify/leetify_matches.pyList recent matchesleetify/leetify_resolve.pyResolve replay URL by username + match indexleetify/leetify_save_id.pySave username -> Steam64 ID mappingleetify/leetify_common.pyShared Leetify utilities

### Match source selection

Prefer Leetify for recent match discovery when LEETIFY_API_KEY is available.
If LEETIFY_API_KEY is not configured but DEMOSLAP_API_KEY is available, use Demo-Slap match history from /public-api/matches.
Swagger: https://api-doc.demo-slap.net/
Treat Demo-Slap match history as the fallback discovery path for listing matches and selecting an existing analyzed match or replay context before analyze/render.

### Runtime files

Use these files as optional local runtime state during execution:

data/state.json
data/highlights.json
data/history.log
data/steam_ids.json
data/config.json

These files are runtime helpers for local operation and are not required to understand or inspect the skill package itself.

state.json tracks the current operation:

{
  "status": "idle|analyzing|rendering|done|error",
  "job_id": "...",
  "render_job_id": "...",
  "chat_id": "telegram:182314856",
  "clip_urls": {"highlight_id": "https://..."},
  "progress": "polling 3/30",
  "last_completed_op": "analyze|render",
  "notification": {
    "sent": false,
    "sent_at": null,
    "last_attempt_at": null,
    "error": null
  },
  "updated_at": "ISO timestamp"
}

### 1. Find the match

Preferred path when LEETIFY_API_KEY is available:

python3 scripts/leetify/leetify_matches.py <USERNAME> [--limit 10]

Fallback path when LEETIFY_API_KEY is missing but DEMOSLAP_API_KEY is available:

python3 scripts/demo_slap_matches.py [<USERNAME>] [--limit 10]

uses Demo-Slap /public-api/matches
use the Demo-Slap swagger docs at https://api-doc.demo-slap.net/ if schema details are needed
if <USERNAME> is provided and mapped, filter matches to that player's Steam ID when possible
after the user picks a match, run:

python3 scripts/demo_slap_match_pick.py [<USERNAME>] --match-index <N>

treat the returned jobId as the primary handle for downstream Demo-Slap operations

### 2. Resolve replay URL

Preferred path when using Leetify:

python3 scripts/leetify/leetify_resolve.py <USERNAME> --match-index <N>

When using Demo-Slap fallback:

python3 scripts/demo_slap_match_pick.py [<USERNAME>] --match-index <N>

use the returned jobId as the selected match identifier
if demoUrl is present, you may still use analyze-by-URL
if demoUrl is absent, skip URL resolution and continue by API endpoints that accept the existing analyze jobId
use GET /public-api/analyze/{jobId}/status and GET /public-api/analyze/{jobId}/data to inspect existing highlights
if the user wants clips and highlights already exist, render directly from that jobId

### 3. Analyze in background

python3 -u scripts/demo_slap_analyze.py --url '<REPLAY_URL>' --username <USERNAME> --chat-id <CHAT_ID>

Run with exec(background: true) and keep the returned process/session id.

Optional deployment-specific watchdog pattern for OpenClaw environments:

Use a watchdog only when background analyze/render work benefits from periodic delivery checks.
Reuse an existing deployment watchdog when available instead of assuming a new persistent scheduler entry is always needed.
If a deployment chooses to create or enable a watchdog through the built-in cron tool, keep it scoped to the active run and disable it again after terminal delivery.
A 2 minute interval is a reasonable default.
Use scripts/demo_slap_watchdog.sh status|tail|job only as a local helper for inspecting runtime state, logs, or deployment-specific job references.
Treat data/state.json and data/highlights.json as the source of truth during runtime.

Agent workflow:

Choose the match source:

Leetify if LEETIFY_API_KEY exists
Demo-Slap /public-api/matches if LEETIFY_API_KEY is missing and DEMOSLAP_API_KEY exists


If using Leetify, resolve the replay URL and run analyze
If using Demo-Slap fallback, pick a match and inspect the returned jobId
If the selected Demo-Slap match already has analyze data, continue by jobId instead of forcing analyze-by-URL
Use or enable a deployment watchdog only when long-running analyze/render work benefits from it
Launch analyze or render and save the returned process/session id when applicable
Let the watchdog deliver the result when a deployment uses one
Disable the watchdog again after terminal delivery

### 4. Render in background

# Single highlight
python3 -u scripts/demo_slap_render.py <JOB_ID> <HIGHLIGHT_ID> --chat-id <CHAT_ID>

# Fragmovie
python3 -u scripts/demo_slap_render.py <JOB_ID> <ID1> <ID2> ... --fragmovie --chat-id <CHAT_ID>

Run with exec(background: true) and keep the returned process/session id.

Optional deployment-specific watchdog pattern for OpenClaw environments:

Use a watchdog only when background analyze/render work benefits from periodic delivery checks.
Reuse an existing deployment watchdog when available instead of assuming a new persistent scheduler entry is always needed.
If a deployment chooses to create or enable a watchdog through the built-in cron tool, keep it scoped to the active run and disable it again after terminal delivery.
A 2 minute interval is a reasonable default.
Use scripts/demo_slap_watchdog.sh status|tail|job only as a local helper for inspecting runtime state, logs, or deployment-specific job references.
Treat data/state.json and data/highlights.json as the source of truth during runtime.

Agent workflow:

Enable or reuse a deployment watchdog only when needed for the active run
Launch render and save the returned process/session id
Poll process output for the Estimated finish: line and tell the user the ETA if present
Let the watchdog deliver the result when one is in use
Disable the watchdog again after terminal delivery

Critical: set <CHAT_ID> from inbound metadata of the originating request. Treat hardcoded chat identifiers as local examples only, not as a reusable default.

### 5. Check status

Read data/state.json.

### Map username to Steam ID

python3 scripts/leetify/leetify_save_id.py <USERNAME> <STEAM_64_ID>

### Configure API keys

Prefer environment variables:

DEMOSLAP_API_KEY - required
LEETIFY_API_KEY - optional, only for Leetify-backed match discovery
DEMO_SLAP_WATCHDOG_JOB_ID - optional deployment-specific helper for watchdog inspection scripts

Source selection rules:

If LEETIFY_API_KEY exists, use Leetify for match discovery.
If LEETIFY_API_KEY is absent but DEMOSLAP_API_KEY exists, use Demo-Slap /public-api/matches for match discovery.
DEMOSLAP_API_KEY is always required for analyze/render.

Optional local fallback for controlled self-hosted setups: put them in data/config.json.

### Support

For access and support, please join our Discord community: https://discord.gg/8nfh26W9wQ
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: Damirikys
- Version: 0.1.4
## Source health
- Status: healthy
- Item download looks usable.
- Yavira can redirect you to the upstream package for this item.
- Health scope: item
- Reason: direct_download_ok
- Checked at: 2026-05-02T11:03:03.878Z
- Expires at: 2026-05-09T11:03:03.878Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/demo-slap)
- [Send to Agent page](https://openagent3.xyz/skills/demo-slap/agent)
- [JSON manifest](https://openagent3.xyz/skills/demo-slap/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/demo-slap/agent.md)
- [Download page](https://openagent3.xyz/downloads/demo-slap)