A KiCad board in. A release film out.
silk reel reads a .kicad_pcb and renders a film of that board, built from its real copper, parts and silkscreen.
Try it in your browser with your own board. You do not need to install anything.
Both films above are the Glasgow rev C3 board, rendered with the commands below.
You need Node.js 22 or later, and ffmpeg and ffprobe on your PATH.
git clone https://github.com/hridaya423/silkreel
cd silkreel
npm ci
npm run reel -- fixtures/boards/glasgow.kicad_pcb --style trace --aspect 16:9 -o glasgow.mp4The first render downloads a headless Chrome of about 90 MB. Later renders use the same copy.
Give the CLI the .kicad_pcb file of your board. silk reel reads files from KiCad 4 or later. It does not read Gerber, Eagle or Altium files.
npm run reel -- path/to/your-board.kicad_pcb --aspect 9:16 --title "Your Board" --version v1.0A trace film takes about 30 seconds to render on an Apple M4 Pro, and the file is near 8 MB. The CLI also writes <name>.poster.png, the last frame, for a cover image. A glyph film renders in about ten seconds. --draft renders faster at a lower quality.
If your machine has no GPU, put SILK_REEL_GL=swangle in front of the command. To list every flag, run npm run reel -- --help.
The film is about one part, the hero. silk reel picks the IC with the most pads, then any other part with eight or more pads, then the connector with the most pads. Name a different part with --hero U3.
| flag | values | default |
|---|---|---|
--style |
trace (the lit board) · glyph (parts set as type) |
trace |
--aspect |
4:5 1080×1350 · 1:1 1080×1080 · 9:16 1080×1920 · 16:9 1920×1080 |
4:5 |
--palette |
copper · mono · blueprint · phosphor |
copper (trace), mono (glyph) |
--accent |
#rrggbb for the hero highlight |
the palette's |
--hero |
the reference of the part the film is about, e.g. U3 |
the IC with the most pads |
--mask |
green · black · white · blue · red · yellow · purple (trace) |
the board file's, else green |
--title |
the board's name on a title card; leave it out for no card | none |
--version |
a version under the title; needs --title |
none |
--format |
mp4 · gif (720 px wide at most) · webm-alpha · prores-alpha (4444) |
mp4 |
--seed |
any number; each one gives a different variation | 42 |
--tempo |
the speed of the film, from 0.75 to 1.5 |
1 |
--draft |
fast preview quality | off |
--no-audio |
leave the score out of a trace film | off |
-o |
output path | <board>-<style>-<aspect>.<ext> beside the input |
-h, --help |
list every flag |
The alpha formats have a transparent background, so you can put the film over your own footage. The same board and flags always render the same film.
The browser studio plays a draft of both looks, for the sample boards and for your own board. The tab reads your board file and does not upload it. The studio records WebM, saves stills, and writes the CLI command for everything else. Its source is in packages/site.
Run the full studio on your machine to render every format from a queue:
npm run start --workspace=@silk-reel/render-api # render API on :3102
npm run dev --workspace=@silk-reel/studio # studio on :3101ingestparses the.kicad_pcbinto a board model: outline, copper on every layer, pads, vias, zones, footprints and silkscreen.choreocompiles the board into a timeline. A trace film is four camera shots on a 24-beat grid. It starts as a flat drawing of the copper and turns into the built board. Then it pauses, powers on, and holds on the finished board. A glyph film picks the hero chip and sets the parts as glyphs across four acts.renderdraws each frame. Trace uses WebGL2: a lit plate with component bodies, a perspective camera, depth of field, HDR bloom and motion blur. Glyph draws with Canvas2D.render-apiencodes the frames with Remotion and ffmpeg. For trace films, it adds the sound, mastered to −14 LUFS.
| package | role |
|---|---|
ingest |
.kicad_pcb parser to BoardModel |
choreo |
the style engine: board to Timeline, palettes, aspect layout |
render |
frame drawing, the WebGL2 post pass, the Remotion composition |
render-api |
Fastify API, render queue, renderFilm() for every format |
cli |
npm run reel |
studio |
the local studio (Vite and the Remotion Player) |
site |
the website and its in-browser studio (Astro) |
metrics |
ffmpeg probes and an advisory numeric gate |
npx tsc --noEmit # typecheck
npx vitest run # tests
npx eslint packages # lint
npm run test:production # build the studio and smoke-test itEvery change to how a film looks goes through a full-video review. AGENTS.md has the commands and the rubric.
- Sample boards: iCEBreaker © 2019 1BitSquared, CC BY-SA 4.0. Glasgow rev C3, Glasgow Embedded, 0BSD. StickHub, the ECC83 preamp, the ColdFire dev kit and the video board are KiCad demo projects.
- Sound: CC0 recordings from Freesound, listed in CREDITS.md.
- Type: title cards use JetBrains Mono (SIL Open Font License 1.1,
OFL.txt), bundled so renders match on every machine.
silk reel is licensed under the Apache License 2.0. The sample boards, the sound recordings and the fonts keep their own licenses, listed under Credits.


