12 projects

Projects

Research code, and a few things built purely because they were fun.

TAMArt

2026

Token Activation Maps for artwork description: a heatmap for every word a multimodal LLM generates, isolating the visual evidence that word draws on. Code and results for the ICPR 2026 paper.

  • Interpretability
  • MLLM
  • Explainability

ArtSeek

2025

A multimodal agent that answers questions about paintings by retrieving evidence from Wikipedia and reasoning over it in context. Includes WikiFragments, a dataset of multimodal fragments mined at scale.

  • Multimodal
  • RAG
  • Retrieval
  • PyTorch

A Wikipedia-scale multimodal dataset — over 5M image–text pairs across 42M examples — built to give retrieval models something to ground on. Extracted with a modified WikiExtractor that keeps a page's images alongside its paragraphs. Released with ArtSeek.

  • Dataset
  • Multimodal
  • Retrieval

Text-guided multi-mask inpainting for artworks: a multimodal LLM proposes what belongs in each missing region, and a diffusion model paints it. Published at WACV 2025.

  • Diffusion
  • MLLM
  • Inpainting

Label Anything

2025

Few-shot semantic segmentation that takes points, boxes or masks as visual prompts and handles many classes at once. Built with the CILab team, published at ECAI 2025.

  • Segmentation
  • Few-shot
  • PyTorch

Clipper

2024

A small web app for looking at your own CLIP embeddings: project an image collection into two dimensions and browse the space to see what the model considers close to what.

  • CLIP
  • Visualisation
  • Vue

My MSc thesis work: generating descriptions of paintings from a noisy corpus of LLM-written captions, using CLIPScore to weigh each example by quality.

  • Captioning
  • CLIP
  • Vision-Language

Worked solutions to the exercises in Bishop's Pattern Recognition and Machine Learning, typeset in LaTeX. Written while going through the book properly rather than skimming it.

  • Machine Learning
  • LaTeX

Merged work on projects I use. Most of it is in Porcupine, a Python editor in tkinter, where six patches went in around the editor's cut/copy/paste behaviour and file-tree ordering. Also one patch each to scikit-learn (parameter validation for make_classification) and PyKEEN.

  • Open Source
  • Python

A from-scratch encoder–decoder captioning model — the project where I learned how attention actually works rather than reading about it.

  • Deep Learning
  • Python

Pyker

2021

A Texas Hold'Em engine in Python, written for the pleasure of getting hand evaluation and betting rounds exactly right.

  • Python
  • Games

PyLeague

2021

A soccer championship simulator — fixtures, tables, and a season that plays itself out.

  • Python
  • Simulation

More on GitHub.