Atlas / Skills / hedging8563 / tokenlab-skills

tokenlab-skillsBLOCK

skills/hedging8563/tokenlab-skills

Agent skills for TokenLab API integration, model picking, native endpoints, cost routing, and OpenAI-compatible migration

Verdict
BLOCK
Grade
D
Trust score
69 /100
Version
—
Hosts
2 documented
License
MIT
Stars
1
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://github.com/hedging8563/tokenlab-skills/actions/workflows/validate.yml) [](https://agentskills.io/specification)

Agent Skills for TokenLab. Each skill is a recipe for one outcome: a product photo, an animated still, a voiceover, a 3D asset, a typed decision. The agent loads a skill from its description, follows the workflow, and calls the TokenLab API over HTTP or MCP. It reads the live model catalog at run time, so the skill stays correct when models change.

How the skills fit together

  • Foundation skills do the shared work:
  • tokenlab-run: the execution contract. Read the model contract, estimate the cost, provide inputs, call, wait for the task, and read the result.
  • tokenlab-model-picker: map an outcome to an operation and to live model IDs.
  • tokenlab-prompting: prompt craft per model family.
  • Outcome skills (image, video, audio, 3D, decisions) name default models, a workflow, technique, and a quality bar. They call tokenlab-run for the mechanics.
  • Integration skills put TokenLab into application code: SDK setup, native endpoints, cost routing, and migration from other OpenAI-compatible providers.

Install tokenlab-run together with any outcome skill. The plugin installs all of them.

Catalog

catalog.json owns the skill list, groups, order, operations, and preferred models. skills.sh.json and this section are generated from it with python3 scripts/sync_catalog.py.

Model defaults refresh daily

Skills do not hard-code model IDs in their text. Each skill's ## Models section holds a block that scripts/sync_models.py generates from the live catalog (GET https://api.tokenlab.sh/v1/models, no key needed):

  1. The skill's preferredModels from catalog.json that are live and
Read from source at commit 84a75ca89966OBSERVED · 2026-10-12
02

Install

Commands as the repository documents them. They are shown, not run.

npx skills add https://github.com/hedging8563/tokenlab-skills --skill tokenlab-run -y
npx skills add https://github.com/hedging8563/tokenlab-skills --skill tokenlab-product-photography -y
git clone https://github.com/hedging8563/tokenlab-skills.git
npx skills add https://github.com/hedging8563/tokenlab-skills --skill tokenlab-animate-image -y
npx skills add https://github.com/hedging8563/tokenlab-skills --skill tokenlab-api-integration -y
npx skills add https://github.com/hedging8563/tokenlab-skills --skill tokenlab-character-consistency -y
03

Host compatibility

What the documentation claims. We have not run a compatibility test.

HostStatusNotes
claude-codementioned
codexmentioned
04

What it tells the agent

The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.

---
name: tokenlab-animate-image
description: "Turn one still image into a short video clip with TokenLab image-to-video models. Use when the user says \"animate this photo\", \"make this picture move\", \"bring this image to life\", \"turn this still into a video\", \"add motion to my artwork\", or \"make a living photo / cinemagraph\". The image becomes the first frame; the prompt describes the motion and the camera. For a clip that must end on a second image, use tokenlab-keyframe-transition. For a product ad, use tokenlab-product-ad-video. For a speaking face, use tokenlab-talking-avatar. For a person who copies the moves in another video, use tokenlab-motion-control."
license: MIT
metadata:
  category: video
---

# Animate Image

Turn one still into a short clip. The image is the first frame. The prompt says what moves, how the camera moves, and what you hear.

## Inputs to collect

- **Image:** a public `https` URL or a TokenLab result URL. Crop it to the target aspect ratio first. Many models follow the input image shape and ignore `aspect_ratio` for this operation.
- **Motion:** what moves, and how much ("hair moves in a light wind", "she turns her head and smiles").
- **Camera:** static, or one move (slow push-in, pan left, orbit).
- **Length and size:** seconds and resolution. Start short for a first test.
- **Sound:** with or without audio. Some models always add audio; some can be silent.

## Models

<!-- tokenlab:models:start -->
<!-- Generated from the live catalog by scripts/sync_models.py. Do not edit; change preferredModels in catalog.json. -->

| Operation | Model | Pick | Use |
| --- | --- | --- | --- |
| `image-to-video` | `veo3.1-fast` | default | General image-to-video with sound |
| `image-to-video` | `kling-v3.0` | alternative | Alternative; sound on or off (not live-tested) |
| `image-to-video` | `hailuo-h3` | alternative | Alternative with native audio (not live-tested) |
| `image-to-video` | `seedance-2.0` | alternative | Alternative; long clips and high resolution (not live-tested) |
| `image-to-video` | `pixverse-v6` | alternative | Silent loop or background plate |
| `image-to-video` | `grok-imagine-video` | alternative | Low-cost draft |

This list refreshes daily from the live catalog. Preferred models come first; otherwise models are ranked by their 24-hour success rate. Before a call, confirm the model with `GET /v1/models/{model}` and read its price from `GET /v1/models/{model}/pricing`.
<!-- tokenlab:models:end -->

### How to choose

Exact fields and values come from each model's contract.

