• HDR screenshots on Windows

    tl;dr: if you’re using HDR on Windows you probably want a new screenshot tool. Bandicamera seems to do HDR reasonably well.

    I’ve got HDR10 on my Windows machine working. I like it! Everything looks normal and bright and then occasionally some very bright image comes along that’s even brighter and looks quite striking, a highlight. It’s particularly fun with photos: most photos are normal 8 bit color but a 10 bit comes along sometimes on Instagram and everything comes to life. Also your eye is a marvel, it quickly adjusts to the extra brightness so nothing looks too bright, just more dynamic.

    Anyway, making a good screenshot from Windows in HDR mode proves to be hard. The underlying problem is screenshots tend to be 8 bit PNG or JPEG, so you have to collapse the 10 bits down to 8 bits. Ordinarily those brighter 9th and 10th bits aren’t needed, you’re only screenshotting normal SDR images, so often you can just take the ordinary reference white #ffffff as the brightest white in the output #ffffff and it’ll be fine. But that doesn’t work well if there is an overbright part in the screenshot.

    Why not take 10 bit screenshots? You can, but you have to save them as an unusual new PNG format or in JPEG-XL or something. For my purposes I usually want a normal 8 bit PNG or JPG.

    Anyway, on to the tools. Here’s two test webpages I’m screenshotting: a page with only regular images on it and a page with an eye-searing HDR on it. The key thing I’m looking for here is in the SDR image the white is #ffffff, white. That’s my most important use-case. It’d be nice if the HDR

    Greenshot

    Greenshot is an old free screenshot tool that is easy to use but quite old fashioned and doesn’t seem HDR aware at all. It seems to do be doing my naive thing: assume all images are 8 bits and just sort of crush any brighter images down to white. The white background is #ffffff like I want, but then any contrast in the HDR part is blown out to white.

    Update 2026-03-31: I didn’t describe the problem with Greenshot, which is sometimes even with SDR images if you take a Chrome screenshot it makes everything brighter and wrong.

    I can’t figure out what’s going on. Sometimes it works, but if I open a second SDR tab in that Chrome window then the first tab stops working.

    There’s a solid bug report for this problem and an experimental fix. Unfortunately even with this fix enabled I’m still seeing problems.

    Windows Snipping Tool

    The built in-snipping tool can be HDR aware, the tool has an option for “HDR screenshot color corrector”.

    With color correction turned on, the good thing is the extra bright parts are brought back into the normal gamut so you can see the contrast. But now the plain white is crushed down to #e1e1e1. That’s necessary for the HDR source image, how else could you have brigher-than-white? But it is not good for a fully 8 bit SDR source image.

    With the correction turned off the HDR source ends up blown out just like on Greenshot. But weirdly the SDR source also looks wrong. The white is #ffffff in the screenshot, so great! But it’s hard to see but the snipping tool also brought up the brightness of everything else a little, it doesn’t look what is on the source screen. (Indeed you can see this happen: a tone curve is applied when the screenshot starts being taken).

    Bandicamera

    Bandicamera is new to me and claims to be an HDR-aware screenshot tool It seems to do a pretty good job.

    I like this! The SDR source comes out as a normal looking SDR image, with white at #ffffff. The HDR PNG is blown out, that’s not ideal, but it’s acceptable. I would prefer the Windows snipping tool output but at least I know what it’s doing. Ironically this is exactly what Greenshot does so arguably this is not an improvement. Note these are the ordinary 8 bit PNGs Bandicamera emits. (They don’t support HDR PNGs with cICP chunks).

    However, Bandicamp will also write out an AVIF or JXR file that has the full 10 bit screenshot in it. So I do get a second copy with full data. AVIF support is better than I realized: works in major browsers, Windows Photos is fine with it too. I’ve pasted the AVIF below into WordPress, it looks correct on my blog’s site to me.

    ShareX

    I didn’t try ShareX. I’ve never liked it, and the website doesn’t say it supports HDR. I did find this ShareX fork for HDR that may be worth a look.

    Update: I tried the ShareX fork. It does just what I want: a normal white-is-white screenshot for SDR content and a tone mapped 8 bit PNG for HDR content. It doesn’t save the HDR original like Bandicamera does. Also the “white” in the SDR is #f5f5f5, not sure what that’s about but I can live with it. I just really dislike ShareX, it’s bloated and complicated.

    KDE Spectacle (Linux)

    Update June 2026: I switched to Linux desktop! They have a fantastic screenshot tool, KDE Spectacle. It currently doesn’t support HDR screenshots. It does a good job with the HDR content on screen though, and screenshots of SDR content look correct.

  • ASUS PA32QCV firmware: use a small drive

    I noted before my new ASUS PA32QCV wasn’t updating the firmware correctly, it failed to recognize the PA32QCV.bin file in the 2025/11/14 ASUS download of MCM102. Thanks to this Reddit post I was able to update the firmware! The trick is to use a small flash drive partition. My 16GB drive failed. Reddit OP reported it working with a 1GB drive. I don’t have any such small drives myself but I did get it working with a 512MB FAT32 partition on a 16GB drive.

    There’s lots of ways to make a small FAT32 partition. I did it using Linux fdisk

    
    o        # create new DOS (MBR) partition table
    n        # new partition
    p        # primary
    1        # partition number
    <enter>  # default first sector
    +512M    # partition size
    t        # change type
    b        # W95 FAT32
    w        # write and exit
    
    

    After preparing the drive that way I copied the file over on my Windows box, then followed ASUS’ instructions for updating firmware. The docs are squirrely and wrong, depicting a different set of USB ports on the back of the monitor! It worked for me on the USB-A port on the back of the monitor (not the bottom).

    First you get an error about a “MCU firmware file”, then you get a success for “Scaler updating firmware”. Note when the update works the monitor’s OSD is broken, so you can’t open the menu or use the soft power button. I had to flip the rocker switch in back to reboot.

    Anyway, now I’ve updated the firmware. I’m still having USB port problems although at the moment the USB-A port on back is working for both that USB drive and now my Apple keyboard. No idea if it’s reliable. I still can’t get my camera to work with the USB-C ports on the back.

  • Locale fine tuning

    I finally fixed an annoyance of several years where date in Linux was printing out 12 hour time like Sun Dec 21 02:53:05 PM UTC 2025. Here’s where I landed in my .bashenv

    # locale configuration. US UTF-8 everywhere but 24 hour clocks.
    export LANG=en_US.UTF-8
    export LC_TIME=en_GB.UTF-8
    export LC_NUMERIC=en_US.UTF-8
    export LC_COLLATE=POSIX
    export LC_CTYPE=en_US.UTF-8
    # have to unset this so LC_TIME will override.
    unset LC_ALL
    
    

    The key thing here is LC_TIME. But also unsetting LC_ALL.

    I used to just set LC_ALL to en_US.UTF-8, I started doing that before UTF-8 became common. But if you do that it overrides LC_TIME so you still get 12 hour dates. Instead you have to unset LC_ALL and then set each locale thing separately. There’s twelve of them! Most systems I log into are probably already set up as en_US.UTF_8 so this doesn’t matter, but hopefully this overrides the important stuff. I haven’t tested it well, I’m going off ChatGPT’s recommendation which is suspect as always.

    LC_COLLATE=POSIX is something I’ve been doing many years, ever since Unix environments started doing more proper language-specific collation. The problem is that changed the behavior of /bin/sort which broke a lot of things, so hacking it back to a non-linguistic sorting works better for programming.

    Now I also have to hope the system generated the en_GB.UTF-8 locale.

  • Speaker noise from Qi2 charger

    Just solved a problem that was driving me crazy. My nice Presonus Eris powered speakers were making a scratchy noise, rhythmic clicking. A new problem but I’d recently changed a lot of stuff on my desktop setup so I couldn’t figure out what it was. ChatGPT led me down the garden path.

    Finally figured out the culprit is my new Belkin Qi2 phone charger. The sound gets louder the closer it is to the speakers. Over about a foot away and the sound stops. Problem solved! It all makes sense: the Qi2 has strong magnets and is also putting out a lot of power for wireless charging.

    There’s a lot of things that can cause this kind of analog circuit noise. The diagnostic that was most helpful was unplugging the audio inputs from the speakers: that verified the sound wasn’t related to my PC or the sound input. Beyond that it was just moving stuff around until the sound stopped.

    I’ve got some ferrite chokes on order. In theory you put these around the power cables near the device and it will help soak up the interference. A little skeptical that makes sense with a USB-powered device but I’ll give it a shot.

  • ASUS ProArt PA32QCV impressions

    After years of envying my Mac friends I finally got a high density monitor (aka “retina display”). It’s an ASUS 6K 31.5″ monitor, the PA32QCV, and is the first genuinely new display panel I’ve seen on the market in a long time. I bought it because it’s 218ppi, or about double the density of the usual Windows 100 ppi displays we’ve all been using before. It’s about the same density as Apple’s main desktop displays although not quite as nice as the laptop screens (which go up to about 254ppi) and nothing like a modern phone’s 450ppi. But it’s only $1300.

    Does it work? Hell yeah! I plugged in it and it looked great. Windows 11 autodetected it and set it up and is running at 200% resolution so most ordinary stuff looks fine. Some old Windows apps still don’t do high DPI right but most anything in the past few years does, it seems fine.

    I’ve been using ultrawide 34″ 3440×1440 monitors for awhile. This new monitor is 6016×3384 but at 200% that’s really 3008×1692. So a little narrower, a little taller, it’s a standard 16:9 instead of the 21:9 aspect ratio. I will miss the extra width but not a lot. I miss the curved screen a bit more, the left and right edges of the new screen are noticeably dimmer.

    One small drawback is it’s limited to 60Hz: gamers will tell you 120Hz and variable refresh is important. I like the idea of those in theory but in practice I pretty much never used it.

    It worked out of the box but I’ve run into some hassles. The main problem is my ancient NVidia 1080 can’t drive this thing with HDR at full resolution. Works fine at 3840×2160 but this old video card doesn’t have whatever magic video compression is required to push 10 bits per pixel over the DisplayPort. So I’m running at full resolution but 8 bit color for now. I’ve got a new video card on order, was about time to upgrade anyway.

    In theory this ProArt monitor has particularly correct color. I’ve got Windows color profiles loaded but I am not equipped to really evaluate color correctness or extended gamuts. Stuff looks good, yo.

    The other thing I’m about to upgrade my life with is a soundbar for the PC. Solely to reduce clutter on my desk, I’m tired of wires and speakers. There is a speaker in the PA32QCV but it sounds like shit.

    Update: I finally figured out I should turn off ClearType for the high DPI screen. ClearType is the heroic subpixel rendering hack that draws colored pixels even for white/black to exploit subpixel geometry on low DPI screens. It doesn’t help nearly as much at 218 ppi as it does at 100 ppi. And it caused some color fringing, enough that I wonder if maybe the PA32QCV doesn’t use a standard RGB subpixel layout. (I have no evidence it doesn’t, but it sure doesn’t look right.) One gotcha: most of Windows redraws running apps when you turn ClearType off and on but Chrome doesn’t, you have to relaunch it.

    Update 2: the USB ports don’t work right. The two on the bottom work but only as USB 2 ports (they are supposed to be 3.1). The three on the back don’t work at all. I can see there’s a USB 3 hub there but devices plugged in mostly don’t work. One worked once, briefly. This isn’t a deal-breaker for me but it is disappointing. Folks who are eager to use the Lightning daisy chaining may want to take note.

    Update 3: I just got a second one of these monitors and tested it with a cable to a USB-4 port on my Beelink. It seems to all be working consistently, I can get 5 Gbps on the utility USB ports at the bottom of the monitor. I went back and tested my original monitor and it is also working consistently. What tripped me up is some of the ports on the back are special and not regular USB ports. Read the other post for details.

  • Passkeys work now?

    I’ve been excited about the promise of passkeys for awhile now. But also bitterly disappointed in the reality when I tried to use them in March 2024. Shit just didn’t work.

    I’m happy to report that here at the end of 2025 passkeys seem to mostly work now. I’ve gotten to the point where I’m glad to see them. They get saved to 1Password whether I’m on desktop or my phone and they are usable again from either device. There’s a little confusion still vis-a-vis when to use them, the Chrome popup that offers to fill them comes up a little awkwardly. But it basically all works.

    I have no idea what passkey adoption is like in the wild. But I’m no longer surprised when a website offers to save one, in fact I’m pleased. I think we’ve turned a corner.

    There’s still problems. Passkeys are still confusing to civilians. Exporting passkeys from one ecosystem to another is still awkward, although there is a FIDO standard in the works.

    One thing I like is with passkeys we now have lots of factors for authenticating someone. A cookie. A typed email address or username. A password. A TOTP 2FA code. A passkey. Emailed or texted codes. Emailed or texted magic links. Websites are now being built to work with some flexible combination of those factors. That seems like a good change and might enable other forms of authentication in the future.

  • Android migration Pixel 8 → Pixel 10 Pro

    I got a new Pixel 10 Pro to replace my Pixel 8. After previous bad experiences migrating from old Pixel phones, how did it go this time? About the same, the only real improvement is that my Verizon eSIM transferred automatically.

    By far the biggest problem is many Android apps don’t migrate their state or settings. It doesn’t have to be this way, some apps do migrate successfully. I suspect many don’t bother.

    I used a cable instead of WiFi for the transfer this time. This option isn’t highly promoted but seems to be faster. I’m not sure it changed what data was transferred over though.

    Good things

    • It migrated my Verizon eSIM first thing. Previously that was something I had to do myself. Update see below about visual voicemail.
    • It migrated the credit card stored in Google Wallet. I had to enter the CVV to verify it. My Clipper card also migrated.
    • It initiated the data transfer in the background while my phone was still busy asking me to answer some setup questions.
    • The transfer mostly went seamlessly. It was a bit of a nuisance answering a bunch of questions but then I could walk away.
    • Some apps migrated seamlessly.

    Bad things

    • Many apps don’t copy their settings or data over to the new phone. See below.
    • I had to reboot to finish the setup, updating OS and enabling a bunch of stuff.
    • I had to re-enable WiFi Calling.
    • It’s not copying all my data? I did the custom route and selected everything and it’s only 66 GB. My phone is nearly full at 256GB. Some big chunk of that is the OS, and 100 GB is a copy of Wikipedia. I wish there was a way to know what was missing.
    • There’s a lot of setup questions, some of which is them trying to trick me into turning on features I’d previously deliberately turned off. Unless there’s some new feature unique to the new phone it should not be asking. Particularly offensive: an attempt to opt me in to marketing spam.
    • It turned a bunch of ad tracking stuff on without asking me. I’m sure I’d turned it off in my old phone.
    • It did not restore my custom launcher (Niagara). I had to enable it.
    • The PWA Phanpy didn’t get restored as an app on my new phone. I had to reinstall it.
    • All my F-Droid open source apps didn’t come over. Not entirely a surprise, these are sideloaded as far as Android is concerned and I can see why they wouldn’t copy over. Sure is a nuisance though.
    • Stuff looks different. Different font sizes, different color temperature.
    • I gave up trying to transfer my Paris Metro tickets. They have some elaborate thing where the ticket is stored on your phone. They have a backup plan for transferring tickets but it involves creating another account. This is most definitely a case of the software being bad, not Android’s fault (alone).
    • I had to manually import my Google Maps Timeline data from an old online backup. This is possible at least but quite confusing, I think because in general the Timeline data is stored so awkwardly.

    App migration

    The biggest problem is that most apps don’t seem to migrate. Instead of being copied they have to be re-downloaded and re-installed. Then configured again. What this means in practice is I have to manually launch and inspect every single app before I can get rid of the old phone.

    What’s particularly strange is that some apps do migrate themselves. The Paprika recipe database. Sony’s Playstation app, including my login state. It seems very hit-or-miss. Last time I looked at this I found a note from the Niagara Launcher team saying “We’re currently using Google’s Backup implementation, which is not 100% reliable…” Since then they’ve built a custom backup / restore system which mostly worked but I had to use manually. Other apps are using Google’s official implementation and it did work.

    Problems in particular:

    • It didn’t immediately copy the apps over. Instead it is reinstalling them from the Internet. Perhaps Android apps can’t reliably be copied from one device to another?
    • Apps don’t come with all the permissions I enabled before. I have to re-enable permissions in each app individually, stuff like “access files” in Solid Explorer. Some permissions do carry over, maybe just not the most sensitive ones.
    • A bunch of apps didn’t restore their settings. Some have custom backup and restore options I can do manually, like Niagara or Weawow.
    • A bunch of apps didn’t realize that I had paid for the app until I launched it and waited for some handshake to happen.

    Syncthing

    I used to use Syncthing to synchronize some data from my phone to a Unix folder. It worked but always felt a little creaky. And between Android making it harder and harder to work with the filesystem and the Syncthing project having some drama I decided not to bring it to my new phone.

    The obvious alternative is Google Drive. But a whole lot of apps don’t support storing data there, like Aegis’ backups. It’s possible to use a third party app like MetaCtrl – Autosync to sync local files to Google Drive but it comes with limitations and it annoyed me to pay $10 for what should be a system feature.

    In the end I was only using Syncthing for Aegis backups and GPSLogger logs. Aegis already backs up to Google Cloud, so that’s OK. GPSLogger has explicit Google Drive support.

    F-Droid

    F-Droid is an alternate app store for open source apps. It also lets you run some apps that violate Google policies.

    On my own phone I had four F-Droid apps: Bubble, GPSLogger, OpenTracks, and WiFi Analyzer. The only one I really care about is GPSLogger. I went ahead and re-installed F-Droid just to install GPSLogger. I may install more F-Droid apps later, some 8 of the Google Play apps I use have F-Droid versions.

    Amazingly there is no free, ad-free spirit level / bubble level app on the Play store! There are several on F-Droid, including Bubble. I just reinstalled it. It warned me that the developer is not going to comply with Android’s new signed apps policy, so this app may go away next year.

    Update: Visual Voicemail

    My Basic Visual Voicemail wasn’t working. The Phone app just showed an error message. The online advice for this is to have Verizon reprovision visual voicemail. Easier said than done, Verizon now makes you run a gauntlet of 10+ minutes of AI bullshit. I did finally get through to a support person who reset some things and had me do Reset Mobile Network Settings and reboot. It’s working now. They also upgraded me to Premium Visual Voicemail, at least for a month. It’s nice! Text transcript. Not sure it’s worth $4/mo given no one leaves voicemail anymore.

  • Aegis backups

    One nice thing about the Aegis authenticator app is it has no bullshit support for exporting all your tokens to an encrypted file and restoring from it. You can then back that up however you want and it’s even possible to use the token data with other software. The other 2FA apps I see all lock your data away.

    Aegis also will write your token data into your Android backup. When I set up my new phone recently Aegis just worked, restoring my tokens. (It worked in 2021 and 2023, too). I think you have to enable “Android cloud backups” in Settings > Backup to allow this.

    Aegis will also write a backup file anywhere you want on your Android filesystem. The problem is it’s stuck on your phone. Aegis doesn’t support storing the file in Google Drive and amazingly Android has no built-in way to say “sync this folder to Google Drive”. (You can with third party software.) I used to use Syncthing for this but am trying not to use that anymore on Android. For now I’m just writing the backup file to my phone’s Downloads folder. Not ideal, it’s stuck on the device. Although it did at least copy to my new phone on setup. Hopefully I’ll remember to copy it off once a year or something.

    There’s been some updates on the Aegis docs recently about this: see this changelist that is part of this github issue.

  • GPS Tracking for Android (2025)

    A list of some location trackers from December 2025. Mostly sourced from ChatGPT. This is for passive trackers that record where I’ve been, not focussed GPS track recorders you turn on for a hike.

    For years I’ve been recording my location and experimenting with various analyses of the data. It’s interesting knowing where I’ve been! I even built a product with my friend Brad to track and visualize. But I haven’t used it in years. Truthfully if I want to actually see where I’ve been before I use Google Timeline, as diminished as it is now.

    Anyway I’m still tracking. I use Mendhak’s GPSLogger to record things on the phone. It’s only available via the F-Droid because the Google Play store has gotten increasingly hostile to things that run all the time and track location. (Even though all the commerical spyware persists, starting with Google’s own). The other hassle is I never got clean data export. I have it writing files to the Android filesystem and syncing via SyncThing and it works but is awkward. GPSLogger has other export options.

    GnssLogger by Google is aimed at debugging location sensors. It looks very cool but is not what I need.

    GPS Time Tracker aims at helping you make a logbook, like for business travel. It’s been around for years, 100K+ download, 4.5 rating. Looks promising. There’s a paid version for 10 EUR. The docs sound like it has some significant background operation issues. And while there’s some English localization it’s not complete and it’s pretty shaky. I gave this app a quick try and decided it was not for me.

    GPS Timeline :Location History has screenshots that look a little like Google Maps timeline. It only has 500 installs and no ratings. It has ads that are a little intrusive and the UI is buggy. I didn’t see any data export option. Not for me.

    I think Mendhak’s GPS Logger may still be the tool for me.

  • Upgrading Proxmox 8.4 to 9.1

    I updated my main Proxmox server today from 8.4 to 9.1. The big change is an upgrade from Debian bookworm to trixie. And of course lots of Proxmox changes on top of that.

    This server is the one doing important work. And to make things spicy, it’s a little customized: I have it running an NFS server on the PVE host itself, with a special loop subnet for communication between the Proxmox guest systems (including NFS). I also have Tailscale installed, Proxmox has no first class support for that.

    The upgrade went fine. A little scary, as always, but no real problems. They have good docs on it and a nice pve8to9 tool for testing as you go. It’s a little bit of a manual process, I don’t love running sed commands via copy-and-paste and being told “just look at the config file changes and decide for yourself what to keep”. But at its core it’s basically just a regular Debian update and that process is well tested. I did make a rookie mistake of upgrading via ssh without a screen session but I got away with it. (The upgrade process is smart enough not to kill your active ssh session!)

    Little hiccups I encountered:

    • I had to hand-edit one apt source to get tailscale on trixie instead of bookworm.
    • I got a very confusing message from the upgrade about /etc/initramfs/post-update.d/systemd-boot being changed and which version did I want to keep. This issue is not in the Wiki (it should be) but it is discussed here. I went with “N”, keeping the old Proxmox version which just got stubbed out with This hookfile has been disabled by proxmox-boot-tool. I’m guessing its contents don’t matter as Proxmox overrides Debian’s boot setup.
    • After the install pve8to9 told me I should remove the systemd-boot package to prevent future upgrade problems. This issue is well documented on the wiki and removing it was fine in my case.

    The boot hiccups are scary. Booting in Linux is confusing, Proxmox is doing something even trickier with its own bootstrap and booting from ZFS. And if this screws up your whole system is broken in a hard-to-repair way. But I think the underlying tools are pretty robust. The pve8to9 script also seems to have enough checks and safeguards in place it works as a safety net. I think.