press any key to skip
↑
↓
←
→

Nav

1
2
3
4
5
6
7

Jump

↵

Select

~

Prompt

M

Theme

adam@looney:~$ whoami

looney.eu

INFRASTRUCTURE / AUTOMATION / DEVELOPMENT

adam@looney:~$ cat tagline.txt

Fixing things that don't need fixing and breaking things that didn't need breaking.

I script workflows, deploy infrastructure, preach vim over nano, get unreasonably excited about open source tools and appreciate topping all that off with well-spent game time among friends.

adam@looney:~$ ls sections/
adam@looney:~$

Use keyboard to navigate → ↑ ↓ · press ~ for the prompt, try "help"

adam@looney:~$ ls ~/contact/

GET IN TOUCH

email [email protected] Get in touch via email
linkedin linkedin.com/in/a-loon Connect on LinkedIn
github github.com/NocFA Check out my projects on GitHub
codeberg codeberg.org/noc Check out my projects on Codeberg
forgejo git.nocfa.net/NocFA Browse my self-hosted Forgejo instance
last.fm last.fm/user/alooneylad See what I'm listening to
adam@looney:~$ neofetch

INFO

──────────────
location Ireland sector IT focus L3 support, system administration (mostly Linux-based), networking, automation, scripting, frontend development interests gaming, music, automation, hardware os Windows, Linux & macOS editor vim (headless unix systems) · jetbrains fleet & phpstorm
Tech done to a looney's standard — still figuring out exactly what that means. Keeping things running, or perish trying.
adam@looney:~$ now-playing --user alooneylad
now playing
adam@looney:~$ watch -n0.5 homelab-status

Infrastructure

connecting...
adam@looney:~$ ls ~/projects/

Projects

noc-homelab open source updated

A 12U rack of macOS, Linux and Proxmox hosts behind a Cisco core switch, with a VPS and a storage box alongside over Tailscale. Runs media, communications, game servers, local models, file sync, home automation, a doorbell recorder, a malware sandbox, network monitoring, fleet-wide security scanning with Wazuh and an Active Directory lab.

noc-homelab dashboard, a rack of all nine machines with their services, memory, disk and uptime
infra TailscaleProxmoxDockerCisco IOS
services Matrix/SynapseEmbySeafileHome AssistantGatusWazuh
language PythonBash
T3-Nocturne open source updated

A build of T3 Code, the desktop GUI for Codex, Claude and other coding agents, that tracks the stable channel and adds a Tasks panel backed by Segments. Every task is a star in a galaxy you can fly through, coloured by priority and clustered by what blocks it, and Implement hands any task to an agent as the brief for a new thread.

T3-Nocturne with the Tasks pane open: orbiting the map, searching and flying to a task, then handing it to an agent
base T3 Code stableElectronReact 19Effect
rendering WebGL2GLSLray tracing
tasks Segments
builds WindowsmacOSLinuxForgejo Actions

features

Task map where colour is priority, brighter stars are sooner and blocked chains pull together into clusters
Same layout rules and frame rate from twelve tasks to thirty thousand
Schwarzschild black hole with a spinning Keplerian disk, bending the galaxy into an Einstein ring
Quality slider from Still to High, so motion only costs GPU when you want it
List view with the same tasks grouped and ranked, each row opening the full brief
Implement opens a thread with the task as the brief and marks it in progress on its own
Readout open source updated

A small tailnet server that turns the markdown AI agents write into calm, readable pages, built for readers with ADHD or autism and for anyone who finds raw markdown tiring. An agent publishes a file with one command and hands over the link, and the page pins every next step and decision waiting on the reader into a box at the top, then keeps itself up to date while the agent goes on editing the file.

A Readout doc split diagonally between the light and dark themes, with the title, a one-line summary, a strip of status, updated, reading time and source cells, and a purple What needs you box holding a NEXT step and a DECIDE question beside a course line in the margin
server Python 3.10+http.servermarkdown-it-pyPygments
page plain JavaScriptserver-sent eventsno build step
network Tailscaleloopback only
share drop protocol v1AES-256-GCM