- **Veo 3.1 Fast:** the general choice with sound. 4, 6, or 8 s at 720p or 1080p. Audio is always on.
- **Kling 3.0:** an alternative with sound on or off. 3-15 s.
- **Hailuo H3:** an alternative with native audio. 6 or 10 s at 768p. Takes `negative_prompt`.
- **Seedance 2.0:** long clips (4-15 s) and high resolution (up to 4k).
- **PixVerse:** silent loops and background plates. Lists `output_audio`, 1-15 s, 360p-1080p.
- **Grok Imagine video:** a low-cost draft. 1-15 s at 480p or 720p. The output follows the input image shape.

All of these use `POST /v1/videos/generations` with `operation: "image-to-video"`. Most take the image in `image_url`; some (for example Vidu Q3) list `image` and `start_image` instead. Send `output_audio` only when the operation lists it.

## Workflow

Run each call with `tokenlab-run` (contract → estimate → call → poll → result). Commands below use its helper, `../tokenlab-run/scripts/tokenlab_run.py`, a path relative to this skill's folder. If you installed this skill without `tokenlab-run`, send the same requests with `curl`. `--wait` stops after 100 s; a longer task keeps running, so continue with the `resume` command it prints.

1. Read the contract: `python ../tokenlab-run/scripts/tokenlab_run.py contract MODEL --operation image-to-video`. Note `supported_parameters`, `allowed_durations`, `allowed_resolutions`, and `delivery`. Use only listed fields and values.
2. Estimate the cost: `python ../tokenlab-run/scripts/tokenlab_run.py price MODEL`. Most video models price per second, so multiply the per-second price for your resolution (and audio setting, if the price depends on it) by `duration`. Use the Official price as the upper bound. Tell the user the estimate before you start the job.
3. Write the prompt (see Technique) and build the body:

   ```json
   {"model": "MODEL_ID", "operation": "image-to-video", "image_url": "https://...", "prompt": "She smiles, raises her right hand, and waves at the camera twice. Static camera, soft studio light.", "duration": 2, "resolution": "480p"}
   ```

   Take `MODEL_ID` from the Models list above for `image-to-video`. Set `duration` and `resolution` to values its contract lists.

4. Call and wait: `python ../tokenlab-run/scripts/tokenlab_run.py run /v1/videos/generations --json @body.json --wait`. Save the task ID before you poll. The helper polls every 5 s; keep the interval at 5-10 s.
5. If your wait times out, resume with `python ../tokenlab-run/scripts/tokenlab_run.py poll TASK_ID`. Never create a second task for the same request.
6. On `failed`, read `error_details.code` and `param`, fix the body, and ask the user before a paid retry.
7. Return the video URL (`video_url`, `video.url`, or `videos[]`), the model, the task ID, and the estimate.

## Technique

- **Describe the change, not the picture.** The model already sees the image. Spend the prompt on action, camera, and sound. "The waves roll in and foam over the rocks; slow pan right" beats a full description of the beach.
- **Prompt parts:** subject + action, then camera position or move, then composition, lens or focus, and ambiance. These are the parts Google lists for Veo prompts, and they work as a checklist for any model.
- **One main action per clip.** Short clips have room for one gesture or one camera move. Make a second clip for the next beat, or extend the clip with `tokenlab-extend-video`.
- **Keep identity.** Say what must
05

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (2 observation(s))
Network
declared (5 observation(s))
Shell
declared (2 observation(s))
Dependencies
pinned
Secrets in source
found

Findings (10)

HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
skills/tokenlab-api-integration/scripts/hermes_yaml.py:31
document = yaml.load(text, Loader=UniqueLoader)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
skills/tokenlab-api-integration/scripts/hermes_yaml.py:76
loaded = yaml.load(result, Loader=UniqueLoader)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/test_configure_claude_clients.py:216
token = "sk-tokenlab-client-fixture-not-a-real-key"
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
tests/test_integration_contracts.py:220
exec(source, namespace)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_configure_claude_clients.py:370
f"http://127.0.0.1:{server.server_port}", str(launcher),
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_configure_codex_macos.py:134
f"http://127.0.0.1:{server.server_port}/v1".encode())
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_configure_hermes_clients.py:129
origin = f"http://127.0.0.1:{server.server_port}"
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_configure_provider_requests.py:72
f"http://127.0.0.1:{server.server_port}/v1".encode()))
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
skills/tokenlab-run/scripts/tokenlab_run.py:230
path.write_bytes(base64.b64decode(data))
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
README.md:137
- `tokenlab-hosted-model-explorer` connects to the public hosted Model Explorer over Streamable HTTP. It is read-only and holds no API key.
Why it matters. asks the agent to read credentials

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha 84a75ca89966full audit observations/trust-audit/skill/hedging8563__tokenlab-skills.json · Report an issue / request a re-scan
06

Audit history

Every audit this skill has had.

DateSourceVerdictGradeScoreChange
2026-10-1284a75ca89966BLOCKD69first audit
07

Questions

What does the tokenlab-skills skill do?

Agent skills for TokenLab API integration, model picking, native endpoints, cost routing, and OpenAI-compatible migration

Is tokenlab-skills safe to install?

No — not without reading the findings first. The audit graded it D (69/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What can tokenlab-skills access on my machine?

The audit observed that it reaches the network, runs shell commands and reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: found — see the findings.

Which assistants does tokenlab-skills work with?

Its documentation mentions claude-code and codex. That is what the text claims, not a compatibility test we ran.

How current is this page?

The grade is for one exact copy of the source (84a75ca89966), read on 2026-10-12. The repository is watched, and a new audit runs when it changes — this is the first audit.

Advertisement