I have been working in a glsl cavity shader for the engine in love2d to showcase better this lowpoly model.
I build things you can open up and look inside.
Small things I made for fun. A pixel art editor for the terminal, a 3D engine on top of LÖVE2D, a pathfinding library in Lua and this site. Nothing fancy, but you can open almost any of it and see how it works.
[1] The branch is a Lindenmayer system. It is generated once and stops.
axiom X X -> F+[[X]-X]-F[-FX]+X F -> FF angle 22.5° depth 4
axiom X X -> F+[[X]-X]-F[-FX]+X F -> FF angle 22.5° depth 4
Amberglyf running in a terminal. Thirty seconds, no audio.
Amberglyf is a pixel art editor that lives inside the terminal. I made it for myself: drawing sprites without leaving where I already am, with the keys where I already have them. It is dogfooding and bragging rights, both.
I have not published it yet; it still feels green. But it works and I use it, and the colour picker it ships with came out of needing one here.2
The table overflows to the right on narrow screens — drag it.
| language | Python 3.12 | Textual for the interface, Pillow for the images |
|---|---|---|
| controls | vim-style | right hand: r t y u i o p on top, f g h j k l in the middle |
| animation | frames with their own hold time | onion skin, playback in place |
| exports | PNG · its own format | the spritesheet is a PNG too; imports PNG and GIF |
| status | 0.1.0 · private | not published yet; in daily use |
[2] I needed to pick colours without leaving the terminal and ended up drawing the OKLCH gamut with braille dots. ↩

Inspired by old school Fire Emblem: a pathfinder friendly to that kind of game, where swamp and road do not cost the same. The game never came out; the library did, and there it stays for whoever wants it.3

A personal 3D engine on top of LÖVE2D, built from what other game jams taught me: skeletons, gltf and glb, cameras. It is an experiment and dogfooding at once. It still needs assets for the game that shows it off.4

A solo entry to a game jam at the Centro de Cultura Digital.5 Design, code and assets, inside the time there was.
Functional composition to assemble nested pages, conditional responses depending on who is asking, and tree-based routing. It navigates like an SPA and weighs 14kb instead of 200. Inspect the source if you don't believe me: that is the whole argument.6
[3] The examples live in their own repo, so the library stays clean. ↩
[4] The last thing I added was a GLSL cavity shader, so the low poly reads better. ↩
[5] I had a lot of fun showing it, defects and all. ↩
[6] In 2024 it moved from GitHub Pages to a VPS of my own. Since then it is a server too. ↩
I have been working in a glsl cavity shader for the engine in love2d to showcase better this lowpoly model.
I saw something the other day about using a texture with transparency for the eyes on low poly models and had to do a small test. 🙂
A new year starts and there is so much work ahead 🫡
A top-down sprite maker for in-house use: it composes the four facings from parts and reloads itself every time I save in GIMP. A rough draft, no name yet.
[7] Most of this I make because I want to have it made, even if the world does not need another one of these. I do.
[8] By topic, not by date. A note from 2020 and one from this year sit together if they are about the same thing.