features

Every NEXT and DECIDE callout copied into a What needs you box at the top of the page
Live links that swap in the new version whenever the file changes, keeping your scroll position
Focus mode dims everything but the section being read and draws the course line down to it
Tick boxes saved on the server, so every device and every agent sees the same checklist
An index grouped by project, with docs waiting on you numbered at the top until they are answered
Share uploads an end-to-end encrypted single-file copy through drop for people outside the tailnet
desktop-control-mcp open source updated

An MCP server and a desktopctl command that give Claude Code, Codex or any MCP client its own screen view, mouse and keyboard on the logged-in desktops of Macs, Linux boxes and Windows PCs. It handles the GUI-only steps an agent would otherwise hand back to you, like macOS privacy prompts, lock screens, installers and Windows dialogs, with passwords referred to by name and every screen action in an audit log.

A Mac desktop with a local network permission dialog, the pointer on Allow, and a badge at the top right saying Claude is controlling this Mac
language Python 3.10+MCP SDKPillow
transports Screen Sharingxdotool over SSHTightVNC via ssh -W
desktops macOSLinux X11Windows
badges SwiftGTK 3C#

features

Screenshots in a scaled view space, so Retina and 5K screens behave like small ones, plus zoomed regions for small text
Clicks, drags, scrolls, key chords and typing, each returning a fresh screenshot
Unlock, lock and lock state in one step on every platform
Stored passwords typed by name, and only on the host they belong to
An on-screen badge telling anyone at the machine that an agent is in control
Every screen action in an audit log readable by your user alone
watch open source updated

An Agent Skill that lets Claude Code, Codex or any agent that reads SKILL.md files watch a video, as a heavily extended fork of bradautomates/claude-video. Give it a URL or a file and it picks frames at scene cuts and regular intervals, reads the on-screen text with OCR and takes the transcript from captions or a local Whisper model, so the agent answers from timestamped contact sheets, text and transcript.

A contact sheet of screencast frames, each stamped with its frame number and timestamp, from a title slide to a Python file being typed
language Python 3.10+
media yt-dlpFFmpeg
text Apple VisionRapidOCRmlx-whisperWhisperX
agents Claude CodeCodexAgent Skills

features

Every scene cut plus the first frame of each interval, so typing in an editor still gets frames
Region-aware dedup that keeps a frame when one line of code changes and collapses held slides
OCR on full-resolution stills that lists only new text and rebuilds code indentation
Local transcription at about 20 times realtime on an M1 Pro, running alongside OCR
Contact sheets with each cell stamped #N MM:SS, so one image view covers many frames
Audio only leaves the machine if you pick Groq or OpenAI for transcription yourself
Visitor Book open source updated

A self-hosted visitors' book for a Ring doorbell without a Ring Protect plan, where Ring keeps no recordings of its own. It records a clip on every motion or ring, picks out people, vehicles, parcels and animals, and optionally who by face, then files each visit in a web app laid out like a signing-in register, with a player, a people index, a live view, trims, stills and sharing.

The register laid out as an open book, the day's visits listed on the left and a courier with a parcel at the door playing on the right, with people and parcel lanes under the clip
recorder Nodering-client-apiFFmpeg HEVC
worker PythonYOLO-WorldInsightFaceSQLite
web SvelteKitSvelte 5
platform Linuxsystemdrclone

features

A numbered register for every day, narrowed to one person, to rings, or to visits with a person, parcel, vehicle or animal
Lanes under the scrubber that light up each face and tag while it is in view
Face recognition off by default, and Forget removes a person's names, faces and face data
Kept visits skip the 14 day prune, and clips go out as expiring encrypted links through drop
A live view and two-minute recordings on demand, with a warning when the battery is low
Home Assistant alerts with the best frame, and a nightly 480p archive to any rclone remote
Nocturne Studio open source updated

