Liner Notes

Every change to SetKey, tracked from the first note. What shipped, what broke, what I was thinking.

April 12, 2026

First Field Test

The worship leader at August Gate downloaded SetKey onto his MacBook and found two things within the first minute. Right-clicking in the URL field did nothing — no paste menu. And on a Mac without developer tools installed, the app popped up a system prompt asking to download them. Both fixed: right-click now shows a proper Cut/Copy/Paste menu, and the developer tools prompt is gone.

Nothing beats a real user on a real machine finding the things you never thought to test.

April 11, 2026

Signed, Sealed, Delivered

SetKey is now code-signed and notarizedCode signing + notarization
Apple’s two-step trust system. Code signing proves the app came from a verified developer. Notarization means Apple scanned the binary for malware and stamped it as safe.
through the Apple Developer Program. Double-click the DMG, drag to Applications, launch. No security warnings, no Terminal commands, no workarounds.

The app also finds its own port now instead of hardcoding one. If something else is running on port 8896, SetKey picks another. One less thing that can go wrong on someone else’s machine.

April 10, 2026

The Split

The marketing website at setkey.appsetkey.app
The landing page where you download SetKey. A separate codebase from the app itself — lightweight Express server with no audio extraction, no yt-dlp, no ffmpeg.
and the Mac app were sharing one codebase. Click “SetKey” in the footer and you’d land on the download page — from inside the app you already downloaded. Not great.

Split them into two separate projects. The website is a simple landing page with a download link. The app is fully self-contained — SoundTouchJSSoundTouchJS
JavaScript pitch-shifting library, now bundled locally. Previously loaded from a CDN, which meant the app made an external network request on every launch.
is bundled locally now instead of loading from a CDN. Zero external calls except YouTube extraction.

April 9, 2026

Security Pass

Three independent security audits were run against the codebase before deployment. The Express server now binds to 127.0.0.1Loopback address
localhost only. Previously the server bound to 0.0.0.0 (all interfaces), which meant any device on the same network could potentially reach it.
only — no other device on the network can reach it. The Electron window blocks navigation to external URLs. Hardened runtime is enabled. The website runs as a non-root user in Docker.

April 9, 2026

Atmosphere

The app used to be a flat dark rectangle. Added three layers of visual depth: a grain textureFractal noise overlay
An inline SVG using feTurbulence at 3.5% opacity with overlay blend mode. Turns flat digital black into something that feels like a physical surface.
over everything for analog warmth, a vignette that darkens the edges to focus your eye on the controls, and layered amber gradients at different positions for depth.

The tuning fork appears as a debossed watermark in the empty state before a song is loaded. It vibrates during extraction. When audio plays, a warm amber glow breathes behind the player.

April 7, 2026

New Face

SetKey was using the same display font as a previous project. Same ornamental serif, same dark theme. It looked like a reskin instead of its own thing.

Swapped to Instrument SerifDisplay typeface
A warm, high-contrast serif from Google Fonts. Editorial without being ornamental — the kind of type you’d see on an album sleeve.
— warmer, more editorial, like the type on a gatefold sleeveGatefold
A vinyl record jacket that opens like a book, with liner notes, credits, and artwork printed on the inside panels.
. Shifted the amber a few degrees warmer. Replaced the “SK” monogram with a tuning fork. Two prongs, one stem, amber on dark. It’s the one symbol that means “pitch” to every musician on the planet.

April 7, 2026

About Page

The old About page was a paragraph and a prayer. Rewrote it from scratch: how to use SetKey step by step, how key detection works, why the vocals sound weird, and what happens to your data (nothing). Every technical term gets a tooltip so you don’t have to leave the page to look anything up.

April 7, 2026

SetKey for Mac

YouTube restricts audio extraction from web servers, so SetKey moved to the desktop. The Mac app runs entirely on your machine — extraction, pitch shifting, key detection, all local. Double-click, paste a link, practice.

April 6, 2026

The Practice Loop

You find the section you need to work on, hit play, and it ends. Scrub back. Overshoot. Scrub forward. Repeat forty times. There had to be a better way to loop a section.

SET IN marks where it starts. SET OUT marks where it ends. The section loops automatically. Teal markers on the timeline show your loop region. Drag them to adjust. The LOOP badge toggles looping without losing your place.

April 6, 2026

The Dot Strip

The pitch controls used to be thirteen buttons in a grid. At narrower window sizes, the grid wrapped, the buttons stacked, and you couldn’t tell which semitoneSemitone
One half-step — the distance between any two adjacent keys on a piano. Twelve semitones make one octave.
you were on without counting from the left.

Replaced the whole thing with a strip of dots — thirteen circles on a line, like fret markers on a bass neck. Zero sits dead center, a little larger than the rest. Tap any dot to jump straight to that semitone. The active one glows amber so you always know where you are.

April 6, 2026

Key Intelligence

SetKey now detects the original key of the track automatically. If you know your target key, tap it and SetKey calculates the offset — no counting half-steps.

The semitone display shows the translation below the number — “Bb → G” — so you can confirm at a glance. Key detection is algorithmic, not magic. Trust your ears when it’s wrong.

April 6, 2026

Keyboard Shortcuts

Space for play/pause, left/right arrows for ±10s skip, the I key to jump to the loop start, Enter to jump to 0:00. These map to the three buttons on a MIDI footswitchMIDI footswitch
A floor pedal that sends MIDI messages when you tap it with your foot. Musicians use them to control software hands-free during performance.
Web MIDIWeb MIDI API
A browser API that lets web apps communicate with MIDI hardware. Would allow SetKey to respond to footswitch taps directly.
support for hands-free practice with a real pedal is on the list.

April 6, 2026

Accessibility Pass

Boosted contrast on the timeline and buttons to meet WCAG AAWCAG 2.1 Level AA
Web Content Accessibility Guidelines. AA is the standard most sites target — a minimum 4.5:1 contrast ratio for text, keyboard navigability, and screen reader support.
. Added focus management to the key picker — keyboard users can navigate in and out cleanly. Screen readers now hear “Transposed up 3 semitones” instead of just “3.”

If a musician with low vision needs to use SetKey, it should work for them.

April 6, 2026

First Note

You can’t capoCapo
A clamp that attaches to a guitar’s neck to raise the pitch of all strings at once. Guitarists use them to change key without learning new chord shapes. Doesn’t work on bass.
a bass. When the recording is in one key and the band plays it in another, you need the track in your key or you’re practicing against the wrong notes. The old workaround was Audio Hijack ProAudio Hijack Pro
A macOS app by Rogue Amoeba that captures and routes audio between apps. Has a pitch slider, but it works in cents — not semitones — so hitting the right value is tedious.
— route the audio, find the pitch slider, and try to land on the right centCent
A unit of pitch. One semitone = 100 cents. Adjusting pitch by cents means dragging a slider to exactly +200 or -300 instead of just tapping “+2” or “-3.”
value. A hundred cents per semitone and a lot of squinting.

Paste a YouTube link, tap a semitone button, hear it in your key. That’s all SetKey needed to be.

Notes kept by Mark Heinz at Rendered Digital — drummer, part-time bassist, builder of the tool he needed.