hankelsner.tech/ downloads

Software from hankelsner.tech

Apps and tools built on the platform — installable on your own devices. Android builds and Debian packages, signed and served straight from the source.

Access

Cubby

tech.hankelsner.cubby · the kids app — Android, Debian & Windows

The one app for the little ones. She counts cats, bunnies and bears by tapping them while a real recorded voice counts along, meets an animal friend for every letter of the alphabet (each letter now with three words), pages through fourteen photo galleries of cuddly baby animals, taps thirty animals to hear what they say, and plays ten tapping boards — colors, shapes, feelings, body, food, things that go, weather and more. Every single word is a real recorded voice, never a robot. There is no way to lose, no timer, no score that goes down, and no way out of the app until a grown-up lets her out.

Full-screen kioskNo internet permissionReal recorded voiceWorks offlineNo ads, ever

Same app on all three: the tablet build is a full-screen kiosk; the Debian and Windows builds run full-screen on a laptop and close with Ctrl+Shift+Q (or Escape twice). All three are fully offline. To get out on Android: tap the top-right corner three times, then tap “Exit Cubby”. Grown-up settings behind the same gesture can lock the Home button and add a PIN.

Access Kit

Stop typing the root password. One-line setup for Linux, Windows & Android → passwordless ssh vps, an agent session that survives disconnects, and one-tap key revocation.

Open the Access Kit →
Public builds

Loading builds…

Android

Hank’s Android Torrent Downloader

tech.hankelsner.torrent · v1.0.2 · BitTorrent client

A real BitTorrent client for Android, built on libtorrent — the same engine behind qBittorrent. Paste a magnet link, open a .torrent file, or tap a magnet link anywhere on the phone and it lands here. The transfer list shows progress, speeds, seeds and peers and time remaining, and a foreground service keeps everything moving with the screen off.

The options are the real thing, not decoration. Every switch maps onto an actual libtorrent setting: a SOCKS4/SOCKS5/HTTP proxy with optional credentials, with separate control over whether peer traffic, tracker traffic and hostname lookups all go through it — plus a force proxy mode that refuses any connection which would bypass it. Stop after completion if you do not want to seed, or seed to a ratio or a time limit. Rate limits, connection caps, protocol encryption, DHT, local peer discovery, uTP and the listening port are all yours.

Magnet links & .torrent filesSOCKS5 & HTTP proxyForce-proxy modeStop after completionSeed ratio & time limitsSpeed limitsWi-Fi onlyPause on low batteryDownloads in backgroundEncryptionNo ads, no account

Android 7.0 or newer, about 51 MB (it carries the native engine for three processor types). It has no search and no index built in and ships with no content of any kind — it moves the files you point it at, which is a matter for you and the rights of whatever you are downloading. Downloads are saved to the app’s own folder by default, which needs no storage permission; you can point it anywhere else in Settings.

Android Audio Master

tech.hankelsner.audiomaster · multi-output audio routing

A complete audio dashboard for Android, and a routing engine underneath it. See what every app is playing and what is using your microphone right now, read the hardware’s real sample rate, buffer, Bluetooth codec and spatial-audio support, and drive every system volume from one screen. Then route: take another app’s output — VLC, a browser, a music player — and fan it out to several outputs at once, each with its own volume, ten-band equaliser, channel treatment and latency trim. A built-in probe measures each output’s real round-trip latency and sets the delay that puts two of them in sync, which by ear takes twenty minutes and is never right.

About two Bluetooth headsets at once, plainly: Android sends media to one active output. Outputs of different kinds — Bluetooth with the speaker, a wired headset or a USB DAC — do play together, and this app drives them independently. Two Bluetooth headsets playing at the same time is an OEM feature (Samsung calls it Dual Audio) or LE Audio broadcast; the “maximum connected Bluetooth audio devices” developer setting controls how many can be connected, not how many can play, and no app can override that. So the app measures instead of promising: one button plays a different note out of every configured output at once and reports where each one actually landed. There is also an experimental second-headset route over the call-audio path — mono and narrow-band, but it works on phones where the media path will not split.

Multi-output routingMeasures what your phone really doesLive dashboard10-band EQ per outputSpectrum analyserLatency probe & auto-syncCapture any app’s audioSystem volumesLive stream outNo root neededNo ads, no account