A self-hosted AI music studio for songs you already have, where you bracket part of a waveform and press a colour key to extend, repaint, restyle or split it, or write a new song from a prompt. A small hub holds the queue and serves the app, and a GPU worker on a Windows PC pulls jobs whenever it is awake and free, so you can queue ideas from your phone while the PC is off or busy with a game.

The studio deck with a song loaded, a green bracket over part of the waveform, the Change key armed with Repaint and an instruction to turn the lead into a muted trumpet
hub Python 3.12FastAPISQLiteDocker Compose
app Vue 3Vite
worker WindowsNVIDIA GPU
engines ACE-Step 1.5YuE2-3BStable Audio 3BS-RoFormer

features

Four colour keys, Time, Change, Subtract and New, each a family of actions on the bracketed region
Takes land on a shelf under the song to load beside the original, then keep or bin
Songs come from your library, an upload or YouTube, with tempo and key worked out on import
The queue survives the GPU PC being off, rebooting or busy, and runs in order when the worker returns
Navidrome search and now playing with one-tap import, and kept takes exported as tagged FLACs
The worker only calls out to the hub, so the GPU PC opens no ports to the network
drop open source updated

A self-hosted, end-to-end encrypted way to send files, folders and messages, where the link works the moment you create it and a friend's download keeps pace with your upload. Everything is encrypted in the browser with the key riding in the link, so the server only ever holds ciphertext, and it enforces the burn after a set number of downloads, at expiry or when either side destroys the drop.

The owner creates a link for Holiday photos and watches it upload, while the recipient downloads both files as one zip with their bars following the upload
server Gostandard library onlyscratch image
web plain JavaScriptservice workerno build step
crypto AES-256-GCMHKDFPBKDF2

features

Links that work mid-upload, with the recipient decrypting the stream straight to disk
Burn after N downloads, at expiry, or on demand by the sender or a recipient
Optional password mixed into the key, behind the server's rate limits
Folders arrive as one zip, interrupted transfers resume and each file can reach 1 TiB
Read-once messages behind a reveal step with a clear warning
An encrypted sent list that follows the owner to any device they sign in on
MDSF Crew pre-launch updated

Crew-for-hire platform for Star Citizen. Recruiters post operations and assemble crews. Crew members list availability and build reputation through review-based rankings. Organisations manage squads, ranks, and fleets -- all tied to RSI-verified identities.

MDSF Crew landing page
frontend SvelteKit 2Svelte 5GSAP
backend Fastify 5TypeScriptNode.js 22
data PostgreSQL 16Drizzle ORMRedisPgBouncer
infra Cloudflare TunnelStreaming ReplicationDocker
auth Argon2idTOTP 2FADiscord OAuth2CSRF
payments StripeMulti-currencyWebhooks
integrations Discord BotBrevo SMTPRSI Scraping

features

Operations board with role-based crew assembly, squad management, and ship assignment
Review system with per-role experience tiers (Rookie through Elite)
Organisation system with RSI verification, persistent squads, ranks, alliances
Ship library (247 ships) with fleet management and org fleet pooling
Real-time notifications via WebSocket, Discord bot with slash commands
Subscription tiers, donation system with Hall of Fame, multi-currency pricing
Admin panel with moderation, audit logs, policy management, automated backups
Support ticket system, GDPR data export, account deletion
Segments open source updated

Single-binary task and project manager built as a faster replacement for Beads. It combines an LMDB-backed CLI, live web UI, and MCP tools for agent-friendly planning across projects.

Segments task list interface
language Go
storage LMDBJSONL export
surfaces CLIWeb UIMCP
shellwhy open source updated

CLI that answers "why is my shell doing this?" — inspects a shell session, applies per-shell startup-file rules, safely parses source statements, detects tooling hooks (starship, direnv, nvm, ...), and labels every file with a confidence level instead of pretending static analysis can prove runtime behavior.

shellwhy icon — a terminal with a question mark
language Rust
shells bashzshfishsh/dashkshtcshnu
output humanplainJSONstrace trace mode
gindexer open source updated

