Portfolio · October 2026
Colours
← All work Creative · 6 projects

Creative and games

Songs and music videos, novels and screenplays, claymation, and games starring my cats.

Case study 05 · Music & animation

Cat songs and music videos

A repeatable way to write songs with Suno, and a toolkit that turns a finished song into a timed storyboard and an animated music video starring my cats.

The song workflow

The songs are written with Suno, and the process is a written system: concept, style, structure, meter, hook, verses, then a rhyme audit and a length audit before anything is generated. After generating, the song is diagnosed before it is rewritten. The full workflow runs to 17 steps; these are the ideas that matter most.

Start with the premise

Name the core concept, point of view, emotional tone and the central joke or tension, and brainstorm scenes and images before any lyric. Comedy works best when the singer treats an absurd premise completely seriously. The joke is never explained; it comes out of the character's logic.

A separate style prompt

Genre, BPM, drum feel, bass, harmony, instruments, vocal register and timbre, texture, space and mood, in under about 1,000 characters. The instrumental should sound like a real record first: future garage, neo-soul, dub, dancehall, vintage calypso, synth-funk, jazz-funk. Funny lyrics don't need funny production, and the contrast is often what makes them funny.

Lock structure, then meter

Sections are decided before writing, and equivalent sections get equivalent line counts (8, 12 or 16, never a verse that runs long because it has more jokes). A syllable pattern is set per section, such as 8/8/8/8 or 7/10/7/10, with an even stricter meter in the chorus because the music model needs a predictable shape.

The hook is designed on its own

A short repeated phrase of three to five syllables with a repeated grammatical construction and simple words: "Kitty computer", "No teef, big life". The chorus gets its own identity instead of summarising the verses.

Verses are distinct scenes

Concrete images, physical detail and character-specific logic. When several characters sing, each has a different worldview, vocabulary and kind of joke, and no two are interchangeable.

Rhyme with rules

End, internal, multisyllabic and slant rhyme, with several rhyme points inside a line when it comes naturally. No word rhymed with itself, no lazy pseudo-rhymes such as side and outside, and no bent syntax to force a rhyme. Sound beats spelling.

Written to be sung

Where do the stresses fall, can the singer breathe, are the vowels good for held notes, and does each line have a rhythmic shape like its neighbour? A lyric can look clever on paper and still generate badly if the meter is unstable.

Realistic runtime, musical endings

The target is about 3:15 to 3:30. If a lyric is too long, cut the weaker jokes and shorten the bridge rather than rush the model. Endings are a refrain, a stripped hook, a harmony stack or an instrumental fade, not a spoken skit.

Arrangements that evolve

Dropouts, countermelodies, filtered passages, bass breaks, drum changes, vocal stacks, dub-delay throws, sparse bridges and a bigger final chorus, so the track develops instead of looping. Vocals are described precisely, for example a high, clear, intimate lead with airy falsetto edges, close-mic phrasing, whispered doubles and soft stacked harmonies.

Quality control before output

Fifteen checks run on every lyric: equal line counts in matching verses, the intended syllable pattern, a consistent chorus meter, a short memorable hook, no self-rhymes or lazy rhymes, internal and multisyllabic rhyme present, no line much denser than its neighbours, a lyric that scans out loud, distinct verses, a realistic runtime, a joke that is embodied rather than explained, a musical ending, and a production prompt that sounds like a real record. The output is always two copyable blocks, a style prompt and the lyrics, with no long explanations.

Diagnose before rewriting

  • Confused melody: check syllable count and line length.
  • Weak chorus: simplify it and repeat more.
  • Rushed verses: cut density or cut lines.
  • Feels childish: make the production more serious.
  • Forced jokes: go back to character perspective and concrete detail.
  • Weak rhymes: rewrite the rhyme structure instead of patching words.

Concept, style, structure, meter, hook, verses, rhyme audit, length audit, generate, diagnose, revise.

Cat Music Video Studio

A toolkit that connects a recorded song to a timed storyboard and animated character performances. Turning a finished song into a video means coordinating several timelines at once: the recording, the lyrics, the characters' performances and the visual story. Written lyrics don't capture how a singer actually delivers them, and repeated hooks, held vowels, pauses, ad-libs and changed pronunciations all make synchronisation hard. I directed the AI-assisted build of the tool that solves it.

An interactive review tool

One browser workspace holds the song, the isolated vocal, the lyrics and the storyboard. Words and lines are clickable to audition them, master and vocal switch without losing your place, and playback speed slows difficult phrases. A waveform seeks on click, the current word highlights live, and search and section filters move through verses and choruses. Review flags and confidence labels mark uncertain alignment, and a storyboard view ties timed scenes to actions, camera direction, continuity notes and generation prompts.

Audio analysis and alignment