Android 10 or newer. The virtual-mic feed publishes the mix at http://phone:8099/mic.wav, which becomes a real microphone on a PC in two commands; Android does not let any app publish a fake microphone to other apps on the same phone, and this one does not pretend otherwise. Same policy throughout: where the platform sets a limit, the app measures it and says so rather than claiming past it.

FINDMY

tech.hankelsner.findmy · v1.3.1 · Bluetooth device finder

Type a Bluetooth address — or a partial, a name fragment, or a service UUID — and the phone hunts that one device as hard as Android will allow. Everything the phone has ever paired with is listed on the main screen too, so a lost headset or speaker is one tap. A signal gauge running red to green walks you in, showing strength as a percentage, in dBm and as an estimated distance, with a peak-hold mark and a warmer/colder readout.

It never forces you to make a noise. Pick a full alarm that will not stop until you press FOUND IT, a single chirp, or complete silence — and whichever you pick, the alarm hushes itself once you are within a distance you choose, because an alarm blaring from across the house is exactly what stops you hearing the thing when you get close.

Distance you can calibrate. Stand five feet away and press a button, then ten, then twenty: it measures how signal actually decays in your building instead of assuming it. Calibrate one device and every other device gets better too, because path loss belongs to the building rather than to the headset. And a lost speaker can be made to announce itself in bass, which carries through cushions and bags that swallow a chirp.

The hunt survives a locked screen and a pocket: a foreground service and a wake lock keep one continuous LE scan alive, and optional classic Bluetooth inquiry picks up speakers and headsets that do not advertise over LE. It stops itself after eight hours so it cannot flatten the battery unattended.

Address, name or UUIDPaired-device one-tap listRed-to-green signal gauge%, dBm and distanceAlarm, chirp or silentWalk-out distance calibrationLFE locating toneScreen-off huntingLE + classic scanNo internet permissionNo ads, no account

Android 8.0 or newer. Needs the Nearby devices permission — Android will not report Bluetooth scan results without it. It has no INTERNET permission at all: everything it does happens on the phone, and nothing it hears leaves the device. The installed version is shown under the title on the app’s own main screen, so you can always check what you are running. Privacy policy.

KEYS

tech.hankelsner.keys · vault & authenticator

Your hankelsner.tech vault and 2FA authenticator in one app. Connect once, then open your secrets and live TOTP codes any time — even offline. Edits sync back to the server; changes appear live on the device.

Rotating 2FA codesOfflineLive syncOne-time setup

Developer mode / “install unknown apps” must be enabled to sideload. Or add the web app to your home screen — same thing, no APK.

PUNCH

tech.hankelsner.punch · geofenced time clock

Clocks you in when you arrive on a job site and out when you leave. Draw a fence around the site once; after that the phone reports position in the background and the server decides the rest. If you are on site and still not clocked in, it escalates — alert, then a text, then it rings you.

Automatic on arrivalWorks offlineCalls if you forgetCSV timesheet

Needs location set to “Allow all the time” and an exemption from battery optimisation — otherwise Android stops tracking the moment the screen locks.

Hanks Wallet

tech.hankelsner.hankswallet · Dogecoin wallet

A warm, simple Dogecoin wallet. Make a wallet in seconds, send & receive DOGE, and mint or collect NFTs and DRC-20 tokens — with a built-in QR scanner and address book. Your keys are made and signed on your phone; they never leave the device.

Send & receiveMint & view NFTsDRC-20 tokensYour keys only

Non-custodial & open source. Enable “install unknown apps” to sideload, or just use the web app. Import your existing 12-word phrase or private key.

Chrome & Edge

TIMEWARP

chrome extension · speed up video & timers

Speeds up every video and every countdown on a page — any player, any embed, any frame. It runs inside embedded players too, so a video embedded from another site speeds up like anything else. It also warps the page’s own clock, so “please wait 30 seconds” gates, quiz timers and slideshows move at the rate you pick — including countdowns that already started.

Any player or embedSpeeds up countdownsUp to 200× on timersSkips through video past 16×Per-site memoryNever steals your keystrokesWorks on Android forks

About 200×: timers and countdowns go all the way to 200×. Video is the interesting part: 16× is the fastest any Chromium browser will play media — ask for 17× and it throws an error. That is an engine limit no extension can lift. So past 16× TIMEWARP stops asking the player to go faster and walks the video forward itself, which puts a 3-minute video behind you in about a second. That is skipping, not watching — the picture jumps and the sound is muted — and it is built for getting past a video rather than watching one faster. Switch “Skip video past 16×” off in the panel and the picture holds at 16× instead. Where a video genuinely cannot be skipped, it notices and leaves it playing at 16× rather than making things worse.