C++ library that indexes a local music collection and resolves cover art by track metadata. Scans directories on startup, watches for changes, and returns matching cover art fast enough for real-time use in discord-music-presence.

language C++17
storage In-memoryLMDB
libraries TagLibefswlmdbxx
foo_gifart open source updated

A foobar2000 component that renders animated GIF files as album art. Drop it in, point the artwork panel at a .gif, and your covers come alive — static art is so last decade.

Animated cover of Currents by Tame Impala, the silver ball rolling through rippling purple lines GIF
foobar2000
Let It Happen
Tame Impala
Currents
1:12
7:47
Animated cover of Plastic Beach by Gorillaz, the island rising out of the sea under a starry night sky GIF
foobar2000
Empire Ants
Gorillaz
Plastic Beach
2:05
4:43
Animated cover of Planet Her by Doja Cat, floating through a glittering purple nebula GIF
foobar2000
Woman
Doja Cat
Planet Her
0:48
2:52
Animated cover of Higher Power by Coldplay, glowing pink glyphs shifting against deep blue GIF
foobar2000
Higher Power
Coldplay
Higher Power
2:37
3:31
language C++
platform foobar2000Windows
sdk foobar2000 SDKWIC
$ less blog/crestron.md
Crestron - A love and hate

What/who is Crestron?

Blessed are those who need not utter its name, horrified are those who must deal with its pain. Crestron is a manufacturer of control automation equipment mostly used in commercial settings, auditoriums, education, healthcare, etc.

They are a name unknown to most who do not work in the sector, yet they own essentially the entire market of AV automation, the process of “push this button, turn that screen on, push another button, change its input to x” all of that done through proprietary deals with almost all equipment manufacturers, think LG, think Sony, Samsung, etc if you know a brand of TVs, projectors or lighting used in commercial spaces, there’s a good chance Crestron has an agreement to build their protocols into the device.

What does Crestron do?

As touched on above, it allows audio visual automations and control that would otherwise be quite difficult, think a big display on a wall with a single HDMI cord, ethernet cord and a kettle plug. If you wanted to say plug your laptop into that display, you’d have to awkwardly unplug the end of the HDMI going into the old device and plug it into your laptop, that works, but also causes a cable nightmare, people ripping cables out of cable socks, trunking, etc. Instead, we want a way to plug your laptop into a laptop cable, hit a button on a little panel and boom, your laptop is now the main input for the display.

That’s where Crestron comes in, it allows you to have an ecosystem where your display is routed to a HDMI switcher (made by Crestron) which then has several inputs, all of which can be cycled between remotely, or manually.

You would then grab a controller of some kind (likely a Crestron controller) which can be programmed with all sorts of application routing for that HDMI switcher, allowing you to change the input on the switcher based on a button/touchpad press.

But it doesn’t stop there, remember I said how well integrated Crestron are with brands? you can also program logic on the devices themselves most of the time, allowing you to control power, volume, mute/unmute, brightness and a whole bunch of other display settings right from the controller. Atop of that, it allows scripting to a major extent allowing remote monitoring, calling back to logging servers, etc so that IT teams are kept in the loop about AV equipment functioning as normal.

So, what is there not to love?

Well, as it tends to go, any single time in humanity’s history where a single company has that much ownership of any specific market, you tend to get a lot of laziness on the part of that company to improve their products or do anything more than sit upon their cash cow and reap the rewards of their domination.

As it turns out, Crestron is a market leader, and because of this they sadly do not encourage the best of product direction or support.

I’ll touch on a few feedback points but I’m sure there’s more as I’m only starting my journey with Crestron equipment.

Lack of documentation

One of the most infuriating components of this company, for how well-integrated they are with vendors, they seem to lack documenting their own products, just recently I had an issue where one of our switchers needed to be logged into for configuration, the password was forgotten, I thought “fine, I’ll just go reset it” and I find no reset button whatsoever on the device, I then check the docs, no documented way to reset the product and most other products in the family had differing ways, but they mainly centred around the “setup” button on the front of the device.

