Projects

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

2024/04-present Asbury Park happy hours
Static website listing happy hours in Asbury Park, NJ. Used to be jekyll, rewrote in Rust using minininja. The “database” is a RON file.
2026/02 ntsc
frei0r video filter plugin that uses ntsc.rs to emulate analog TV and VHS artifacts.
2026/01-2026/02 cyd-video
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).
2026/01-2026/02 riffparse
Rust no_std RIFF/AVI video format demuxer. Extracts audio amd video frames from an AVI file.
2025/05-2026/02 frei0r-rs2
Fork of the Rust frei0r-rs framework for building frei0r video plugins in Rust. Made major changes to the API.
2026/02 tjpgdec-rs
Some vibe-coded performance improvements to the tjpgdec-rs JPEG decoder used with cyd-video.
2026/02 esp32-tv
ESP32 video player fork with vibe coded fixes and support for IR receiver.
2026/01 esp32-202432S028_video_player
ESP32 video player fork, ported to platformio.
2026/01 cyd-bevy-life
Conway’s game of life on no_std ESP32 MCU using the Rust Bevy game engine.
2025/12 webvfx-rs
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.
2025/04-2025/12 mediafx-frameserver
“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.
2025/12 Caption
Vibe coded SwiftUI iOS application for live audio transcription using NVIDIA Parakeet via the FluidAudio SDK.
2025/11 rapidfire
Simple Rust Bevy/Avian3d “game” where you walk around a generated cityscape and shoot tons of blocks.
2025/11 nannou
PR to upgrade nannou to Bevy 0.17
2025/07-2025/11 bevy_web_video
Support for streaming video into Rust Bevy textures on the web platform (webgpu/webgl2). See the demo
2025/10 sbx
Unfinished attempt at a sandboxing CLI in Rust using the native macOS sandbox primitives (“seatbelt”) and a local HTTP proxy for network filtering.
2025/10 tumbler
Mobile web based Rust Bevy 3D dice simulation. Runs in the browser and uses the devicemotion accelerometer to manipulate the dice. Demo
2025/10 blendiff
Rust tool to dump binary Blender project files as diffable text.
2025/08-2025/10 bevy_av1
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.
2025/09 bevy_p2p
Incomplete peer-to-peer Rust experiments in Bevy, using nostr and iroh.
2025/07-2025/09 bevy_blitz
Render web pages to Bevy textures using the Rust Blitz HTML/CSS rendering engine.
2025/08 bevy_luminance_material
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.
2025/07-2025/08 bevy_arcball_camera
Rust Arcball camera controller for Bevy. Supports mouse and touch controls.
2025/06-2025/07 l0ttie
A Rust frei0r video source plugin that renders Lottie animation files.
2025/06 diff-video-action
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.
2023/10-2026/01 renderwindow
A C++ Qt QML QQuickWindow subclass that supports offscreen rendering of its contents via QQuickRenderControl
2025/05 llm-tools-mcp
MCP tools support for the llm command line tool.
2025/04 skysearch
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.
2025/03-2025/04 breakin
Classic BreakOut game but in 3D using Rust Bevy game engine - BreakIn to the cube.
2025/03-2025/04 toolchat
Python tool to multimodal chat with LLMs, supports MCP servers.
2024/08-2025/04 mediafx-py
Unfinished Python experiments in audio/video editing with visual effects. Based on pyav and eventually pygfx
2024/11-2025/04 langchain-mcp
MCP tool support for LangChain. Obsoleted by langchain-mcp-adapters.
2025/03 blender-mcp
MCP server that can run Python code in Blender.
2025/03 pydantic-mcp
MCP tool calling support for Pydantic AI. Obsoleted by native MCP support.
2025/02-2025/03 skybedding
Rust realtime BlueSky post jetstream feed, filtered on a query using embeddings similarity via a local LLM.
2025/01-2025/02 terp
Rust Bevy based drawing interpolation animation editor. Inspired by LizardLadder.
2024/12-2025/01 clay-rs
Rust bindings for Clay. Includes a renderer built with macroquad.
2024/12 skyreaper
Simple unfinished Rust Bevy game using avian3d.
2024/10 flux3d
Javascript text to image to 3D model using FLUX.1-schnell, and TRELLIS via Gradio Client API. Demo
2024/12 skypinner
Unfinished Next.JS attempt to implement Pinboard style social bookmarking on top of BlueSky ATProtocol
2024/10-2024/12 chainchat
CLI to chat with LangChain LLM models
2023/10-2024/10 mediafx-qt
Nonlinear video editing framework with support for transitions/effects implemented in Qt QML.
2024/09-2024/10 llm-transformers
llm plugin for Hugging Face Transformers pipeline tasks.
2024/05-2024/09 mediafx-web
Unfinished web components implementing video sequencing with transitions and effects.
2024/09 kbai
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.
2024/07 mediafx-blender
Unfinished higher level Python wrappers around Blender Video Sequence Editor APIs.
Written on February 21, 2026