opencanviz-skills-repoSAFE
Agent skill and Claude Code plugin that writes openCanviz explainer video projects as JSON
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
[](https://opencanviz.com/blog/opencanviz-agent-skill-for-claude-code)
Agent skills for openCanviz, which turns an outline into a narrated, animated explainer video.
The opencanviz-json skill teaches an AI agent to write openCanviz project JSON that you can paste into Import on opencanviz.com/create. The agent plans scenes and steps, writes the JSON, checks it against the schema, and hands you a file that imports and plays.
openCanviz is our product. The skill is free and MIT licensed.
What is in this repository
.claude-plugin/marketplace.json Claude Code marketplace listing docs/demo.gif the demo above (not part of the plugin) plugins/opencanviz/ .claude-plugin/plugin.json plugin manifest README.md plugin README skills/opencanviz-json/ SKILL.md the skill: workflow, rules, checklist schema.json JSON Schema, same as https://opencanviz.com/schema/v1.json scripts/opencanviz.py Python builder and validator (stdlib only, Python 3.9+) scripts/tex2svg.js LaTeX to SVG for math scenes (needs node and mathjax-full) examples/*.json 22 complete projects that import and play examples/*.py the Python script that writes each example tests/test_examples.py runs the examples and checks the validator refuses bad files
Agents that can run Python build the project with scripts/opencanviz.py, which lays out the nodes, fits the text, keeps captions and arrows readable, and refuses to save a file that breaks a rule. Agents that cannot run code write the JSON by hand from the rul
1f55e0b70ee8OBSERVED · 2026-10-11Install
Commands as the repository documents them. They are shown, not run.
claude plugin install opencanviz@opencanviz-skills
npx skills add opencanviz/opencanviz-skills-repo
Host compatibility
What the documentation claims. We have not run a compatibility test.
| Host | Status | Notes |
|---|---|---|
| claude-code | mentioned | |
| codex | mentioned | |
| cursor | mentioned |
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: opencanviz-json description: Write valid openCanviz video/diagram JSON that imports cleanly through Create > Import > Paste JSON or Mermaid on opencanviz.com, then plays and exports correctly. Use when asked to create or edit an openCanviz project as JSON, to turn a script or outline into an openCanviz video file, or to fix an openCanviz JSON file that imports but plays wrongly. --- # openCanviz JSON openCanviz turns a JSON file into an animated, narrated video. The user pastes your JSON into **Import** on https://opencanviz.com/create and clicks **Import project**. Import does not validate fields, so a file that parses can still play wrongly. Follow the rules below and validate before you answer. **If you can run Python, use `scripts/opencanviz.py` (see `examples/*.py`); otherwise write JSON by hand following the rules below.** The helper applies every rule on this page for you and refuses to save a file that breaks one. ## Pick the visual that fits the topic Boxes and arrows are for flows, systems and processes only. Everything else has a better shape; each row names the helper call and the example that shows it. | The topic is | Show it as | Helper (scene / step) | Example | | --- | --- | --- | --- | | A flow, a system, a pipeline, a cycle | Boxes and labeled arrows | `box`, `arrow` / `reveal`, `draw` | `flow`, `two_scenes`, `portrait_stack` | | Amounts compared across categories | Bar chart, values count up | `bar_chart` / `grow` | `bar_chart` | | A trend over time | Line chart that draws itself | `line_chart` / `extend` | `line_chart` | | Two measures per item, clusters | Scatter chart, dots move | `scatter` / `scatter_to` | `scatter_grid` | | Parts of a whole | Pie or donut | `pie` / `sweep` | `pie` | | Sorting, searching, two pointers | Array with pointers | `array`, `pointer` / `swap`, `color`, `point`, `bracket` | `bubble_sort` | | A tree, a linked list, a graph | The structure itself | `tree`, `linked_list`, `graph` / `color`, `point`, `append` | `data_structures` | | A table, a matrix, dynamic programming | Grid | `grid` / `set_cell`, `color` | `scatter_grid` | | Code, line by line | Code panel plus variables | `code`, `variable` / `highlight`, `assign` | `code_walkthrough` | | Who calls whom, in order | Sequence diagram | `sequence`, `message` / `draw`, `activate` | `sequence` | | History, dates, milestones | Timeline | `timeline` / `event` | `timeline` | | Before and after, A versus B | Two panels | `panels` | `before_after` | | Tips, rules, steps of advice | Bullets with check marks | `bullets` / `reveal` | `bullets` | | One big number, a percentage done | Counter, progress bar | `counter`, `progress` / `set` | `counter_progress` | | Something travelling a route | A node on a path, a packet on an arrow | `path` / `follow`, `packet` | `path_follow` | | A title, a claim, a list of words | Kinetic type: written on, typed, popped, staggered | `text`, `lines` / `reveal(style=...)`, `reveal_lines` | `kinetic_text` | | One big word as the opening beat | Letters that pop in and blow apart | `letters` / `pop`, `hide(style="scatter")` | `motion_presets` | | Hashing, a token ring, a round-robin, a clock | A ring with dots and owned arcs; keys walk to their owner | `ring`, `ring.dot`, `ring.arc` / `walk`, `reveal(arc, "draw")` | `motion_presets` | | Rows of facts, a lookup, before and after values | A table revealed column by column, changed cells tinted | `table` / `stagger(tbl.column(c))`, `tint` | `motion_presets` | | Two or three headline numbers compared | Bars that wipe in with big numbers | `compare_bars` / `stagger(bars, "wipe")`, `pop(numbers)` | `motion_presets` | | Traffic on a link, requests flowing | Dots streaming down an arrow | `arrow` / `draw`, `stream` | `motion_presets` | | An equation, a proof, a derivation | LaTeX lines one per step; the changed term flashes | `math`, `math_row`, `derivation` / `stagger`, `emphasize(t, "flash")` | `math_plot` | | A function, a rate of change, an area | A plot: curve draws on, area, a point and tangent that ride it | `plot`, `plot.curve/area/point/tangent/legend` / `reveal(curve, "draw")`, `ride` | `math_plot` | | Triangles, angles, sets, matrices, numbers on a line | Geometry, Venn, matrix, number line | `poly`, `angle_mark`, `side_label`, `venn`, `matrix`, `number_line` | `math_plot` | Do not fade everything in. A video where every node uses the same fade looks like a slide deck. Write titles on (`style="write"`), type subtitles and terminal text (`"type"`), pop a number or a key word (`"pop"`), stagger a list (`reveal_lines`), and join scenes with a transition that says what changed (see Scene transitions and Motion presets). ## Files in this skill - `schema.json`: the JSON Schema (draft 2020-12), the same as https://opencanviz.com/schema/v1.json. Validate every file against it. - `scripts/opencanviz.py`: a Python 3.9+ builder and validator (standard library only; also checks `schema.json` when `jsonschema` is installed). - `scripts/tex2svg.js`: LaTeX to SVG for `scene.math()`, `math_row()` and `derivation()`. Needs `node` and `mathjax-full` (`npm i mathjax-full`, or set `MATHJAX_PATH` to a `node_modules` folder that has it). Only the math calls need it; they raise with the install line when it is missing. - `examples/minimal.json`: two boxes, one arrow, two steps. The smallest correct project. - `examples/flow.json`: a four-step 16:9 flow diagram with a title, captions and narration. - `examples/two_scenes.json`: two scenes, a crossfade, a typewriter title, a skip arrow on its own lane, a removed edge and a camera zoom. - `examples/short.json`: a 9:16 Short in the flat single-scene form, with stacked cards and a progress bar. - `examples/science_explainer.json`: three narrated scenes with labeled arrows and a two-row comparison. - `examples/portrait_stack.json`: a 9:16 Short with a vertical chain of cards and labeled arrows. - `examples/kinetic_text.json`: text entrances (write-on, type, staggered lines, pop)
Trust audit
SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | PASS |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- none-observed
- Network
- declared (4 observation(s))
- Shell
- declared (1 observation(s))
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (1)
{"$schema":"https://opencanviz.com/schema/v1.json","title":"Math and graphs","artboard":{"x":-960,"y":-540,"width":1920,"height":1080,"background":"#0f172a"},"sceneNames":["Derivation","Plot","Shapes"Gates applied: no_behavioural_pass.
1f55e0b70ee8full audit observations/trust-audit/skill/opencanviz__opencanviz-skills-repo.json · Report an issue / request a re-scanAudit history
Every audit this skill has had.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | 1f55e0b70ee8 | SAFE | B | 89 | first audit |
Questions
What does the opencanviz-skills-repo skill do?
Agent skill and Claude Code plugin that writes openCanviz explainer video projects as JSON
Is opencanviz-skills-repo safe to install?
The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean skill reads B.
What can opencanviz-skills-repo access on my machine?
The audit observed that it reaches the network and runs shell commands. Each of those is consistent with what it says it does. Secrets in the source: none found.
Which assistants does opencanviz-skills-repo work with?
Its documentation mentions claude-code, codex and cursor. 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 (1f55e0b70ee8), read on 2026-10-11. The repository is watched, and a new audit runs when it changes — this is the first audit.