Scripts decode the master and the isolated vocal, measure both, and compare sync at several points. Whisper recognition and reference-conditioned alignment propose word and line timings, and separate analysis of each stem gives evidence to compare them. Targeted passes handle the hard parts: repeated calls, short interjections and closing phrases. The data keeps supplied lyrics, model recognition, candidate timestamps and unresolved events apart, so uncertainty stays visible.

Production data other tools can use

JSON for timing maps, audio metadata, lyrics, scenes and review evidence. CSV for word and line timings, sections, non-lyric intervals, scene plans and review logs. SRT for draft captions. HTML for an interactive review package with the timing data embedded. Together they give audio, shots, captions and animation one shared timeline.

The songs

Fourteen songs so far, all starring my cats, written and generated with the workflow above and collected in one YouTube playlist.

  • Why You Chase Me, Newty?
  • On Mi Turf
  • No Teef, Big Life
  • Mommy Saved Mi
  • Who Puke Pon di Floor?
  • Vet Day Come
  • Mi Nah Like Moving Day
  • Every Lane, Every Road
  • Free Di Claw
  • Shoulda Leave di Treats Alone
  • Please Turn on di Sink
  • Flea Pon Me
  • Kitty Computer
  • Open up the Door

A finished animation

A complete music video built in the browser with p5.js, combining character drawings, environments, timed shots, captions and the original song. Mouth opening follows word timing and vocal amplitude, the mouth closes between timed words, and singing can be switched on or off per shot. Mouth and tongue shapes respond to the resulting value. It has play, seek, restart, mute, caption and fullscreen controls, plus a rendered vertical-video version.

  • "Every Lane, Every Road": a 34-shot animated video, about 3 minutes 33 seconds, exported at 1080 × 1920 and 25 fps.
  • "Why You Run Me Down, Newty?": 627 word records and 44 proposed shots.
  • "Mommy Save Mi": 567 word records and 42 proposed shots.

Built with

Python, Whisper small.en, stable-ts, FFmpeg, NumPy, SciPy, soundfile, JavaScript, HTML and CSS, and p5.js.

My role

I set the creative goals, supplied the songs and characters, directed the AI-assisted build, and shaped the workflow through requirements and feedback. It was built through an iterative ChatGPT and Codex workflow, which wrote the implementation, analysis scripts, production documents and animation code.

Case study 04 · Local AI

CatGPT

A control panel for the AI models running on my Mac that grew into a cat-themed home for chat, creative tools and games, hosted by three pixel-art cats: Newton, Skippy and Simba.

Lines of code
22,500
npm dependencies
0
Tabs
26
Local models installed
25
Chat characters
39
Games
9
CatGPT's model manager: a pixel-art cat room across the top, a sidebar of backends, and a table of local models with size, quantization and a memory-fit badge, plus chat, load, info and delete buttons.
The model manager. Each model shows whether it fits in memory, and the sidebar lists every local backend it can talk to.

What the local models do

Model manager

Pull, load, unload and inspect models from Ollama or any OpenAI-compatible local server. Idle models unload themselves, and a Mac Health page logs memory every minute so you can see what filled it.

Chat and compare

Stream any model with full controls and tokens per second, drop in PDFs or Word files, or send one prompt to several models side by side. A scoreboard tracks speed and thumbs up or down for each model.

Shared memory

One store of facts that every AI app on the Mac can read, reached through a small MCP server written for it, with per-app permissions. A local embedding model flags duplicates and conflicts using measured thresholds.

Ask your chats

Keyword search over every saved conversation, then a local model answers from the best passages.

Voice, images and songs

Replies read aloud with local voice cloning, speech input through whisper.cpp, pictures through local Stable Diffusion, and a Song Studio where a local model writes lyrics that another model sings.

The Agent Factory

A pixel-art factory floor where you hire cat agents, give each a model, prompt and tools, and chain them on a conveyor belt, such as research, then write, then edit.

The games

Nine games, all original code and pixel art: Kitty Trivia, Cat Care (feed and dress the cats; 24 accessories so far), Fish Tank (each species breeds the way it really does), BalCatro (a poker roguelike), Nine Lives (a dungeon crawler), Purrimeter (tower defence), Duck Pounce, Krillion (a daily word game) and CatGPT Radio. There's also Cat Beats, a beat maker with a step sequencer, piano roll and mixer, where a local model can produce a beat for you.

Kitty Trivia: three pixel-art cats in costumes beside a speech bubble, above six game modes, 29 categories with question counts, and a Start the Show button.
Newton, Skippy and Simba host. Each cat has its own walk cycle, blinks, yawns and lines.
Featured gamePixel animationGame design

Featured game: Kitty Trivia

53,648 questions29 categories6 game modes~80 pixel outfits

An 8-bit trivia game show hosted by three hand-pixeled animated cats, each with a personality, a talking mouth and grooming animations. Modes run from Classic and Daily Ten to Lightning Rush, Sudden Death, Cat Ladder and Grand Tour.