Chrome only installs extensions from its Web Store, so this one loads unpacked. It survives restarts — but the browser re-reads it from the folder you pick, every single launch:

1. Unzip the download somewhere permanent (NOT Downloads) 2. Open chrome://extensions 3. Turn on "Developer mode" (top right) 4. Click "Load unpacked" and pick the unzipped folder 5. Leave that folder alone from then on

Keep the folder. Deleting it, moving it, or letting a cleaner empty your Downloads breaks the extension in a confusing way: the icon stays in the toolbar, but tapping it shows ERR_FILE_NOT_FOUND — the browser is still pointing at files that are no longer there. Nothing is wrong with the download. Unzip it again to a folder you will keep, remove the dead entry on chrome://extensions, and Load unpacked once more.

Works in Chrome, Edge, Brave, Vivaldi and Opera, and on Android Chromium browsers that support extensions (Mises, Kiwi) — where the toolbar popup often will not open, use the extension’s Options entry, which is the same panel as a full page. On Android, if your browser offers to install straight from the .zip, prefer that over Load unpacked: it copies the files into the browser, so they cannot be deleted or made unreadable later the way a folder in Downloads can. Keyboard: Alt + . / , to speed up or slow down, Alt + 19 to jump to a rate, Alt + / for 1×. Every shortcut needs Alt on purpose — unlike other speed extensions it never swallows plain keystrokes, so terminals, games and chat boxes keep working.

MIT licensed. sha256 0193235f6462fd077343e0818d61a93d117499c2c354847ae107f33883e1d67c

AI skills

Dr. Ian Malcolm

AI skill · could we, and should we?

A capable AI agent’s failure mode is not incompetence — it is enthusiasm. Ask it to fix a bug and it refactors the module; ask for a script and you get a daemon and a timer. This skill installs the cautious voice from the boardroom scene: every capability gets tagged asked, implied or assumed, blast radius is scored against what was actually authorised, and the review comes back GO, NARROWED, HOLD or NO with the cuts named out loud.

Scope ledgerBlast radius M0–M4Seven gatesScanner includedMIT

Install for Claude Code — it is Markdown plus one stdlib Python script, and nothing runs on its own:

curl -fsSL https://download.hankelsner.tech/downloads/skills/ian-malcolm-latest.tar.gz | tar xz -C ~/.claude/skills

Works with any agent, not just Claude — PROMPT.md inside is the whole thing in about 700 words, ready to paste into an AGENTS.md, a rules file or a system prompt. No hooks, no daemon, no telemetry, no network calls.

Windows

SPLICE

AI-native terminal · installs SPLICE 1.6.0

A real Linux terminal on your Windows desktop: instant typo-rescue, a Ctrl+Space natural-language ask bar, and a context sidebar built to keep AI token cost low. The installer sets SPLICE up inside WSL2 and adds a native launcher, Start Menu entry and desktop shortcut — then it opens as an ordinary window like any other Windows app.

Typo-rescueCtrl+Space ask barContext sidebarBring your own AI keyUpdates via apt

Needs Windows 11, or Windows 10 22H2 with wsl --update, and a WSL2 distribution (wsl --install -d Debian). SPLICE is built on GTK and VTE, which have no Windows port, so the terminal itself runs in WSL2 and WSLg draws it on your desktop — it is the genuine SPLICE, not a reimplementation. It installs from the signed APT repository below, so sudo apt upgrade inside WSL picks up every new release. Already have WSL? You can skip the installer entirely: curl -fsSL https://download.hankelsner.tech/downloads/windows/wsl-setup.sh | sudo bash

Debian
📦

APT repository

git.hankelsner.tech/apt · signed

Install and auto-update platform packages with apt. Add the signed repository once:

curl -fsSL https://git.hankelsner.tech/apt/key.gpg | sudo tee /usr/share/keyrings/hankelsner.gpg >/dev/null echo "deb [signed-by=/usr/share/keyrings/hankelsner.gpg] https://git.hankelsner.tech/apt ./" | sudo tee /etc/apt/sources.list.d/hankelsner.list sudo apt update