[{"content":"If your music is organized in folders, you already have playlists: a road-trip mix, a box set, an album someone sent you. Plex just doesn\u0026rsquo;t know about them. PlexList closes that gap with one command.\n$ plexlist create ~/Music/Road\\ Trip Found 25 audio files Matching against Plex... 25 matched, 0 not found Playlist name [Road Trip]: Done: \u0026#34;Road Trip\u0026#34; created, 25 tracks The problem Plex is great at libraries and clumsy at playlists. Building one by hand means searching for and adding tracks one at a time, even when the playlist you want already exists as a folder on disk. And because Plex keeps its own view of where files live, a folder on your laptop or NAS doesn\u0026rsquo;t map neatly onto what the server sees.\nWhat it does Folder to playlist. Point it at a folder (subfolders included) and it builds the playlist, named after the folder. Pictures and other non-audio files are skipped. Many at once. --each makes one playlist per folder, so a whole collection can be turned into playlists in a single run. M3U files. Existing .m3u playlists are imported in their original order. Sensible ordering. Albums play in disc and track order, multi-album folders go album by album, and loose files fall back to a natural filename sort. You can also choose random (repeatable with a seed), by date, by artist, or exactly as given. Safe to re-run. If the playlist already exists it can be replaced in place, so running it again keeps the playlist in sync with the folder. Script-friendly. Unattended mode, a dry run that changes nothing, JSON output, and clear exit codes for cron jobs. How it works The interesting part is matching. A file on your machine has to be found among the tracks Plex already knows about, and the paths often differ (a NAS share, a Docker volume). PlexList tries, in order: the server\u0026rsquo;s file path, then filename plus file size, then the artist, album and title tags with the track length within two seconds. When the same song is in the library twice, it picks the copy in the folder where the rest of your files matched rather than guessing.\nIf files were added recently and Plex hasn\u0026rsquo;t scanned them yet, it offers to scan just that folder and try again. The library\u0026rsquo;s track list is cached between runs, so repeat runs on a large library stay fast.\nUnder the hood it\u0026rsquo;s split in two: a core library that never prints or prompts, and a thin command-line front end on top. That keeps the logic testable (it has unit tests plus end-to-end tests against a fake Plex server) and leaves room for a graphical front end later.\nStatus An early version. The core features work end to end against a simulated Plex server; testing on real libraries is next.\n","permalink":"https://www.rowanwatson.com/projects/plexlist/","summary":"Turn a folder of music files into a Plex playlist with one command: matched against your library, sensibly ordered, and safe to re-run.","title":"PlexList"},{"content":"Most watch faces treat the time as a number. SolArc treats it as a place in the day. Around the edge, a 24-hour ring puts noon at the top and lights up the stretch from sunrise to sunset, so a glance tells you how much daylight is left before you\u0026rsquo;ve read a single digit. The current moon phase rides the ring as the \u0026ldquo;now\u0026rdquo; marker.\nWhat\u0026rsquo;s on the face The time, large and clear, with the date, day and week of the year, messages and alarms above it Sunrise and sunset times beneath, matching the ring Weather from Garmin or OpenWeatherMap: conditions with day and night icons, temperature, high and low, and chance of rain Activity: steps, calories and active minutes, each with a progress bar Health: heart rate, the latest Pulse Ox reading, and battery On touchscreen watches, pressing and holding an item opens the watch\u0026rsquo;s own screen for it: the calendar for the date, the weather app for the forecast, the heart-rate widget for heart rate, and so on.\nA face for the night At night most faces are too bright and too busy. SolArc switches to a minimal sleep face: a soft grey crescent, the time and the date, with the battery shown only when it\u0026rsquo;s running low. It turns on with Do Not Disturb or during your sleep hours, and you can choose when it appears and what colour it uses.\nBuilt for always-on screens AMOLED watches can show the face all the time, but static pixels risk burn-in. Garmin\u0026rsquo;s rules are strict: under 10% of pixels lit, and no pixel lit for more than three minutes. Shifting the layout a few pixels each minute, the usual trick, wasn\u0026rsquo;t enough here: thick digits overlapped themselves and some pixels stayed lit for over half an hour. SolArc\u0026rsquo;s always-on mode blanks every other screen row and alternates the rows each minute, so no pixel stays on two minutes running and only about 2% of the screen is lit.\nUnder the hood SolArc is written in Monkey C on Garmin\u0026rsquo;s Connect IQ platform. It shares a common core with BentoBox (settings, weather, sun and moon calculations, and icons) while each face supplies its own layout. Everything is drawn as vectors on a design grid and scaled to the screen, so the same face works on the high-resolution AMOLED fēnix 9 Pro and the memory-in-pixel fēnix 7X.\nPrivacy is simple: the face collects nothing and sends nothing anywhere. If you choose OpenWeatherMap, your approximate location and your own API key go to OpenWeatherMap only.\nStatus In private beta on the Connect IQ store for the fēnix 9 Pro (47 mm). The fēnix 7X version runs as a sideloaded build. If you\u0026rsquo;re interested in trying them before their release, contact me.\n","permalink":"https://www.rowanwatson.com/projects/solarc/","summary":"A watch face built around the day itself: a 24-hour ring traces today\u0026rsquo;s daylight from sunrise to sunset, with the moon marking the current hour.","title":"SolArc"},{"content":"A bento box works because everything has its own compartment. BentoBox applies the same idea to a watch face: the time, date and your data each sit in their own rounded tile, so the face stays tidy no matter how much you put on it. And because a bento should have something nice in it, there\u0026rsquo;s a small vector-drawn snack in the open space at the bottom: a panda onigiri by default, or maki, strawberries, tamagoyaki, edamame, or a different one each day.\nEvery tile is a choice The layout is fixed, but almost every tile\u0026rsquo;s content is a setting:\nDate strip across the top, as large as it fits, with an optional phone-connection icon Time tile with a side tile next to it holding up to three small items: messages, alarms, Pulse Ox, heart rate, battery, steps, sunrise or sunset. Set all three to none and the time widens to fill the row. Two medium tiles: weather, sunrise and sunset, heart rate with a four-hour trend, altitude and pressure, moon phase, steps with a goal ring, or battery with Body Battery. Weather can also be split across both tiles so every number stays readable. A small tile for one quick reading: heart rate, Pulse Ox, rain chance, Body Battery, stress, floors and more Two bottom tiles for rings and bars: steps, calories and weekly active minutes, Body Battery and stress, or a seven-day step history Colours are hand-picked rather than taken from a generic palette: a background (black, navy, cedar, plum, forest or slate), a tile colour, and a tile edge, each set separately. The shades are dark on purpose, so they look rich on AMOLED screens without lighting up too many pixels.\nOn the fēnix 7X, a memory-in-pixel screen The sleep face: crescent, time, date, battery Touch, sleep and always-on On touchscreen watches, pressing and holding a tile opens the watch\u0026rsquo;s own screen for whatever that tile shows: the calendar from the date, the heart-rate widget from heart rate, and so on. A tile showing two things opens the one under your finger.\nAt night BentoBox borrows SolArc\u0026rsquo;s minimal sleep face: a crescent, \u0026ldquo;SLEEP\u0026rdquo; or \u0026ldquo;DO NOT DISTURB\u0026rdquo;, the time, the date and, when it\u0026rsquo;s low, the battery, all in one soft grey. In always-on mode it shows just the time and date, with every other screen row blanked and alternated each minute so no pixel stays lit long enough to risk burn-in. That keeps about 2.6% of the screen lit.\nUnder the hood BentoBox is written in Monkey C for Garmin\u0026rsquo;s Connect IQ and shares its core (settings, weather, sun and moon calculations, and icons) with SolArc. Everything is drawn as vectors on a design grid and scaled to the screen, from the 454-pixel AMOLED fēnix 9 Pro to the 280-pixel fēnix 7X. The settings screens and their defaults are generated from a single script, so adding a new tile option means changing it in one place.\nStatus Working on the fēnix 9 Pro and fēnix 7X as a sideloaded face. Not yet in the Connect IQ store. If you\u0026rsquo;re interested in trying them before their release, contact me.\n","permalink":"https://www.rowanwatson.com/projects/bentobox/","summary":"A watch face laid out like a bento box: neat rounded tiles, each one yours to fill, with a little vector-drawn snack in the corner.","title":"BentoBox"},{"content":"Webclock turns a Raspberry Pi and a 10-inch touchscreen into a clock you can read from across the room, with the weather close at hand. It runs full-screen in a browser in kiosk mode, so there\u0026rsquo;s nothing to install beyond a web page.\nWhat it shows A full-width clock with rolling digits, sized for reading from the other side of the room Current conditions: temperature, conditions, the date, and a sunrise-to-sunset bar A one-line heads-up pulled from the forecast, such as \u0026ldquo;Rain starting around 3:20 PM\u0026rdquo; or \u0026ldquo;Gusts up to 45 mph around 5 PM\u0026rdquo; The five-day forecast, one tap away. It closes on another tap or after 30 seconds. Tap anywhere and the five-day forecast slides in, with the chance of rain where it matters.\nWeather alerts that get your attention Official National Weather Service watches, warnings and advisories appear on the clock and scale with how serious they are: an amber chip for an advisory, an amber glow around the edge for a watch, a red banner for a warning, and a pulsing red banner for something extreme like a tornado warning. Tap an alert for the details. Alerts are checked every three minutes and disappear when they expire. It\u0026rsquo;s a passive display, not a replacement for emergency alerts on your phone.\nMade for living with A clock runs all day, every day, so the details matter:\nNight mode. Colours turn softer and warmer overnight, and the screen\u0026rsquo;s backlight is dimmed in hardware on a schedule to match. Burn-in protection. The whole layout shifts slowly by a few pixels so nothing stays in one place. Graceful when offline. If the network drops, it keeps showing the last good weather with an \u0026ldquo;updated X minutes ago\u0026rdquo; note instead of going blank. How it\u0026rsquo;s built Plain HTML, CSS and JavaScript, with no build step and no dependencies. Weather comes from Open-Meteo and alerts from the National Weather Service API; neither needs an API key. Location, units, 12- or 24-hour time, night hours and alert thresholds all live in one settings file. Updating the clock is a git pull on the Pi.\nSome layout ideas came from the open-source round-weather-display project.\n","permalink":"https://www.rowanwatson.com/projects/webclock/","summary":"A wall clock that also knows the weather: big rolling digits, the forecast at a tap, and official weather alerts on a 10-inch Raspberry Pi screen.","title":"Webclock"},{"content":"I\u0026rsquo;m Rowan Watson: a technologist, entrepreneur, and problem solver who cares about leading people well.\nI\u0026rsquo;ve spent my career at the intersection of technology and the teams that build and run it. Along the way I studied leadership and organizational management formally.\nOutside of work I build things: apps, tools, and side projects that scratch my own itch. You\u0026rsquo;ll find them under Projects.\nGet in touch: LinkedIn · website@rowanwatson.com\n","permalink":"https://www.rowanwatson.com/about/","summary":"\u003cp\u003eI\u0026rsquo;m Rowan Watson: a technologist, entrepreneur, and problem solver who cares about leading people well.\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;ve spent my career at the intersection of technology and the teams that build and run it. Along the way I studied leadership and organizational management formally.\u003c/p\u003e\n\u003cp\u003eOutside of work I build things: apps, tools, and side projects that scratch my own itch. You\u0026rsquo;ll find them under \u003ca href=\"/projects/\"\u003eProjects\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eGet in touch:\u003c/strong\u003e \u003ca href=\"https://www.linkedin.com/in/therowanwatson\"\u003eLinkedIn\u003c/a\u003e · \u003ca href=\"mailto:website@rowanwatson.com\"\u003ewebsite@rowanwatson.com\u003c/a\u003e\u003c/p\u003e","title":"About"},{"content":"","permalink":"https://www.rowanwatson.com/contact/","summary":"","title":"Contact"}]