Demo coming soon…

Custom Plugins

I build plugins that extend the tools I work in - Premiere Pro, Figma, Photoshop, and After Effects, to cut repetitive steps out of real production workflows. Written in JavaScript against each host's native extension API, several of them wiring AI inference directly into the edit.

Ruff Cut for Premiere Pro - automates the most tedious part of cutting a multicam interview or podcast: finding the moments worth keeping. Drop a multicam clip on the timeline, write a short brief describing the story the edit should tell, set a target duration. The plugin transcribes with Whisper, sends the transcript and brief to an LLM of your choice (Claude, GPT, or Gemini), and the model selects the segments that serve the narrative, dropping filler, tangents, and dead air. Those segments are assembled into a brand-new sequence; the original footage and timeline are never touched. It runs as an Adobe CEP panel with a Node.js scripting layer that handles AI transcription and LLM routing, and an ExtendScript layer that reads the timeline and builds the sequence. Two design decisions define it: transcription is cached per source, so changing the brief or duration regenerates an edit in under a minute instead of re-running the slow step, and camera switching is deliberately left to the editor — Ruff Cut delivers the cuts, Premiere's native multicam tools pick the angles, keeping the creative call where it belongs. Audio extraction runs locally through ffmpeg, so only a small compressed audio file ever leaves the machine.

Batch Background Remover - brings one-click cutouts to Figma. It walks the selection recursively (frames, groups, components) to find every nested image fill, then deduplicates identical images by content hash so a layer duplicated five times costs one inference instead of five. Models sit behind a registry that lets each backend declare its own endpoint and parameter schema, so adding one is a config change rather than a rewrite; it ships with BiRefNet and FeynoBG, selectable per run. Work is processed by a concurrency-limited pool with per-image progress, results come back as data URIs in a single response to avoid a second download hop, and each fill replacement commits as its own undo step so nothing is destructive in practice. API keys live in Figma's local storage and are sent only to domains allowlisted in the manifest.

GEN Studio is a docked Photoshop panel for generating and inpaint image editing without leaving the document. It runs Nano Banana Pro and GPT Image2 in two modes: text-to-image with resolution, seed, guidance, and batch controls, and image-to-image editing that captures the live canvas and applies changes at adjustable strength, with results inserted straight into the open document as new layers. Requests go through fal's queue API with status polling so long generations survive the request window. Most of the engineering went into UXP itself: the panel had to be rebuilt around Content Security Policy restrictions that block inline handlers and around entrypoints setup initialization, neither of which is visible from the rendered UI when things silently fail to respond.

Video Blocks for Figma turns pasted YouTube and Vimeo links into clean reference blocks on the Figma canvas with real thumbnails, titles, and play badges, laid out in a grid at the viewport center. The design constraint drove the architecture: Figma's canvas can't host a live web player, so instead of faking it, each block is a plain Figma frame carrying a hyperlinked caption and a baked-in On click → Open link prototype interaction. That means the blocks keep working in Design, View, and Present mode for every collaborator, whether or not they have the plugin. For local files, it inserts native Figma video fills that genuinely play on canvas, with in-UI messaging for the plan and file-size limits Figma enforces.

Still Frame Exporter replaces After Effects' render-queue detour with a one-click dockable panel: PNG or JPEG, optional alpha, an optional simultaneous half-size export, output to the project folder or anywhere else, and preferences that persist between sessions. The interesting part is reliability — the panel verifies each written PNG by checking for a terminating IEND chunk rather than assuming the file landed intact, using absolute seeks because ExtendScript's seek-from-end behavior silently misreports. Filenames are sanitized and frame numbers zero-padded so sequences sort correctly.

AR Filters

Augmented reality (AR) filters are real-time visual effects that overlay computer graphics, 3D masks, and interactive elements onto a user's face or physical surroundings through a smartphone or computer camera. I build face filters, virtual makeup, animal ears, interactive games, along with world effects that place 3D objects into real spaces, and product try-on tools. These were developed for brands as marketing activations and social media campaigns across Instagram, Snapchat, and TikTok.