The blog is back
This blog was gone for a while.
It lived on a DigitalOcean server. That server was lost for non-payment, and the posts went with it.
The posts I could find came back from two places: the Wayback Machine's archive of this site's RSS feed, and my own LinkedIn posts.
The blog now runs on Oracle Cloud.
Same name. New look. The rest of this post is about where that look comes from.
What ink-film is
ink-film is a Claude Code skill I built for making short films.
You give it a poem, a script or a brand story. It gives back a film where every frame is drawn in JavaScript on a canvas.
The ink re-draws itself twelve times a second.
At the end you get a web page, an MP4, a silent MP4, a WAV soundtrack and SRT captions.
The idea came from Kevin Ngo's life of a fruit fly, an animation with every frame drawn in JavaScript.
The engine is dependency-free JavaScript on Canvas 2D. It has four looks: engraved cosmos, blueprint, risograph, and a brand-mapped one that uses a company's own colours and fonts. Each works square, vertical and wide.
The drawing is only half of it. The other half is the process.
The skill runs in seven stages: brief, reading and storyboard, style frame, build, verify, deliver, log.
The first three are gates. Nothing moves until you approve the brief, then the storyboard, then the look.

The order matters. Changing the look at the style frame costs minutes. After the build, it costs hours.
The build runs in parallel. Agents draw the plates, and each one renders and checks its own frames.
Verify renders every quarter-second of the film and checks it for errors.
The last stage writes down what was learned, so the next film starts smarter.
How a frame is drawn
Every frame is a pure function of time.
Give the engine a timestamp and it draws the same picture, every time. That is what lets you scrub a film and export it frame-exact.
There is no Math.random in the drawing. Randomness is seeded.
Each drawn element has its own number. The engine mixes that number with the current boil frame, and the boil frame ticks twelve times a second.
Within one tick, a line comes out the same on every redraw. On the next tick, it comes out a little different.
That is the boil. The lines shimmer like hand-drawn animation instead of flickering. Twelve a second is animating on twos.
Not everything boils. Marks next to text, and anything that would shimmer distractingly, use a seed that never changes. Boil everything and nothing reads.
The wobble is smooth. A stroke drifts off its true course along its whole length, instead of jittering point by point. Noise per point looks like a bad scanner.
A pen wanders. A vector doesn't.

Shading is hatching, the way an engraver does it.
Each hatch line gets its own threshold against the tone underneath. So a line runs unbroken through a dark passage and stops where the tone lifts. That reads as engraving, not noise.

Lettering writes itself on, about 0.06 seconds a letter. Each letter gets a tiny jitter and a slight rotation, plus a faint second impression 0.7 units off, like ink spreading into paper. The jitter follows the boil, so even the words shimmer.
The paper is built once and drawn under every frame: 90 soft blotches, 1,500 short fibres, 2,600 specks, darker edges and a little pixel noise. A grain tile sits over everything and shifts every boil frame.
The cosmos is near-black with a blue bias and faint clouds of navy and plum.
The first film
The first film made this way is To My Mind That Forbids, a poem of mine, told from the cosmos.
Ninety seconds. Nine plates. Square. It loops, and the last frame is the first.

The reading came before any drawing. The skill wrote back what it thought the poem meant and asked two or three questions. The storyboard went through in one pass.
The poem is a letter to two halves of the self.
The Mind is a cold planet caged in armillary rings. The Soul is a warm star. The film opens and closes on the two of them in orbit.
The Soul is the anchor. It returns as an amber star, a flame, a point of light at the chest, joined by a thread.
The plates are orrery, eye, memory, lost, ritual, bargain, rumble, thunder and return.
In the thunder plate, a bolt comes down from the Soul's star. At the end, the orrery comes back cracked.
The cage cracks. Nothing is freed. The poem loops, so the film loops. That was my call.
So was the imagery. It stays universal, not tied to one faith. And there are no labels in the art. Only the poem and my name.
No labels turned out to mean no words at all. Where a dimension line would carry a number, it carries a small ring.
Seven plates were drawn by parallel agents in about twenty-five minutes. The seams had written contracts, down to where a circle sits in the last second of one plate. The joins landed first time.
Every line the agents wrote, about 3,600 of them, was read before the film was published. You don't ship what you haven't read.
The film is about 5,300 lines of JavaScript. It holds 30 frames a second at 1840 pixels on every plate, with zero errors across 360 quarter-second frames.
Its sound is synthesised in the browser and stays off until you turn it on. The full source is in the repo.
Every picture here is drawn the same way
Which brings me back to this blog.
The new look is a theme called the Almanac. Aged paper in the light theme. A night sky in the dark one. An engraving on every page.
Those engravings are drawn live in your browser, with the same drawing kit as ink-film. The kit and its presets were copied across from it.
So the lines here boil too, twelve times a second.
If you have turned motion off on your device, you get still frames instead.
Every post gets its own engraving. That includes the cover of this one.
The footer holds two small games you can play: Keep Prod Up and Bug Hunt.
Same ink. A film on one side. A blog on the other.

Try it
ink-film is on GitHub. The code is MIT. The poem is not. Its words stay mine.
Install it as a Claude Code skill:
git clone https://github.com/sahaib/ink-film ~/.claude/skills/ink-filmYou also need Google Chrome, Node.js 20 or later, and ffmpeg for the video export.
Then open Claude Code and type /ink-film. Or ask in plain words: "make an ink film of this poem."
A better brief gets you a better first storyboard. The template is brief.md, if you want to fill it in first.
The repo is github.com/sahaib/ink-film.
Your words go in as written. The rest is ink.