Atlas / Skills / tlejay / data-video-kit

data-video-kitBLOCK

skills/tlejay/data-video-kit

Claude Code skills + Python scripts that turn a CSV into a narrated 60-second vertical video: angle, script, ElevenLabs voice, music, captions, HTML motion graphics → MP4.

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

Overview

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

Your data. A 60-second story.

Claude Code skills and small Python scripts that turn a spreadsheet into a narrated vertical video for Reels, TikTok and Shorts. It finds the angle, writes the script, voices it, mixes music and sound effects, and renders motion graphics from HTML, all from code.

What you get · See it · Quick start · Pipeline · Voice guide · ภาษาไทย

✨ What you get

Read from source at commit c4b9aead3dd8OBSERVED · 2026-10-13
02

Install

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

git clone https://github.com/tlejay/data-video-kit.git
03

Host compatibility

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

HostStatusNotes
claude-codementioned
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: data-video
description: Turn raw data (a sheet, CSV, list, stats, survey, sales log) into a short narrated vertical video that tells a story the viewer cares about, not a reading of the table. Finds the angle, writes the script, voices it, mixes music and effects, briefs the visuals, renders through the motion-video skill. Trigger - "make a video from this data", "turn this CSV into a clip", "data video", "ทําวิดีโอจากข้อมูล", "เอาข้อมูลนี้ไปทําคลิป", a brief plus a sheet/CSV, or just a topic ("make a video about rice in Thailand", "อยากทําวิดีโอเรื่อง..."), /data-video.
allowed-tools: Bash Read Write Edit AskUserQuestion Agent
---

# /data-video

**The story layer.** The `motion-video` skill knows how to *produce* a clip (HTML frames,
Playwright, ffmpeg). This skill decides *what the clip should say* when all you were given
is data, and runs the whole job end to end.

