Side projects I've been working on over the past couple of years in somewhat reverse chronological order.

Asbury Park happy hours 2024/04-present
Static website listing happy hours in Asbury Park, NJ. Used to be jekyll, rewrote in Rust using minininja. The “database” is a RON file.
ntsc 2026/02
frei0r video filter plugin that uses ntsc.rs to emulate analog TV and VHS artifacts.
cyd-video 2026/01-2026/02
Rust no_std video player for the CYD (“Cheap Yellow Display) ESP32-2432S028R microcontroller. It works but the performance is not good enough. It’s based on MJPEG using the tjpgdec-rs decoder (see below) and riffparse (see below).
riffparse 2026/01-2026/02
Rust no_std RIFF/AVI video format demuxer. Extracts audio and video frames from an AVI file.
frei0r-rs2 2025/05-2026/02
Fork of the Rust frei0r-rs framework for building frei0r video plugins in Rust. Made major changes to the API.
tjpgdec-rs 2026/02
Some vibe-coded performance improvements to the tjpgdec-rs JPEG decoder used with cyd-video.
esp32-tv 2026/02
ESP32 video player fork with vibe coded fixes and support for IR receiver.
esp32-202432S028_video_player 2026/01
ESP32 video player fork, ported to platformio.
cyd-bevy-life 2026/01
Conway’s game of life on no_std ESP32 MCU using the Rust Bevy game engine.
webvfx-rs 2025/12
Rust frei0r video plugin using the Blitz web engine. It takes input video frames and injects them into HTML images in a web page, then renders the result as the output.
mediafx-frameserver 2025/04-2025/12
“Out of process” frei0r video plugins. This is a Rust framework with Python and Typescript APIs so that video plugins can be written as standalone Python, Typescript or Rust applications. The plugin communicates with the subprocess via stdio, and sends/receives frames of video via shared memory.
Caption 2025/12
Vibe coded SwiftUI iOS application for live audio transcription using NVIDIA Parakeet via the FluidAudio SDK.
rapidfire 2025/11
Simple Rust Bevy/Avian3d “game” where you walk around a generated cityscape and shoot tons of blocks.
nannou 2025/11
PR to upgrade nannou to Bevy 0.17
bevy_web_video 2025/07-2025/11
Support for streaming video into Rust Bevy textures on the web platform (webgpu/webgl2). See the demo
sbx 2025/10
Unfinished attempt at a sandboxing CLI in Rust using the native macOS sandbox primitives (“seatbelt”) and a local HTTP proxy for network filtering.
tumbler 2025/10
Mobile web based Rust Bevy 3D dice simulation. Runs in the browser and uses the devicemotion accelerometer to manipulate the dice. Demo
blendiff 2025/10
Rust tool to dump binary Blender project files as diffable text.
bevy_av1 2025/08-2025/10
AV1 video decoder for the Bevy game engine. Based on dav1d which are Rust bindings for libdav1d - but plan to switch to rav1d which is a pure Rust port of dav1d.
bevy_p2p 2025/09
Incomplete peer-to-peer Rust experiments in Bevy, using nostr and iroh.
bevy_blitz 2025/07-2025/09
Render web pages to Bevy textures using the Rust Blitz HTML/CSS rendering engine.
bevy_luminance_material 2025/08
Attempt at an effect implemented as a Rust Bevy material that converts a texture into a luminance texture in a prepass, then be used as StandardMaterial::depth_map. The effect is not that good.
bevy_arcball_camera 2025/07-2025/08
Rust Arcball camera controller for Bevy. Supports mouse and touch controls.
l0ttie 2025/06-2025/07
A Rust frei0r video source plugin that renders Lottie animation files.
diff-video-action 2025/06
A GitHub action that compares a set of videos to reference videos, and generates audio/visual diff videos if any fail to compare visually/audibly identical.
renderwindow 2023/10-2026/01
A C++ Qt QML QQuickWindow subclass that supports offscreen rendering of its contents via QQuickRenderControl
llm-tools-mcp 2025/05
MCP tools support for the llm command line tool.
skysearch 2025/04
Typescript tool to subscribe to the BlueSky Jetstream, compute an embedding for every post using MediaPipe Text Embedder, and compare cosine similarity to a query. Display any posts that are semantically similar enough to the query.
breakin 2025/03-2025/04
Classic BreakOut game but in 3D using Rust Bevy game engine - BreakIn to the cube.
toolchat 2025/03-2025/04
Python tool to multimodal chat with LLMs, supports MCP servers.
mediafx-py 2024/08-2025/04
Unfinished Python experiments in audio/video editing with visual effects. Based on pyav and eventually pygfx
langchain-mcp 2024/11-2025/04
MCP tool support for LangChain. Obsoleted by langchain-mcp-adapters.
blender-mcp 2025/03
MCP server that can run Python code in Blender.
pydantic-mcp 2025/03
MCP tool calling support for Pydantic AI. Obsoleted by native MCP support.
skybedding 2025/02-2025/03
Rust realtime BlueSky post jetstream feed, filtered on a query using embeddings similarity via a local LLM.
terp 2025/01-2025/02
Rust Bevy based drawing interpolation animation editor. Inspired by LizardLadder.
clay-rs 2024/12-2025/01
Rust bindings for Clay. Includes a renderer built with macroquad.
skyreaper 2024/12
Simple unfinished Rust Bevy game using avian3d.
flux3d 2024/10
Javascript text to image to 3D model using FLUX.1-schnell, and TRELLIS via Gradio Client API. Demo
skypinner 2024/12
Unfinished Next.JS attempt to implement Pinboard style social bookmarking on top of BlueSky ATProtocol
chainchat 2024/10-2024/12
CLI to chat with LangChain LLM models
mediafx-qt 2023/10-2024/10
Nonlinear video editing framework with support for transitions/effects implemented in Qt QML.
llm-transformers 2024/09-2024/10
llm plugin for Hugging Face Transformers pipeline tasks.
mediafx-web 2024/05-2024/09
Unfinished web components implementing video sequencing with transitions and effects.
kbai 2024/09
Python tool to generate a video with “Ken Burns” style pan & zoom effects, with transitions between each image. Uses Grounding DINO LLM to identify features in the images to guide the pan/zoom effects.
mediafx-blender 2024/07
Unfinished higher level Python wrappers around Blender Video Sequence Editor APIs.