So I spent a good 15 minutes refusing to believe a device with physical access cannot be reset and didn’t want to give up and call Crestron for help, so I sat with it and eventually found the answer, something that could’ve taken 30 seconds to document on the product page or manual now wasted over 15 minutes of my time trying different combinations to find the right one.

While I can’t give the exact model of the device I’m referring to, I will say that if ever you find yourself in a similar situation with a POE Crestron switcher, I’ve documented the steps I took to reset it:

Tip
  1. Pull the power (ethernet)
  2. Hold the setup button.
  3. Plug the ethernet/power back in and hold that setup button for about 15 seconds.
  4. The setup LED should flash rapidly to signify that a reset has taken place.

This documentation issue stems beyond just switchers, the amount of products and ways to interact with products & vendors they have, there’s so many gaps in that documentation that you just need to figure out through trial and error.

Very poor software experiences

I’ve seen a lot of bad UX & UI in my time, working with Microsoft products, that’s a given. But Crestron takes it to a whole new level, you have CURSED workflows in this thing, UI design from the 90s that never once saw a facelift, when it comes to the software used to program & maintain Crestron devices, they provide you with the bare minimum in functional software that is archaic by today’s standards.

I would invite you to look at the docs on how to use SIMPL by Crestron, the app used to program many of their devices, notice how the screenshots and documentation is showcasing Windows XP era graphics, that’s because that was the last time it ever had its UI touched.

I understand the term of “if it ain’t broke, don’t fix it” but there comes a point where your software falls behind modern standards by a non-zero magnitude where it should be your moral obligation to update it.

But as stated, this is what happens when you dominate the market.

So is there anything good about working with Crestron?

The build quality

The hardware for the most part is fairly reliable, it is unlikely to falter even in a rough environment, or at least that I’ve seen, they are well built pieces of kit intended to last a good decade long enterprise life cycle.

Once it is set, you can truly forget

Although it is a pain to make the initial program, debug issues and flash it, once it’s done you will never need to touch it again bar the odd firmware update on the hardware themselves, which can be done very easily over the network.

They are certainly set & forget devices intended to remain reliable and functional for their entire already well mentioned life cycles.

A summary of Crestron

Crestron as far as companies go that could easily gouge a bit more, make the product even worse or god knows what else, they’re enough of a market leader that they could pull that, but they don’t, they remain stagnant on the software side of things for sure and they need more people writing documentation, but the products aren’t all bad and they do their job very reliably.

I can say that there’s far worse software made by even Microsoft for the current day in comparison, so things could be worse, but they certainly could also be better.

Links/references

adam@looney:~$ tree ~/wiki/

WIKI

wiki /12 projects · 30 pages
Per-application docs

Documentation for each project, fed from Obsidian as markdown. Pick a page from the tree — or jump straight in:

segmentssingle-binary task & project manager · 6 pagest3-nocturneT3 Code on the stable channel, with a Segments task galaxy built in · 2 pagesshellwhyexplains which startup files control a shell session · 2 pagesnocturne-studioSelf-hosted AI music studio for reworking songs you already have · 2 pagesdropEnd-to-end encrypted file, folder and message drop whose links work mid-upload · 3 pageswatchAgent Skill that lets Claude Code, Codex and other agents watch a video · 2 pagesdesktop-control-mcpMCP server and CLI giving agents a screen, mouse and keyboard on real desktops · 2 pagesvisitor-bookRing doorbell recorder and visitor register with object detection and opt-in faces · 2 pagesreadoutCalm, readable pages for the markdown AI agents write, with what needs you pinned at the top · 3 pagesnoc-homelaba 12U rack behind a Cisco core switch, with a VPS, a storage box and a gaming workstation alongside · 3 pagesgindexerC++ music indexer that resolves cover art from track metadata · 2 pagesfoo_gifartanimated GIF album art for foobar2000 · 1 page

From anywhere on the site: man segments in the prompt lands here.

blog/crestron.md