Open Source Projects
Things I build and maintain myself.
AI Exporter
A free browser extension that saves your ChatGPT, Claude, Gemini and twelve other AI chats as PDF, Word, Markdown, Excel and five more formats, images included. Everything happens locally in your browser.
What it does
- Works on fifteen AI chat sites: ChatGPT, Claude, Gemini, DeepSeek, Grok, Perplexity, Microsoft Copilot, Mistral Le Chat, Meta AI, Kimi, Doubao, Qwen, Qianwen, Tencent Yuanbao and Z.ai.
- Exports to nine formats: PDF, Word, a self-contained web page, one long image, Markdown, plain text, JSON, CSV and Excel.
- Saves many chats at once into a ZIP, and can back up new and changed chats every hour, day or week to your Downloads folder or a private GitHub repository.
- Saves straight to GitHub or Notion, opens a chat in Google Docs, continues it in another AI, and gives a ready citation in APA, MLA and Chicago style.
- Interface in thirteen languages.
How it's built
- It reads each conversation through the same API the chat site's own web app uses, instead of scrolling the page and scraping whatever is rendered. That's why long chats come out complete and in the right order, and why regenerated replies and edited messages follow the branch you're actually looking at. Mistral Le Chat and Meta AI have no such API, so on those two it reads the page.
- PDFs embed fonts for Latin, Cyrillic, Greek, Hebrew, Arabic, Chinese, Japanese, Korean, the Indian scripts and more. Complex scripts are shaped with HarfBuzz, right-to-left text stays right-to-left, and formulas are typeset. In Word they become real, editable equations.
- Everything runs locally. There is no AI Exporter server, no account and no analytics. The extension only talks to the chat site you're exporting from, and to GitHub or Notion if you use those features.
- Written in TypeScript. The source is on GitHub and free for personal and other noncommercial use.
Installing it
- Chrome and Edge: from the Chrome Web Store. Edge installs Chrome extensions after you allow extensions from other stores.
- Firefox 140 or newer: build it from the source.
PixelForge
An MIT image processing library for .NET 8 and newer, built on SkiaSharp. It has the same Load, Mutate and Save API as ImageSharp, needs no license key, and comes with safe defaults for user uploads.
What it does
- Reads PNG, JPEG, WebP, GIF (first frame), BMP, ICO and WBMP, and writes JPEG, PNG and WebP, lossy or lossless.
- Fixes orientation from EXIF, resizes with crop, pad, max, min and stretch modes, and crops, rotates, flips and converts to grayscale.
- Uses the same
Load,MutateandSavecalls as ImageSharp. For most upload and thumbnail code, moving over means changing theusinglines and the encoder calls. The migration guide has the full mapping.
How it's built
- Built on SkiaSharp and licensed under MIT. There's no license key, registration or build-time check, so it works the same in open source, closed source and CI.
- Safe by default for user uploads. Decompression bombs are rejected from the file header before any pixel memory is allocated, input size is capped, and EXIF metadata, including GPS location, is never written to the output.
- JPEG and WebP can be decoded straight at a smaller size, which makes thumbnails fast. A 200 px thumbnail from a 12 MP JPEG takes 32.6 ms, the fastest of PixelForge, ImageSharp, NetVips and Magick.NET in my benchmarks. Full-size resizes are slower than ImageSharp and NetVips. The README has all the numbers.
- Runs on Windows, macOS, and Debian, Ubuntu and Alpine containers, on x64 and arm64, without installing extra system packages. CI tests every one of these.
Installing it
- From NuGet:
dotnet add package PixelForge --prerelease. The first release is a preview, so the--prereleaseflag is needed for now. - Needs .NET 8 or newer.