How it was made

The cats are hand-pixeled sprites animated in code, each with its own lines and moods. The questions come from two open trivia databases, sorted into categories and difficulty levels.

Play Kitty Trivia

How it was built

Built with Claude Code as plain Node.js and browser code with no build step. The repo holds an efficiency rulebook that tells coding agents to read narrowly, batch their calls and report in a sentence or two.

Case study 30 · Animation

Clay explainers

Two half-minute claymation explainers on subjects I care about, made with the same Blender clay kit as the business ads and narrated with takes I made on a voice model running on my own laptop.

One Struggle
Where the $40 Goes

One Struggle

Ethiopia's wars in thirty seconds: the Tigray war of 2020 to 2022 and the fighting in Amhara and Oromia since, told with clay maps and charts. The map is built from real region boundaries, and every figure on screen comes from a source list kept with the script.

Where the $40 Goes

A mock infomercial about respite care in Pennsylvania. Medicaid pays roughly forty dollars an hour for a respite worker, but much of it stays with the agency, and the state tracks hours billed rather than what workers are paid. The rates come from the state's published fee schedule, and the worker's share is labelled as an estimate on screen.

How they were made

Each started as a written plan and a storyboard of test stills before any full render. The scenes are Blender scripts built on the clay kit from the business ads. I made the narration with VoxCPM, a voice model running locally on my Mac, and the shots are timed to the pauses in my takes. Sound effects are free-licence recordings.

How it was built

Built with Claude Code from my topics, scripts and edits: it researched and sourced the facts, wrote the Blender scenes and assembled the video. The narration takes are mine, made with a local model rather than a cloud service.

Writing & workflows

298,692 words of fiction, and the systems that write it

A historical series, a science-fiction novel and a screenplay package, each built with a process I can repeat. Led by No Ear Cut Twice.

Cover of No Ear Cut Twice, a novel by Myles Parslow: a plaster ear on a workbench beside iron shears, a raven's shadow, and the island of Ischia across the water.
Series · Historical fiction

No Ear Cut Twice

94,828 words

On an island where perjurers lose their ears, a plasterer hides that his are prosthetic stucco, and a single lie blooms into a herd of thousands.

Set on Ischia and in Naples across three parts: The Lie (34,187 words), The Herd (19,492) and The Collection (41,149). 32 chapters and an interlude.

How it was made

Written part by part, then carried to launch with a 3,159-word marketing pack holding a master prompt, 14 image prompts and a bank of copy.

Novel · Literary science fiction

Thalweg

189,962 words

A surveyor re-measures her lost father's survey stations inside a vast alien object and finds a span that breathes.

34 chapters and 6 interludes in seven parts, with chapters running from 4,176 to 8,701 words. The prose uses real surveying technique.

How it was made

A 4,982-word story bible came first and kept the book consistent across its length. Chapters went through many rounds of revision.

Workflow · Screenplay

Horror screenwriting pipeline

13,902 words across 3 documents

A 4,642-word system prompt in 16 sections turns Claude into a senior horror screenwriter and script doctor, with a fear-mechanics toolkit, structure rules, a cliché list and a self-review checklist.

CORPUS: a novelist leaks a cursed 1349 manuscript into his homemade AI's training data.

How it was made

The prompt produced CORPUS, a 5,351-word development package with a 15-beat sheet, 7 characters and 9 set pieces chosen from 64 brainstormed. FINE-TUNED is the 3,909-word pitch with 18 beats over three acts. Side by side, they show prompt design as a tool.

Content note: horror, with gore.

Case study 41 · Game

Kitty Kart

A kart racer starring my three cats, made in Godot with clay-look models built in Blender from code. Eight tracks, drifting and items, a second player in split screen, and it runs in a phone browser with touch controls.

Tracks
8
Racers per race
6
Players, split screen
2
Items
3
Laps
3
Platforms
Mac + web
The Kitty Kart menu: three clay cats in go-karts on coloured podiums, Newton the orange tabby in red, Skippy the light ginger in green and Simba the long-haired black cat in purple, with a card describing each.
Choose your cat: Newton, Skippy or Simba, each with their own kart.
A race indoors: a cat kart on a patterned rug track under a Kitty Kart start arch, with yarn balls on the floor, a minimap, the lap counter and first place.
An indoor track, with a minimap, lap counter and position.

