genart-skill README

The project's README from github.com/camilleroux/genart-skill. As one markdown file: README.md.

genart — a generative art skill for Claude Code

Plugin version CI License: MIT

Create long-form generative art with AI assistance — deterministic, hash-seeded, ready for onchain platforms like Art Blocks, 256ART, Verse, Highlight, Plottables and bootloader.art — or for screens, via Artpoint.

This Claude Code plugin teaches Claude the working knowledge of the field: seeding a PRNG from a token hash, rendering the same composition at any resolution, designing traits and rarity tables, signalling preview capture, exporting for print and pen plotters, and where the ethical lines of generative art are. It covers creative coding with Canvas 2D, p5.js, three.js/WebGL and SVG — and ships runnable tools to verify that a sketch really is deterministic before you mint it.

Made by a generative artist, for generative artists using AI as a studio assistant — not as the artist.

Contact sheet of six seeds from Impossible Machine, each labelled with its token hash

Six seeds of Impossible Machine (Camille Roux) — hand-drawn technical blueprints, one hash each. The edition-level view the scripts are there to give you: same code, same rules, one sheet per seed.

Install

/plugin marketplace add camilleroux/genart-skill
/plugin install genart@camilleroux-genart

Then just talk about your sketch — the skill loads on its own. Or invoke it with /genart.

What's in it

One skill, genart, with reference sheets loaded on demand:

Runnable scripts

Two scripts ship with the plugin and run in place — Claude (or you) never copies them into a project, so updating the plugin updates them everywhere:

node "$CLAUDE_PLUGIN_ROOT/scripts/check.mjs"  myproject          # determinism checks
node "$CLAUDE_PLUGIN_ROOT/scripts/render.mjs" myproject --hash 0x…      # one PNG
node "$CLAUDE_PLUGIN_ROOT/scripts/render.mjs" myproject --grid 50       # contact sheet
node "$CLAUDE_PLUGIN_ROOT/scripts/render.mjs" myproject --census 5000   # rarity, measured
node "$CLAUDE_PLUGIN_ROOT/scripts/render.mjs" myproject --batch 50      # individual PNGs

render.mjs --hash is what lets Claude close the visual loop on its own: edit the sketch, render a seed, look at the PNG, adjust. The grid and the census are the edition-level views — what the rarity table actually produces.

What check.mjs prints on a sketch that holds:

myproject  (size 600, 3 runs)

repeatability
  ok   0xa3f1a3f1a3… → 06669011
  ok   0x77c277c277… → 7e5f6b7f

distinctness
  ok   two different hashes produce two different renders

global state (A, B, A in one page)
  ok   A=06669011 B=7e5f6b7f A'=06669011

features
  ok   stable across 3 runs: {"Palette":"Ash","Density":"Sparse"}

all checks passed

And on the same sketch with one Math.random() left in — the broken variant CI derives from the fixture on every push, and requires to fail:

repeatability
 FAIL  0xa3f1a3f1a3… → e8dec1f3 / b40e8a1f / dc9b8f1f
 FAIL  0x77c277c277… → 32fa5f55 / e04d40ad / a55fea14

global state (A, B, A in one page)
 FAIL  A=e127ff40 B=55a66c50 A'=05545a48

features
 FAIL  changed between runs: {"Palette":"Ash",…} vs {"Palette":"Ember",…} vs {"Palette":"Verdant",…}

4 failure(s)

distinctness still passes there: Math.random() does produce two different images. Each check covers what it covers, and no more.

They need Playwright in your project (npm i -D playwright && npx playwright install chromium — they print this if it is missing). The plugin itself stays dependency-free: no package.json, nothing embedded.

The contract a sketch must follow (three lines of shim for any platform) and what the checks can and cannot prove are in references/verification.md.

How the platform sheets work

They contain no version numbers, no figures and no field names — only the stable mental model of each platform, the canonical doc URLs, and the questions to ask those docs. Claude fetches the real documentation before writing platform code.

That is deliberate. A copied value goes stale in months and is then worse than nothing, because you believe it. A link stays right.

On determinism claims

Nothing here can prove cross-machine determinism, and this plugin does not claim to. In WebGL, shader compilers, float precision, rasterisers and MSAA differ between GPUs; in JS, transcendental functions differ between engines. What is actually checkable is same-machine reproducibility, perceptual stability across sizes, and feature stability. references/verification.md is explicit about where the line falls.

Maintenance

CI runs the scripts against a known-good fixture on every push (and against a broken variant derived from it, which must fail), and checks monthly that the URLs in the sheets still resolve — confirmed 404/DNS only, bot walls don't count — opening an issue when one dies. The sheets contain no volatile facts, so dead links are the only thing that rots.

Show what you make

If you mint something with it, I would genuinely like to see it — open a Discussion with a render and the platform you released on, or post it and tag @camillerouxart. Pieces made with the skill get shared onward.

Reference sheets are the easiest thing to contribute: a platform that is missing, a doc URL that moved, a mental model that is wrong. Issues and PRs welcome — the editorial rules are short.

If it saved you an afternoon, a ⭐ is how the next artist finds it.

Author

Built and maintained by Camille Roux — generative/algorithmic artist. Maintainer of awesome-generative-art, the curated list of generative art platforms, libraries and resources.

Follow the art: art.camilleroux.com · X · Instagram · Farcaster · Bluesky · Mastodon · TikTok

License

MIT.

genart-skill (camilleroux/genart-skill)

Searching Database…

这是什么?genart 是一个 Claude Code 插件,向 Claude 讲授生成式艺术的技术与伦理基础——用代币哈希播种 PRNG、确定性渲染、特性和稀有度设计——并附带脚本,在你把作品铸造上链之前验证它确实具有确定性。
这是独立应用,还是 Claude Code 插件?它是一个 Claude Code 插件(即一项技能),不是独立应用。当你在 Claude Code 里谈论自己的作品草图时,它会自动加载,也可以用 /genart 直接调用。
怎么开始使用?在 Claude Code 中安装插件,然后直接聊你的作品草图——技能会自行加载,也可以用 /genart 显式调用。
运行验证脚本除了 Claude Code 还需要什么吗?需要——check.mjs 和 render.mjs 要求你自己的项目中安装了 Playwright(npm i -D playwright && npx playwright install chromium);插件本身不带 package.json,也没有内嵌依赖。
它能保证我的作品在别人电脑上看起来一模一样吗?不能——跨机器的确定性无法证明。WebGL 着色器编译器、浮点精度和光栅化器因 GPU 而异,超越函数在不同 JS 引擎中结果也不同,因此真正可检验的只有同机可复现性以及特征/感知稳定性。
它涵盖哪些创意编程工具?Canvas 2D、p5.js、three.js/WebGL 和 SVG——作品草图可以用其中任何一种构建,只要遵循 verification.md 中描述的三行确定性垫片(shim)。
它了解哪些上链平台?Art Blocks、256ART、Verse、Highlight、Plottables、bootloader.art、自托管方案,以及面向屏幕展示(非铸造)作品的 Artpoint。
那两个可运行的脚本具体做什么?render.mjs --hash 把给定的种子渲染成 PNG,让 Claude 能查看结果并迭代;check.mjs 则运行可复现性和特征稳定性检查,遇到诸如误留一个 Math.random() 调用之类的问题会直接失败。
为什么平台参考表里没有具体规格?它们刻意不包含版本号或字段名,只有稳定的心智模型和官方文档 URL,这样 Claude 会去获取真实、最新的文档,而不是依赖那些会过时并产生误导的数值。
Size
0.7 MB
Stars
154
Age
1mo
Commits · 90 Days