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