The game

  • Build a warband from cards: every faction has 12 champions, 3 heroes, 8 spells and 6 pieces of equipment, paid for with Tide, a resource that builds up each round.
  • Tactics on a board with height: units spend action points to move and use abilities, stairs and walls shape every fight, and the camera rotates in four directions.
  • Rules that keep a fight moving: you draw two cards a turn, a fallen champion spills Tide on its tile for whoever reaches it first, and a spent card rests for a few turns (longer the more it cost) before it comes back to your hand.
  • Eight factions with their own voice, from the Salt Concord (“Order is the only thing between the Rim and the salt”) to the Hadal Court (“The sea was ours. We are coming up to collect it”) and the Gyre (“Wherever there is a battle, there is carrion. The carrion is ours”).
  • A campaign, The Light at Lantern Shoal: eight Salt Concord missions with reinforcements, turn limits and objectives, where unlocked units carry forward, plus skirmish, standalone scenarios and a collection.

How it is made

  • Every model is a script. Cats, karts, items and scenery are built in Blender by code, with parts named so the game can colour each cat and spin the wheels.
  • A plasticine shader gives everything lumps that re-roll a few times a second and tabby stripes, so it looks hand-made.
  • Tracks are generated from a loop of points: road, curbs or toy rails, hills, ramps, boost pads and scenery, with repeated props drawn in batches so it stays smooth on a phone.
  • Touch controls laid out from the phone's own screen size, plus sounds, a pause menu and a how-to-play screen.
How it was built

Built with Claude Code in Godot 4 and Blender. I picked the cats, the tracks and the feel, and played each build; Claude wrote the game, generated the models and tracks, mixed the sound effects from credited Freesound clips, and exported the Mac app and the web version.

Case study 42 · Game

Brinewake

An original turn-based tactics game for the browser, in the tradition of collectible-card tactics games: you build a warband from cards, deploy units onto an isometric battlefield with height, and fight over lighthouses on a drained seabed where the lifted sea is held back by their light. Eight factions, an eight-mission campaign, skirmish and a card collection.

Factions
8
Cards
232
Unit abilities
515
Battlefields
6
Story missions
8
Automated tests
93
A battle on an isometric board of pale salt-stone flats. Overcurrent sea creatures, a coiled white serpent, a blue anglerfish and a spotted stingray, fight dark winged Gyre birds around a lit lighthouse, with a hand of cards along the bottom, one of them greyed with a cooldown counter, and an End Turn button.
A skirmish on Lantern Shoal, Overcurrent against the Gyre. Spent cards rest in the hand bar with a turns-left counter before they come back.
The card collection screen: three rows of gold-framed Salt Concord cards, heroes and champions with painted 3D figures of blue-coated soldiers, then spells, with faction tabs along the top showing 29 of 29 for each faction and filters for heroes, champions, spells and equipment.
The collection: 232 cards across eight factions, 29 for each.
A mission briefing for The Light at Lantern Shoal, Mission 1, Lamp and Wall: the commander's log on the left, and on the right the battlefield, Salt Concord against the Returning Tide, victory and defeat conditions, and a Deploy button.
The campaign: eight Salt Concord missions, each with its own objectives and a written briefing.
The skirmish setup screen: The Overcurrent on the left versus The Gyre on the right, each with a crest and motto, all eight faction crests to pick from, and a miniature of the Lantern Shoal battlefield between them above a To Battle button.
Skirmish setup: pick two of eight factions and a battlefield.

The game

  • Build a warband from cards: champions, heroes, spells and equipment, paid for with Tide, a resource that builds up each round.
  • Tactics on a board with height: units spend action points to move and use abilities, stairs and walls shape every fight, and the camera rotates in four directions.
  • Six factions with their own voice, from the Salt Concord (“Order is the only thing between the Rim and the salt”) to the Hadal Court (“The sea was ours. We are coming up to collect it”).
  • A campaign of scripted missions with reinforcements, turn limits and objectives, where unlocked units carry forward, plus skirmish, standalone scenarios and a collection.

How it is made

  • A rules engine with no screen code in it. Every unit, ability, status, terrain type, map, mission and campaign is a data file, so new content drops in without touching the engine.
  • A computer opponent that plans each turn, and a test suite that plays AI-against-AI battles for every faction to catch broken or unbalanced content.
  • Its own world and look: a world bible and art direction (a drained harbor, muted salt and bone colors, one warm light per scene) that every unit, card and battlefield follows.
  • Its own sprite pipeline: every unit is sculpted in code as a small 3D model, lit, cel-shaded and painted down to a pixel sprite sheet, so one model drives every animation.
  • A hand-built isometric renderer in the browser canvas, with animation and a full menu flow.
  • Sound from real recordings: ambience, music, unit voices and interface sounds built from credited CC0 and CC BY packs (Kenney, Meta Open Sound), with nothing synthesised.
How it was built

Built with Claude Code in TypeScript. I set the world, factions and art direction and played each build; Claude wrote the engine, the AI opponent, the renderer, the sprite pipeline, the sound mix, the content and the tests. The painted card art was made in ChatGPT from prompts Claude wrote for every card, matched to each unit's in-game model.

More work

Which AI for what by project