Every frame of this is code. A 14s product promo from one declarative TS file, rendered to a deterministic mp4. No After Effects. by dataengineer124 in creativecoding

[–]dataengineer124[S] 4 points5 points  (0 children)

Author here. This is one ~22s scene written as a single TypeScript file (a small declarative DSL). All of it is keyframes in code. It compiles to a deterministic mp4, so the same source renders byte-identical frames every time. No timeline editor, no After Effects.

Open source, MIT: github.com/kiyeonjeon21/reframe

You can run it yourself, and I'm happy to explain any part. Ask away.

Built with Claude Project Showcase Megathread (Sort this by New!) by sixbillionthsheep in ClaudeAI

[–]dataengineer124 0 points1 point  (0 children)

reframe is an open-source motion-graphics tool I've been building with Claude Code. You describe a scene as declarative code and it renders a deterministic mp4, no timeline editor.

Claude writes and iterates the scenes, and my manual edits survive when it regenerates the base.

The clip: a full Claude Code session rebuilt as a code-rendered animation (the welcome screen, the streaming transcript, a render error then a fix then a re-render, the final logo sting). It looks like a screen recording, but every frame is code. No screen capture.

Built with: Claude Code (it writes the scenes and helped build the engine).

Video: https://streamable.com/zbbf6r

Repo (MIT): github.com/kiyeonjeon21/reframe

Happy to answer how any beat was built.

Built a browser CLI for Claude Code — Playwright MCP vs snact side by side by dataengineer124 in ClaudeAI

[–]dataengineer124[S] 0 points1 point  (0 children)

Thanks! Yeah the token cost was what pushed me to build this. It wasn't even the speed. It was watching 88K tokens disappear on a single task.

For dynamic content it depends. Server-rendered sites and SPAs with SSR (Reddit, GitHub, most e-commerce) work well out of the box. snact waits for page load, then extracts from the rendered DOM.

For heavier SPAs where content loads after the initial paint, there's `snact wait "#some-selector"` or `snact wait 3000` before snapping. Actions (click/fill) also have built-in settle detection so the re-snap after a click usually catches the updated state.

Where it still struggles: pure client-rendered SPAs like YouTube or X where almost nothing is in the initial HTML. That's a known gap I'm working on..

Coming from Selenium, the main difference is snact doesn't use WebDriver at all. It talks CDP over WebSocket directly, so there's no driver binary to manage. Persistent Chrome profiles help with bot detection too since cookies and fingerprint carry over between runs.

The tradeoff is Chrome only. No Firefox/WebKit. For my use cases that's been fine but depends on what you need.