Why it exists: the first version of a store-network video described the table ("430 stores,
one district has 165, the rest tie at 17"). The second asked a question the data could
answer: *if a retail chain picks locations with careful research, what does its store map
tell us about where people live and trade?* Same numbers, a reason to keep watching. Raw
data is usually public already; **the value is the interpretation, told from the viewer's
side.**

**Paths.** Everything below is relative to the kit folder: `$DATA_VIDEO_KIT` if set, else the
cloned repo (the folder holding `scripts/mv-render.py`). Run `/kiki-init` once if the kit is
not set up yet.

**Who decides.** "The editor" below is the person you are making the video for. Ask them
with AskUserQuestion (clear options, one batch at a time) rather than open questions.

**How this skill is laid out:** this file is the workflow and the rules that must never be
missed. Each step points to a file in `references/` with the full detail and the lessons
behind it. **Read that file when you reach the step**, not before.

| Step | Read |
|---|---|
| 0 team, models | `references/team-and-models.md` |
| 1-2 data, second dataset | `references/data-and-pairing.md`, `references/data-sources.md` |
| 4 hooks, frame 1, shapes | `references/hooks-and-shapes.md`, `references/storytelling.md`, `references/series-log.md` |
| 5-6 script, audio | `references/script-and-audio.md`, `docs/VOICE.md` |
| 4, 7 template, visuals | `references/visual-templates.md`, `references/visual-craft.md`, `references/review-checklist.md` |
| commands | `docs/PIPELINE.md` |

## 0. Direct, delegate the building, stay available

A video takes about an hour of wall time and the editor keeps sending other work meanwhile.

- **Keep yourself:** the angle, the script, the fact check, voice + mix (short), every review
  of stills, and every message to the editor.
- **Delegate in parallel:** research sections and gap-fill rounds go to parallel subagents,
  one per section. **The visual build (the HTML motion piece) goes to the strongest model
  you have, as a background subagent** with its own folder: HTML motion design is where the
  top model is clearly better. Put every lesson from previous reviews into its prompt. Give
  each a written spec file in the work folder, not a long chat. Keep the same visuals agent
  and send fixes to it.
- **Long commands run in the background** (`mv-render.py`, slow APIs). Never block on a render.
- Review fast and send precise fixes back (numbered, with coordinates or seconds) rather
  than fixing big things yourself; one-line fixes are fine to do directly.
- Tell the editor what each helper is on and a realistic ETA, then go quiet until there is
  something to show.

## 1. Understand the data before having ideas

**Only a topic, no data?** ("ทําวิดีโอเรื่องข้าวในประเทศไทย") Start with research: split the topic
into 3 parallel research briefs (headline numbers / why it is like this / what it means for the
viewer), each must return figures with a source URL, a date and the licence, from official or
primary sources first (`references/data-sources.md`). Put the findings in `research/*.md`, show
the editor the 5 strongest facts with their sources, then continue from here as if the data had
been given. Never put a number on screen that has no source.

Get it into a file, clean it, find its shape. **Every number said on screen is recomputed by
you**, never copied from the brief; when the brief and the data disagree, ask the editor
(with options) before writing. Detail: `references/data-and-pairing.md`.

## 2. Pair it with a second dataset (the default axis)

One dataset says where/how much; a second says why and per what. **Check the second dataset
measures what the sentence claims** (registered population is not where people live, so no
per-head ratios on it). Show the editor the joined findings with their caveat first. Detail
and the pairing table: `references/data-and-pairing.md`.

## 3. Find the angle (this is the skill)

Write 3 candidate angles in one line each, then pick one. Good angles come from asking:

| Lens | Question to ask of the data |
|---|---|
| What it reveals | What does this data quietly tell us about something else? (stores → where people are) |
| Why it is like this | Who decided this, and what were they optimising? Credit them. |
| Viewer's own life | Where am I in this? "แล้วอําเภอของคุณล่ะ" |
| Surprise | What would people guess wrong? Lead with the guess, then the answer. |
| Contrast | Biggest vs smallest, before vs after, here vs there. |
| Pattern | Does it line up with a road, a river, a calendar, a price band? |

Rules for the angle:
- **Respect the subject.** A brand, agency or person in the data is shown as competent.
  Name as text; no logos or brand artwork unless the editor supplies them.
- **Claims stay inside the evidence.** If the story needs data you do not have, hedge
  ("อาจสะท้อน", "may reflect") and offer to fetch the missing data from an official source.
- **Invite the viewer to think** rather than lecture: open on a question, close on
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 & inventoryWARN
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 (3 observation(s))
Network
declared (6 observation(s))
Shell
none-observed
Dependencies
not all pinned
Secrets in source
none-found

Findings (12)

HIGHNetwork egress · net.env_exfil · CWE-200, CWE-319
scripts/tts_ledger.py:45
".env" ... urllib.request
Why it matters. reads secrets in the same file that sends data out
MEDIUMInventory / provenance · inv.symlink · CWE-1104
.claude/skills/data-video
.claude/skills/data-video
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
.claude/skills/kiki-init
.claude/skills/kiki-init
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
.claude/skills/motion-video
.claude/skills/motion-video
Why it matters. link not followed
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
requirements.txt
numpy, playwright
Why it matters. 2 requirement(s) not pinned with ==
Fix. pin exact versions
INFOInventory / provenance · inv.oversize · CWE-1104
docs/media/demo.gif
docs/media/demo.gif
Why it matters. 4368920 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
docs/media/hero.png
docs/media/hero.png
Why it matters. 1591483 bytes not read
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/ELEVENLABS-SETUP.md:112
| `401` ตอนเช็คเครดิต (`tts-quota.py` ขึ้น unusable) | คีย์ไม่ได้เปิดสิทธิ์ **User → Read** | แก้สิทธิ์คีย์ที่หน้า API Keys |
Why it matters. asks the agent to read credentials
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/ELEVENLABS-SETUP.md:143
### 2. Open the API Keys page
Why it matters. asks the agent to read credentials
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/ELEVENLABS-SETUP.md:192
Or open `.env` in an editor and fill `ELEVENLABS_API_KEY=` and `ELEVENLABS_VOICE_ID=`. When
Why it matters. asks the agent to read credentials
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/media/elevenlabs/src/step-2.html:2
<div class="head"><div class="n">2</div><div><h1>เปิดหน้า API Keys แล้วกดสร้างคีย์</h1><p>Open the API Keys page directly, then Create API Key.</p></div></div>
Why it matters. asks the agent to read credentials
INFOPrompt injection · prompt.persistence · CWE-94, CWE-1427
README.md:79
export DATA_VIDEO_KIT="$PWD"                   # add to ~/.zshrc or ~/.bashrc
Why it matters. instructs the agent to persist itself in the user's environment

Gates applied: no_behavioural_pass.

Audited 2026-10-13 · audit v0.4.1 · source sha c4b9aead3dd8full audit observations/trust-audit/skill/tlejay__data-video-kit.json · Report an issue / request a re-scan
06

Audit history

Every audit this skill has had.

DateSourceVerdictGradeScoreChange
2026-10-13c4b9aead3dd8BLOCKD69first audit
07

Questions

What does the data-video-kit skill do?

Claude Code skills + Python scripts that turn a CSV into a narrated 60-second vertical video: angle, script, ElevenLabs voice, music, captions, HTML motion graphics → MP4.

Is data-video-kit safe to install?

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

What can data-video-kit access on my machine?

The audit observed that it reaches the network and reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: none found.

Which assistants does data-video-kit work with?

Its documentation mentions claude-code. 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 (c4b9aead3dd8), read on 2026-10-13. The repository is watched, and a new audit runs when it changes — this is the first audit.

Advertisement