Affinity by Canva Accessible PDF Output Test

The Affinity by Canva splash screen over an Adobe Acrobat window with an open PDF document.

With the release of Affinity by Canva, I was curious how they were doing on supporting creating accessible PDF output. A very quick cursory initial check showed some hopeful signs, but I wanted to take a more detailed look, so I’ve put together a brief test document to check some of the more common document features. This isn’t at all meant to be all-encompassing and comprehensive; it’s just what popped to mind as I was experimenting. My hope is to occasionally update this as I think of more test cases (or have more test cases suggested to me) and as Affinity is updated.

More details are in the document itself, but in brief, I set up several test cases using various Affinity features, exported to tagged PDF, and checked the PDF in Acrobat to see how things looked.

If you’d like to play along at home, you can download the source .af document (5 MB .zip) and the exported .pdf document (721 KB .pdf) to review yourself and otherwise do with as you wish under a Creative Commons BY 4.0 license.

The executive summary TL;DR: Canva/Affinity is making improvements, but Affinity in its current state is definitely not ready to be a replacement for Adobe InDesign. If you’re an Affinity die-hard and have the time and resources to do remediation work in Acrobat Pro or using a tool like CommonLook, you could certainly go that route, but don’t expect to be able to export an accessible PDF from Affinity just yet.

I do want to be clear that none of this is to say that Affinity is “bad” or shouldn’t be used; on the contrary, I’m looking forward to using it as much as I can (for experimentation and any print-only work I do). This is all intended to encourage Canva/Affinity to continue working on this aspect of their software.

Test Case 1: Paragraphs

Result: Fail. Any paragraph that is more than one line gets one P tag for every line, rather than one P tag for the entire paragraph. In addition, if there are any deviations from the base style (using character styles, manual formatting, adding hyperlinks, etc.), all of those end up in their own individual P tags instead of being wrapped in Span tags inside the P tag.

Test Case 2: Headings

Result: Pass (with qualifications). When creating styles, PDF (and EPUB) export tagging can be assigned — as long as you only need P or H1 through H6; no other tags (like BlockQuote, for example) can be assigned to styles. Within that, though, text given a heading style does export with the correct tag…but once again, if the heading spans more than one line, it ends up being two H1 (or whatever level) tags rather than one.

Test Case 3: Images

Result: Pass/Fail (yes, both).

Pass: Images can be placed inline or floated; if floated, they can be anchored within text. Alt text can be assigned various ways, either manually or (in theory, I didn’t test this) automatically pulled from the image’s XMP metadata. The alt text pane also supports adding extended description and summary text, though I haven’t played with these fields yet. Alt text is correctly added to the Figure tag in the PDF.

Fail: Though the images were placed inline with the text in the document, the Figure tag was placed at the end of the content for its parent text frame rather than at the proper place within the text.

Test Case 4: Lists

Result: Fail. Lists are tagged as paragraphs, without any L or child LI, LBL, or LBODY tags.

Test Case 5: Languages

Result: Fail. I could not find any way to designate a base language for the document as a whole. Character and paragraph styles can be given a language setting, but (in addition to the character style being tagged as a new P rather than a Span within the paragraph) the language is not set in the tag properties.

Test Case 6: Tables

Result: Fail. Simple tables can be added and their visual presentation can be adjusted, but I found no way to set header rows or columns. Tables also cannot be given alt text (at least, not with the same Tags pane used to add alt text to images).

The table was not tagged with any Table or child TR, TH, or TD tags, just a lot of P tags. In addition, though the table was inline with text later in the document, it was placed as a Sect at nearly the top of the document, the first tags underneath the opening H1 tags.

Test Case 7: Table of Contents

Result: Fail. Affinity can automatically generate a table of contents from the header styles used in a document. However, the exported PDF does not use any TOC or associated child tags; every line of the table of contents is a P tag followed by a Link tag that contains two Link - OBJR tags, one for the text of the item and one for the page number.

Test Case 8: Reading Order

Result: Pass (with qualifications). Affinity has a Reading Order panel which allows you to rearrange items, group items together into articles, and toggle items off and on, and this does properly affect the tags in the exported PDF. In an earlier test document (not publicly distributable), I was easily able to put all of the objects in their correct reading order. However, in this test document, the images (which are placed inline with the text, and therefore within a text frame) don’t appear in the reading order panel, and as noted above, don’t have their Figure tags placed in the correct location.

Test Case 9: Master Pages

Result: Pass. My test document had master pages set up with footer text; this text was properly excluded (artifacted) in the PDF.

Test Case 10: There is no test ten…

…because I ran out of ideas right then. But more can be added! When I have time, I want to add more objects to play with the reading order pane more, explore Affinity’s footnotes/index/reference support (which at this point I don’t expect to be tagged correctly, but maybe someday), and there are probably plenty of other things that more experienced accessibility and/or document creation professionals might think of.

Conclusion

As noted in the TL;DR up top, Affinity is a long way away from being able to replace InDesign when it comes to creating accessible PDFs.

That said — they’re working on it! This is more support than the last version of Affinity had, and there are more signs here and there that more may be in development. For example, while I was looking for a way to specify a base document language, I checked the File > Document Metadata option, and it’s a series of checkboxes and fields for specifying exactly which accessibility features a document supports, its conformance level, a certifier’s name and credentials, and so on. (The actual basic document metadata, including title, author, copyright info, etc., can be set with the Window > References > Fields pane, and does get properly added to the exported PDF.)

While there’s certainly work to be done, I’m encouraged to see the features that have been added so far, and as noted above, want to encourage Affinity to continue working on this aspect of the app. I would love to be able to finally drop InDesign (as I dropped Photoshop and Illustrator years ago) and move entirely over to Affinity (well…entirely aside from Acrobat…).


Addendum: ePub output

Out of curiosity and a question on Mastodon (that I don’t actually think was directed at me, but that’s okay), I exported this test document to ePub format, using both the “fixed layout” and “reflowable” options. I then checked each file in both Thorium Reader and Apple’s Books app, and ran them through the Ace by DAISY ePub accessibility checker.

It should be noted that I did not change anything about the file for this test, and I created the document with PDF in mind, not ePub, so this may affect the results.

I’m not as experienced in checking ePub files, but a few notes:

Ace by DAISY reported errors with both documents. The fixed layout version had eight errors, three serious and five moderate; the reflowable version had 22 errors, one critical, 16 serious, and five moderate. The ePubs and Ace by DAISY reports may be downloaded for you to review. All downloadable files are .zip files that you’ll need to decompress — I know that ePubs are already zipped, but my WordPress configuration wouldn’t allow me to upload the .epub file.

The fixed layout version is much larger than the reflowable. I think that’s because the reflowable version seems to have scaled and compressed the photos in the document, while the fixed layout version left them at their original sizes. This may have been an export setting in Affinity that I didn’t adjust.

Neither document has bookmarks automatically defined.

The fixed layout version in Thorium using Thorium’s built-in reader reads the images outside of their placement in the text, instead speaking them at the beginning of the second page. The table on page three also gets read at the beginning of the third page. This does not happen with the reflowable version; images are read in their correct locations.

There’s an odd black square graphic that appears at the end of the Test 3 section in the reflowable version that is not present in the original Affinity file. I have no idea where this image is coming from.

Using Apple Books’s built-in reader, the reflowable version seemed to read properly, but the fixed layout version was missing large chunks of text.

With the aforementioned caveat that this document wasn’t created with ePub in mind, which may be affecting things, my first impression is that, as with PDF tagging, Affinity has some work to do with creating accessible ePub files. This is definitely an app that currently is much more aimed at visual presentation (whether print or electronic), with accessibility being an afterthought. Once again, I hope this improves over time as future versions are released.

Initial Thoughts on Affinity by Canva

I’ve been an Affinity Photo/Designer/Publisher user since sometime before 2019 (the first mention I can find here), and have recommended them to a lot of people as a less expensive but (nearly) equivalent alternative to Adobe’s Photoshop/Illustrator/InDesign suite of apps. Last year Affinity was acquired by Canva, which did not thrill me (I’m not a fan of Canva, as accessibility has never seemed to be a high priority for them, and remediating PDFs created by Canva users is an ongoing exercise in frustration), but at the time they pledged to uphold Affinity’s pricing and quality. All we could do at that point was wait to see what happened.

A few weeks ago, Affinity closed their forums, opened a Discord server, removed the ability to purchase the current versions of the Affinity suite of apps, and started posting vague “something big is coming” posts to their social media channels and email lists. Not surprisingly, this did not go over well with much of the existing user base, and we’ve had three weeks of FUD (fear, uncertainty, and doubt), with a lot of people (including me) expecting that Canva would taking Affinity down the road of enshittification.

Yesterday was the big announcement, and…

The Affinity by Canva startup splash screen.

…as it turns out, it looks to me at first blush that it doesn’t suck. The short version:

  1. Affinity Photo, Designer, and Publisher have been deprecated, all replaced with a single unified application called Affinity by Canva.
    1. The existing versions of the old Affinity suite (version 2.6.5) will continue to work, so existing users can continue to use those if they don’t want to update. In theory, these will work indefinitely; in practice, that depends on how long Canva keeps the registration servers active and when Apple releases a macOS update that breaks the apps in some way. Hopefully, neither of those things happens for quite some time (and if Canva ever does decide to retire the registration servers, I’d really hope that they’d at least be kind enough to issue a final update for the apps that removes the registration check; I don’t expect it, but it would be the best possible way to formally “end of life” support for these apps).
  2. Affinity by Canva is free.
    1. You do need to sign in with a Canva account. But you had to sign in to Affinity with Serif account, and Canva now owns Serif, so this isn’t exactly a big surprise for me.
  3. The upsell is that if you want to use AI features, you have to pony up for a paid Canva Pro account. Assumedly, they figure there are enough people on the AI bandwagon that this, in combination with Canva’s coffers, will be enough to subsidize the app for all the people who don’t want or need the AI features.
    1. “AI features” is a little vague, but it seems to cover both generative AI and machine learning tools.

    2. Affinity’s new “Machine Learning Models” preferences section has four optional installs: Segmentation (“allows Photo to create precise, detailed pixel selections”), Depth Estimation (“allows Photo to build a depth map from pixel layers or placed images”), Colorization (“used to restore realistic colors from a black and white pixel layer”), and Super Resolution (“allows pixel layers to be scaled up in size without loss of quality”). Of these, Segmentation is the only one that currently is installable without a Canva Pro account; the other three options are locked. The preferences dialog does have a note that “all machine learning operations in Affinity Photo are performed ‘on-device’ — so no data leaves your device at any time”.

    3. The Canva AI Integrations page on the new Affinity site indicates that available AI tools also include generative features such as automatically expanding the edges of an image and text-to-image generation (interestingly, this includes both pixel and vector objects).

    4. In the FAQs at the bottom of the integrations promo page, Canva says that Affinity content is not used to train AI. “In Affinity, your content is stored locally on your device and we don’t have access to it. If you choose to upload or export content to Canva, you remain in control of whether it can be used to train AI features — you can review and update your privacy preferences any time in your Canva settings.”

      1. If you, like me, are not a fan of generative AI, I do recommend checking your Canva account settings and disabling everything you can (I’ve done this myself). The relevant settings are under “Personal Privacy” (I disabled everything) and “AI Personalization”.
    5. I actually feel like this is an acceptable approach. Since I’m no fan of generative AI, I can simply not sign up for a Canva Pro account, disable the “Canva AI” button in Affinity’s top button bar, and not worry about it; people who do want to use it can pay the money to do so. I do wish there was a clearer distinction between generative AI and on-device machine learning tools and that more of the on-device machine learning tools were available without being locked behind the paywall; that said, the one paywalled feature I’d be most likely to occasionally want to use is the Super Resolution upscaling, and I can do that in an external app on the occasional instances where I need it.

So at this point, I’m feeling mostly okay with the changes. There are still some reservations, of course.

I’m not entirely sold on the “single app” approach. Generally, a “one stop shop” approach tends to mean that a program is okay at doing a lot of things instead of being really good at doing one thing, and it would be a shame if this change meant reduced functionality. That said, Affinity has said that this was their original vision, and they’ve long had an early version of this in their existing apps, with top-bar buttons in each app that would switch you into an embedded “light” version of the other apps for specific tasks, so it does feel like a pretty natural evolution.

A lot of this does depend on how much trust you put in Canva. Of course, that goes with any customer/app/developer relationship. I have my skepticism, but I’m also going to recognize that at least right now, Canva does seem to be holding to the promises that they made when they acquired Serif/Affinity.

Time will tell how well Canva actually holds to their promises of continuing to provide a free illustration, design, and publishing app that’s powerful enough to compete with three of Adobe’s major apps. Right now, I’m landing…maybe not on “cautiously optimistic”, but at least somewhere in “cautiously hopeful”.

Finally, one very promising thing I’ve already found. While I haven’t done any in-depth experimenting yet, I did take a peek at the new Typography section, and styles can now define PDF export tags! The selection of available tags to choose from is currently somewhat limited (just P and H1 through H6), but the option is there. I created a quick sample document, chose the Export: PDF (digital – high quality) option, and there is a “Tagged” option that is enabled by default for this export setting (it’s also enabled by default for the PDF (digital – small size) and PDF (for export) options; the PDF (for print), PDF (press ready), PDF (flatten), PDF/X-1a:2003, PDF/X-3:2003, and PDF/X-4 options all default to having the “Tagged” option disabled).

When I exported the PDF (38 KB PDF) and checked it in Acrobat, the good news is that the heading and paragraph tags exist! The less-good news is that paragraphs that go over multiple lines are tagged with one P tag per line, instead of one P tag per paragraph.

So accessible output support is a bit of a mixed bag right now (only a few tags available, imperfect tagging on export), but it’s at least a good improvement over the prior versions. Here’s the current help page on creating accessible PDFs, and hopefully this is a promising sign of more to come.

Weekly Notes: October 20–26, 2025

  • ♿️ Another quite busy week at work. Tuesday through Thursday mornings were the WAPED fall meeting; on various days this afternoon there were meetings with artists who are working with some of our visually disabled students on some tactile public art for the soon-to-open light rail station near the college, two training sessions on creating screen-reader accessible math equations in documents, and two public information sessions with a representative from the Secretary of State about Washington State’s accessible voting options.

  • Sunday afternoon, we went down to Federal Way to see the Grand Kyiv Ballet’s Snow White. It was cute! It was definitely solidly in the realm of “how close to Disney can we get without getting sued” territory, and it had more endings than Lord of the Rings (the audience was actually getting confused), but it was still an enjoyable performance and made for a good afternoon outing.

Reading

Finished two books this week: Matt Dinniman’s Dungeon Crawler Carl, and a Star Trek manga.

Listening

I indulged myself with a silly idea I had a few weeks ago, and created a 40-minute mix of mashups based on Depeche Mode’s “Just Can’t Get Enough”. Definitely a mix that will either really work for someone or drive them absolutely up the wall.

I also picked up two new albums on Saturday that I’ll start listening to into this coming week:

  • Synthetic. Facts. Eight, the latest in a compilation series from Infacted Recordings.

  • Astral Elevator, the first album from The Tear Garden (Edward Ka-Spel (The Legendary Pink Dots) and cEvin Key (Skinny Puppy)) since 2017. I was first introduced to The Tear Garden (and Legendary Pink Dots, for that matter) in the mid-90s, and I’m glad they’re still working on this project.

Linking

  • Pat Saperstein in Variety: Heaven 17 Plans New Version of ‘Fascist Groove Thang’ Calling Out Trump Instead of Reagan: ‘It’s Not Going to Get Any Less Relevant, Is It?’: “…the band plans to release an updated version of the song, which has become an unofficial anthem of the resistance to Donald Trump. At a recent protest sign-making party in Los Angeles’ Echo Park, it was part of the anti-fascist playlist that got neighborhood activists dancing. A few days later, the fast-paced, incredibly catchy ’80s standard could be heard blasting from speakers at the Downtown Los Angeles No Kings protest.”

  • Lisa Bonos at The Washington Post: Meet the people who dare to say no to artificial intelligence: “Some tech workers told The Washington Post they try to use AI chatbots as little as possible during the workday, citing concerns about data privacy, accuracy and keeping their skills sharp. Other people are staging smaller acts of resistance, by opting out of automated transcription tools at medical appointments, turning off Google’s chatbot-style search results or disabling AI features on their iPhones.”

  • Peter Wolinski at Tom’s Guide: How to disable Copilot in Windows 11: “Disabling Copilot in Windows 11 is a straightforward process, and this guide will walk you through the steps to do so.”

  • Mauro Huculak at Pureinfotech: 4 Quick ways to permanently disable Windows Recall on Windows 11: “Recall is designed to function as a photographic memory, powered by a local AI model, making it easier to locate past activities, including documents, websites, messages, images, and apps. […] Recall automatically takes snapshots of your screen at regular intervals (around every five seconds), which can capture sensitive information, such as private conversations, financial details, or personal images.”

  • Chanda Prescod-Weinstein: Knowledge is Worth Your Time: “What matters in your courses, even in many cases within your major, isn’t the topic. You’ll probably forget most of what you learn, especially if you don’t end up using it repeatedly in future. What you will always have, though, is the mind that taking the courses made.”

  • Anil Dash: ChatGPT’s Atlas: The Browser That’s Anti-Web: “OpenAI, the company behind ChatGPT, released their own browser called Atlas, and it actually is something new: the first browser that actively fights against the web. Let’s talk about what that means, and what dangers there are from an anti-web browser made by an AI company — one that probably needs a warning label when you install it.”

  • Margherita Bassi at Smithsonian Magazine: See This Year’s Hilarious Finalists From the Nikon Comedy Wildlife Awards, From Gossiping Leopards to Breakdancing Foxes: “Founded in 2015 by two professional photographers, the awards merge skillful wildlife photography with the “positive power” of humor to promote wildlife and habitat conservation, per a statement. The competition is free and open to novices, amateurs and professionals.”

  • Ella Glover at The Guardian: ‘I get to do whatever I want in the moment’: why more people are going to gigs, festivals and clubs alone: “Some research suggests that the average age of festivalgoers is increasing, and older people are still going out frequently, which may account for the increased number of people attending solo….”

macOS Tahoe Music (app) breaks shuffle

Sigh. Shuffle by Album seems to be broken in Apple Music (the app, not the service; what is it with companies giving their apps and services identical generic names?) under macOS 26 Tahoe.

After starting Music, if I go to my library’s Album view (that is, songs that are downloaded and stored locally), the shuffle icon in the new control bar appears to be glowing (with a bad effectThe left side of the audio control bar in Apple's Music player under Tahoe, with the shuffle icon highlighted in red with a very harsh, hard-edged glow with no fade. It looks really ugly.), but if you check options, through the menu bar, Controls > Shuffle shows “Off” and by “Albums”. If I switch that to “On”, I get about a two-second SPoD (Spinning Pizza of Death) — which seems really odd for an audio player on an M4 Mac Mini — before it responds again.

Pre-Tahoe, I could either hit “play” or double-click the “Albums” item in the Music app sidebar, and Music would randomly choose an album, play it through, then randomly play another album.

Now, If I hit the “play” control, Music starts playing the first album in however the album list is sorted; I usually keep my Album display sorted by year, so it always starts playing the oldest item in my collection (Victrola 88049, Enrico Caruso performing “Ideale (My Ideal!)”). If I double-click the “Albums” item in the sidebar, Music starts playing the first song of the first album sorted alphabetically by artist (for me, that’s “Take on Me” off of A-Ha’s Hunting High and Low). Either way, though the shuffle icon is still glowing, checking the menu bar’s Controls > Shuffle shows that that’s now set back to “Off”.

If I let it play as-is, it just plays through the album. If I set Shuffle back to “on”, then it start shuffling by song, not by album. Well…sometimes. Right now, I can’t get it to shuffle at all, even though Shuffle is turned on, both in the menu bar and with the glowing shuffle icon in the control bar.

Revised original line: Shuffle is either partially broken (only shuffling by song, not by album) or entirely (not shuffling at all), possibly randomly choosing (…shuffling?…) between the two options.

I know Apple’s gone all-in on their streaming Music service, but I really wish they still had a few people assigned to making sure they had a decent basic audio player. Music just gets worse and worse for those of us who have extensive non-streaming collections.

Environment:

  • M4 mini (2024, 16 GB)
  • macOS Tahoe 26.0.1
  • Music 1.6.0.151
  • 41,596 tracks on 4,044 albums (136.4 days, 317.43 GB)

Related question:

Are there any third-party audio players for macOS that write back metadata to the macOS Music library?

The biggest reason that I’ve stuck with Music is that I use its smart playlists to regularly update the playlists that live on my iPhone, so they’re regularly updated and the songs on them rotate around. (My regularly used playlists all have some variation of “exclude if listened to in the last two months” as one of their rules.)

As far as I know from past digging, no third-party audio players write metadata (esp. when last played) back to the Music library, so the smart playlists wouldn’t work anymore.

If there’s a good, functional audio player, especially if aimed at people who actually value listening to owned music rather than streamed, that plays nicely with the Music library metadata, I’d dearly love to know about it.

Weekly Notes: September 22–28, 2025

  • ♿️ We made it through the first week of fall quarter! It was a busy week, with a fair amount of tech troubleshooting for faculty, staff, and students, but on the whole, it went pretty well.

  • 🚀 The week was extra busy with a couple nights of evening Zoom calls, but the end result of one is that after fourteen years, I have finally turned over the social media manager position for Norwescon to someone else! I’m still on the team as an assistant/consultant/graphics person, but I’m not in charge anymore, which is a welcome step. (I didn’t mind doing it, but almost a decade and a half is a long time to be the primary online “voice” of the con, and I’m happy to let someone else with other ideas take over.)

  • 🎻 Today we went into Seattle to see Danny Elfman’s Music From the Films of Tim Burton with the Seattle Symphony. Music from 13 of the 17 films that Burton and Elfman have collaborated on, with a full symphony plus choir, and with a screen showing clips from the films interspersed with images of Burton’s character design sketches. Really well done, and the music was great. I was particularly pleasantly surprised with the section from Big Fish — I’ve seen it, but not anytime recently, and didn’t have any memory of the score, and it’s very different than Elfman’s other scores. I didn’t realize Elfman knew that there were that many major chords! ;)

📸 Photos

The Seattle Symphony on stage, with blue and purple lights on the walls, and a screen displaying a Tim Burton sketch of two bare trees on a checkerboard landscape and the text, 'Danny Elfman's music from the films of Tim Burton'.
The show about to start.
Looking south down the Seattle waterfront from the roof of the new aquarium with the skyline on the left and the Seattle ferris wheel on the right, with people strolling along the sidewalk by the old aquarium building.
Before going to the symphony, we went down to look at the newly remodeled Seattle waterfront. It’s really nice!
Panoramic shot of the Olympic mountains across Puget Sound, half-shrouded in clouds, under a mostly cloudly sky, with a ferry on the water on the far left of the image.
The Olympic mountains were really pretty this morning.
A section of brick wall and utility pipe barely visible behind hundreds of pieces of used, chewed gum, some stuck to the wall in blobs, some stretched to hang off of the pipes. It's actually more gross than it sounds.
It had been a while since we’d gone by the gum wall. It’s as appealing as ever! (My wife glanced up as I was working on this photo, and commented, “That’s disgusting. I looked up just in time to see my husband looking at dirty pictures on his computer…”.)

📚 Reading

🔗 Linking

  • Colin Nissan at McSweeney’s, with the perennial classic: It’s Decorative Gourd Season, Motherfuckers: “When my guests come over, it’s gonna be like BLAMMO! Check out my shellacked decorative vegetables, assholes. Guess what season it is—fucking fall. There’s a nip in the air, and my house is full of mutant fucking squash.”

  • Varsha Bansal at The Guardian: How thousands of ‘overworked, underpaid’ humans train Google’s AI to seem smart: “A great deal of attention has been paid to the workers who label the data that is used to train artificial intelligence. There is, however, another corps of workers, including Sawyer, working day and night to moderate the output of AI, ensuring that chatbots’ billions of users see only safe and appropriate responses. ¶ ‘AI isn’t magic; it’s a pyramid scheme of human labor,’ said Adio Dinika, a researcher at the Distributed AI Research Institute based in Bremen, Germany. ‘These raters are the middle rung: invisible, essential and expendable.'”

Weekly Notes: September 15–21, 2025

  • ♿️ Made it through opening week at work! (This is the week before classes start, filled with staff and faculty info and training.) Day two got a little crazy for me running around making sure that captions were up and running properly, but everything worked out in the end. Tomorrow, students are back and classes start!

  • 💻 A particularly exciting part of the week was getting issued my new work laptop. My old one was a Dell something-or-other, my new one is an Apple MacBook Pro with M4 Pro, 48 GB RAM, and 1 TB drive. A very nice upgrade, prompted because I need to be able to work cross-platform for accessibility testing and document remediation, and this allows me to run Windows in a virtual environment inside the macOS. Haven’t gotten very far setting it up yet, but it’ll be very nice when it’s all set up.

📸 Photos

Spooky season decorations outside our house, incouding a skeleton, jack-o-lanterns, and several Halloween themed gnomes.
It’s spooky season! Our seasonal gnome garden gets some extra friends for the next month or so…plus, we got some fun new additions this year.
An outdoor decorative figure of three very creepy mushrooms with wide eyes, droopy noses, and wide evil sharp-toothed smiles, with tombstones and bones at their bases.
This great bunch of evil mushrooms has been creeping out my wife for the past few weeks since we found it and tossed it on a shelf inside until it was time to set it out front.
An outdoor figurine of a snail with a green head, blue foot, and purple shell, all stitched up and with metal plugs like Frankenstein's monster.
We definitely couldn’t resist this frankensnail (Frankensnail’s monster?) when we saw it.
Me holding a paper model of a Seattle Link light rail train car, while wearing a black cap, rainbow shirt, and black face mask.
We’re less than three months away from the new Link light rail station across the street opening up, so we got paper craft train cars to assemble during our first day of all-staff events.

🎧 Listening

  • Nine Inch Nails’ Tron: Ares soundtrack just landed. I’ve only given it a quick run-through so far, but my first impressions are that it works really well as a follow up to Daft Punk’s Tron: Legacy soundtrack, and has some really strong new NIN tracks, but I’m not yet entirely sure what I think of it as a NIN album.

🔗 Linking

There’s a bit of a theme to this week’s links that will be quite obvious….

Weekly Notes: September 8–14, 2025

  • 💉 Last weekend we tried to get our Covid boosters at our local Walgreens and were turned down, even though Washington’s governor had put out a directive a few days before stating that everyone in Washington over six months old was eligible. So on Monday, we tried again at our local Safeway, which had no problems at all with giving us a Flu/Covid vaccine cocktail, so we’ve now switched pharmacies from Walgreens to Safeway.

  • Work was pretty uneventful, though this was the last week of the summer break; this coming week is our “opening week” with lots of staff and faculty welcomes and training workshops, and the week after that, students are back on campus. Back into the school year!

📸 Photos

Me with the left sleeve of my t-shirt rolled up to reveal two band-aids that have been written on with black permanent marker; the top says "F U" and the bottom says "R F K".
I decorated my bandaids after getting my vaccines, just because I could.
Three decorative 'skeleton' creatures on my office desk. One is an elephant (complete with solid bone ears and trunk bones), one an octopus (with large skull and tentacle bones), and one a snail (with skull shell, solid antennae, and a bony ribcage-like structure for the foot that makes it look almost centipedal).
It’s spooky season, so it’s time for my small collection of ridiculously anatomically improbable skeletons to come back out onto my desk at work. The elephant is the newest addition.
A flock of about 40 ducks standing across a bike path.
The ducks on our weekend walking trail were out in force on Saturday morning.

📝 Writing

📚 Reading

I finished two books this week; one was even non-fiction! Though as it was a behind-the-scenes look at Star Trek III, it was still solidly within my usual wheelhouse.

And I’ve just started Lois McMaster Bujold’s The Curse of Chalion, as a precursor to moving forward on my Hugo best novel reading project; this one isn’t a Hugo winner, but its immediate sequel is. With how much I enjoyed Bujold’s Vorkosigan saga, which though sci-fi, combined two genres that aren’t my usual thing (military SF and romance), I’m curious what I’ll think of her in the fantasy realm, which is also secondary to SF in my interests.

📺 Watching

Two movies this week:

  • The Phoenician Scheme (⭐️⭐️⭐️): I am absolutely a sucker for Anderson’s quirky hyper-stylized films.

  • The Thursday Murder Club (⭐️⭐️⭐️): Take some of today’s most known British actors and let ‘em run around having fun in a murder mystery. Quite enjoyable.

🔗 Linking

  • Erin Reed: We Must Not Posthumously Sanitize Charlie Kirk’s Hateful Life: “Charlie Kirk was not “practicing politics the right way.” His work should never “be continued.” He embodied everything corrosive about American politics today. […] His model of politics was not dialogue, but trolling: hopping from campus to campus to bait students, churn out sound bites, and spread hate. And his rhetoric was not debate—it was violent, dehumanizing, and designed to put targets on people’s backs.”

  • Elizabeth Spiers at The Nation: Charlie Kirk’s Legacy Deserves No Mourning: “There is no requirement to take part in this whitewashing campaign, and refusing to join in doesn’t make anyone a bad person. It’s a choice to write an obituary that begins ‘Joseph Goebbels was a gifted marketer and loving father to six children.'”

  • Identity 4: Racintosh Plus: Really impressive work putting a Mac Plus into a one-unit rack mount casing.

Google Docs Adds PDF Accessibility Tagging

I don’t know exactly when this happened (my best guess is maybe sometime in April, based on this YouTube video; if you watch it, be aware that the output seems to have improved since it was made), but at some point in the not-too-distant past, Google Docs has started including accessibility tags in downloaded PDFs. And while not perfect, they don’t suck!

update: Looks like this started rolling out in December 2024, earlier than I realized. Thanks to Curtis Wilcox for pointing out the announcement link.

Quick Background

For PDFs to be compatible with assistive technology and readable by people with various disabilities, including but not at all limited to visually disabled people who use screen readers like VoiceOver, JAWS, NVDA, and ORCA, PDFs must include accessibility tags. These are not visible to most users, but are embedded in the “behind the scenes” document information, and define the various parts of the document. Assistive technology, rather than having to try to interpret the visual presentation of a PDF, is able to read the accessibility tags and use those to voice the document, assist with navigation, and other features.

However, until recently, Google Docs has not included this information when exporting a PDF using the File > Download > PDF Document (.pdf) option. PDFs downloaded from Google Docs, even if designed with accessibility features such as headings, alt text on images, and so on, were exported in an inaccessible format (as if they had been created with a “print to PDF” function). The only way around this was to either use other software to tag the PDF or to export the document as a Microsoft Word .docx file and export to PDF from Word.

But that’s no longer the case! I first realized this a couple months ago when I was sent a PDF generated from Google Docs and was surprised to see tags already there. I’ve recently had the chance to dig into this a little bit more, and I’m rather pleasantly surprised by what I’m seeing. It’s not perfect, but it doesn’t suck.

Important note

I’m not a PDF expert! I’ve been working in the digital accessibility space for a bit over three years now, but I’m learning more stuff all the time, and I’m sure there’s still a lot I don’t know. There are likely other people in this space who could dig into this a lot more comprehensively than I can, and I invite them to do so (heck, that’s part of why I’m making this post). But I’m also not a total neophyte, and given how little information on this change I could find out there, I figured I’d put what knowledge I do have to some use.

Testing process

Very simple, quick-and-dirty: I created a test Google Doc from scratch, making sure to include the basics (headings, descriptive links, images with alt text) and some more advanced bits (horizontal rules, a table, a multi-column section, an equation, a drawing, and a chart). I then downloaded that document as a PDF and dug into the accessibility tags to see what I found. As I reviewed the tags, I updated the document with my findings, and downloaded a new version of the PDF with my findings included (338 KB .pdf).

Acrobat Pro displaying a document titled 'this is an accessibility test document' with the tags pane open to the right and the first line of the document selected and highlighted with a purple box.

Findings

More details are in the PDF, but in brief:

  • Paragraphs are tagged correctly as <P>.
  • Heading are tagged correctly as <H1> (or whatever level is appropriate).
  • Links are tagged correctly as a <Link> with a <Link - OBJR> tag. Link text is wrapped in a <Span>, and the link underline ends up as a non-artifacted <Path>.
  • Images are tagged correctly as a <Figure> with alt text included. However, images on their own lines end up wrapped inside a <P> tag and are followed by a <Span> containing an empty object (likely the carriage return).
  • Lists are pretty good. If a <LI> list item includes a subsidiary list, that list is outside of the <LBody> tag, and I’m not sure if that’s correct, incorrect, or indifferent. Additionally, list markers such as bullets or ordinals are not wrapped in <LBL> tags but are included as part of the <LBody> text object. However, this isn’t unusual (I believe Microsoft Word also does this), and doesn’t seem to cause difficulties.
  • Tables are mostly correct, including tagging the header row cells with <TH> if the header row is pinned (which is the only way I could find to define a header row within Google Docs). However, the column scope is not defined (row scope is moot, as there doesn’t seem to be a way to define row header cells within Google Docs; the table options are fairly limited).
  • Horizontal lines are properly artifacted, but do produce a <P> containing an empty object (presumably the carriage return, just as with images).
  • Using columns didn’t affect the proper paragraph tagging; columned content will be read in the proper order.
  • Inserted drawings and charts are output as images, including any defined alt text.
  • Equations are just output as plain text, without using MathML, and may drop characters or have some symbols rendered as “Path” within the text string. STEM documents will continue to have issues.

Conclusion

So, not perfect…but an impressive change from just a few months ago, and really, the output doesn’t suck! For your basic, everyday document, if you need to distribute it as a PDF instead of some other more accessible native format, PDFs downloaded from Google Does now seem to be a not-horrible option. (My base recommendation is still to distribute native documents whenever possible, as they give the user agency over the presentation, such as being able to adjust font face, size, and color based on their needs. However, since PDFs are so ubiquitous, it’s heartening to see Google improving things.)

Alt Text Tips From A Visually Impaired Person

If you’ve ever struggled with writing alt text for images, especially for photos that seem difficult to describe, here are six excellent tips from a visually impaired person, posted to Mastodon by @hello@makary.online:

  1. Tell me about the colours, because of all the people who need an alt text, some of us see a little bit, or we used to, so we know what colours are. Even those of us who were born blind, we know intellectually what green is and that it’s the colour of grass, and leaves, and people usually bring it up in the context of life, and hope, and so on. Just because you haven’t seen an atom doesn’t mean that the concept is unthinkable for you, right?

  2. I know what shapes and textures are, if you tell me that something is smooth, I know what smooth is, if you tell me that something is made of cloth, I know how that feels, if you tell me it has sharp edges, I know how sharp edges feel and how they are different from soft, rounded corners.

  3. Give me the context. If it is a character from a book or a series, tell me their name and the title, maybe I know them! I listen to audiobooks and series all the time! If it’s a comic and the people interacting are a couple, it is important, and means something else than if they are siblings, or a parent with a child, or an owner and their dog. If someone on the photo makes an awkward or unhappy face, or grins like crazy, that’s information that helps me get it.

  4. Give me vibes. Describe it to me the way you see it. If you think the drawing of a doll is creepy, say ‘it seems creepy to me’. If the picture of a sunrise makes you feel at peace, tell me ‘It looks really peaceful to me’. Tell me how it makes you feel, be evocative, because that’s what experiencing stuff is, you know, experiencing. If you don’t feel sure about it, also tell me. ‘It feels off and eerie for some reason, but I can’t put my finger on it’ is a very interesting description.

  5. Be a person. AI image descriptions not only sometimes get stuff wrong, but also miss all the context. A robot will not know which part of the picture is important. I am not a robot, neither are you. Just think about ‘how would I describe it to a friend who cannot see it for whatever reason’ and do that. You are not my external eyes, because that’s not possible, you are a person describing stuff to me.

  6. Do as much or as little as you can. You don’t have to write an essay about every meme. Write as much or as little as you can, have time and feel comfortable with. If you give a short or a bad description, I can see that, and that’s what happens in life lol. But if you don’t put ANY description. the whole thing that you thought was important enough for you to share, doesn’t exist at all for me and people like me, and that’s just low-key sad.

Fortnightly Notes: June 30–July 13, 2025

As there have been Things Going On lately, I missed last Sunday’s “Weekly Notes” post, so this becomes a “Fortnightly Notes” post instead, partly because “biweekly” is vague, and “fortnight” is a term should be used more often (outside of a gaming context).

  • 🏥 The major part of the Things Going On has been that two weeks ago, my wife had a (planned and necessary) hysterectomy, and I’ve been on caretaker duty. She had two nights in the hospital following the surgery, and then came home and has been recuperating here. She’s healing well, and had a good post-op checkup a few days ago, so things are going well! This does mean that our summer is going to be mostly uneventful, but that’s obviously quite okay under the circumstances.

  • ♿️ Due to the aforementioned Things Going On, I’ve spent the past two weeks working remotely. I’m incredibly fortunate to have a job that lets me do that when it’s necessary, and I wish more people had the ability to do this.

  • 🚀 On the convention front, the Seattle Worldcon schedule was released this past week. Since I’m our website admin, I’m quite happy with the technical side of things, as I was able to present the full 5-day schedule on a single page, filterable by day, track, or both, and with clean (for WordPress), semantic, and accessible (to the best of my ability to verify) code.

    A bit of geekery:

    The Javascript code that does the filtering could quite probably be improved and optimized, as it’s just a result of me digging through the web and hacking things together until it did what I wanted, and my JavaScript knowledge is just barely at the level that allowed me to figure this out. But hey, it works, and that was the most important part.

    Each panel is wrapped in an article tag, each panel title is a heading, and start and end times are wrapped in proper time tags. Panel titles are linked self-anchors so that it’s easy to link directly to individual panels, which is discoverable either by tabbing to the title or by mousing over them. Here’s a sample of the code for one (totally randomly chosen) panel:

    <article class="track dan eve">
        <h4 id="EVE03"><a href="#EVE03">Wednesday Night Dance with DJ Wüdi</a></h4>
        <div class="sched">Events; Dance/Movement<br>Sheraton: Metropolitan Ballroom, <time datetime="2025-08-13T20:00-07:00">Wed. 8 p.m.</time>–<time datetime="2025-08-14T02:00-07:00">2 a.m.</time></div>
        <p class="desc">From dance clubs in Alaska in the '90s to being a recent regular DJ at Norwescon, DJ Wüdi spins an eclectic mix of dance tracks from across the decades. Pop, electronica/dance, wave, disco, goth/EBM/industrial, convention classics, mashups… (almost) anything goes! Already know there's something that'll get you out on the floor? <a href="https://app.limedj.com/shows/djwudi/9NWMHW">Send in your requests ahead of time!</a></p>
        <p class="pros">DJ Wüdi</p>
    </article>
    

    Keyboard navigation for the page works fine, checking it with WAVE comes up with zero errors (and 400-some “alerts”, but that’s because WAVE incorrectly thinks the panelist listings should be headers), checking with ANDI also looks good, and I was able to navigate and interact (at least as well as a non-regular screen reader user can) with VoiceOver and NVDA. This certainly doesn’t mean that there aren’t things that could be improved, but I’m pretty happy with where I got things to be.

📸 Photos

Me stretched out in a grey recliner in our living room.
Our old recliner broke, so we got a new one. Of course, once assembled, I had to give it a good test. It works! Which is good, since this is my wife’s primary recuperation spot.
Me sitting at a small table in a hospital room, wearing a face mask while working on my computer.
Working from a hospital room isn’t quite as comfortable as from home or at the office, but at least I could do it!

📝 Writing

📚 Reading

Read Terry Pratchett’s Pyramids and issue 65 of Uncanny Magazine.

📺 Watching

I found time for four movies, mostly in the first few post-surgery days when my wife was doing a lot of sleeping:

  • The Adventure of Sherlock Holmes’ Smarter Brother: ⭐️⭐️ — Not as amusing as I hoped, given the cast.
  • Bugsy Malone: ⭐️⭐️⭐️ – I’d had vague memories of kids shooting marshmallows out of tommy guns in a ’20s gangster film, and finally tracked down that memory. Odd, but entertaining!
  • Johnny Dangerously: ⭐️⭐️⭐️⭐️ — Another ’20s gangster parody I vaguely remembered watching as a kid; this one is still really funny, and I realized while watching it that some old jokes I’ve had in my head for years came from this film. “You shouldn’t grab me, Johnny. My mother grabbed me once. Once.
  • KPop Demon Hunters: ⭐️⭐️⭐️ — Somehow this one popped into conversations around me, I gave it a shot, and was entertained…and suspect that it would be a good idea to make sure the soundtrack ends up in my convention DJing playlist.

🔗 Linking

  • Patrick Clark in Businessweek: American Mid: Hampton Inn’s Good-Enough Formula for World Domination: I’ve occasionally wondered about how the mid-range hotel breakfast buffet got started; this was a surprisingly interesting look at how strategically aiming for the middle of the road made Hampton Inn the US’s largest hotel chain (which I wouldn’t have guessed).

  • Lynda V. Mapes in The Seattle Times: These orcas have been trying to feed people, new research shows: “So just what are the orcas doing, offering food to people? ¶ Researchers ruled out play, because the incidents were short, lasting only about 30 seconds. And it’s mostly young orcas that play, and orcas of every age offered food. So it seems what is going on is exploration, the scientists surmised: The orcas are curious to see what happens if they offer us food.”

  • Gaurav Sood at Yanko Design: World’s Narrowest Fiat Panda is One Anorexic 19-Inch-Wide EV Destined for the Record Books: “Italian mechanic Andrea Marazzi has transformed a 1993 Fiat Panda into what is now being described as the world’s narrowest functioning car. At just 19.6 inches wide, the one-seater electric vehicle looks more like a cartoon sketch brought to life than a road-ready hatchback. Yet it can move, steer, stop, and drive like any other car.”

  • Sarah Perez at TechCrunch: Facebook is asking to use Meta AI on photos in your camera roll you haven’t yet shared: “Facebook is asking users for access to their phone’s camera roll to automatically suggest AI-edited versions of their photos — including ones that haven’t been uploaded to Facebook yet. […] To work, Facebook says it will upload media from your camera roll to its cloud (meaning its servers) on an “ongoing basis”….

  • Sitara at Sitara’s Garden: How Fantasy Fuelled 60s Counterculture: “That pirated Tolkien paperbacks hit like a bomb in 60s campuses. The bootleg copy was printed due to a loophole in copyright law and quickly became a cult phenomenon, selling over 100,000 copies in 1965 alone. The biggest fans of the book seemed to be hippies, protesters and rockstars. It makes sense when you look at the context.”

  • Laura Michet: Touching the back wall of the Apple store: “When I was in high school, my friends and I had a game we used to play at the mall: we would go into the Apple store and try to make it to the back wall of the store, touch it, and exit out the front without an Apple staff person talking to us.”

  • Elizabeth Lopatto and Sarah Jeong at The Verge: The American system of democracy has crashed: “The declaration pronounces these rights to be so important that it’s worth overthrowing a government over them. But one should not undertake revolution against a tyrannical government lightly, the declaration says, going on to provide a massive litany of complaints as justification. In modern times, the full list was considered to be the boring part of this document, lacking the vim and vigor of ‘we hold these truths to be self-evident’ and other such bars from the preamble. But this year, it’s become a… bracing read.”

  • Jason Kottke: There’s No Undo Button For Our Fallen Democracy: “America’s democratic collapse has been coming for years, always just over the horizon. But when everything that happened during Trump’s first three months in office happened and (here’s the important part) shockingly little was done by the few groups (Congress, the Supreme Court, the Democratic Party, American corporations & other large institutions, media companies) who had the power to counter it, I knew it was over. And over in a way that is irreversible, for a good long while at least.”

  • Sarah Taber on Mastodon (as a nice chaser to Kottke’s link above): “Hello Americans on Mastodon, I know we don’t feel like there’s much to celebrate this July 4th. It’s been a rough several years. ¶ So I want to talk about how we’re making history right now.”

  • Marcus Medford-Kerr at CBC Radio: These sea spiders use the bacteria on their bodies to turn methane into food: “Most sea spiders are hunters. They tend to eat anemones, worms, sponges and soft corals, getting their nutrients by piercing their prey and sucking up their internal fluids. ¶ The Sericosura spiders, on the other hand, are more like intergenerational farmers.”

  • Catherynne M. Valente in Uncanny Magazine Issue 65: When He Calls Your Name: So good, and a wonderful homage to…well, that would just be giving it away, wouldn’t it?

  • Dr David Musgrove at History Extra: “I counted the penises in the Bayeux Tapestry and I have no regrets”: what one Oxford professor found when he studied the rudest bits of the embroidery: “It’s not too often that medieval historians grab national headlines, but when you get an Oxford academic counting penises in a world-famous embroidery, you’re sure to arouse media attention.”

  • Randee Dawn: 7.07.25 Why most SFF cons need fixing, and how CONvergence can show the way: I’m actually pleased to see that Norwescon is already doing or working on several of the suggestions in this post. That said, there’s more we can do to ensure that we’re around for our 50th year (not too far away!) and beyond.

  • Daniel Villarreal at LGBTQNation: GOP erases all mentions of bisexuals from Stonewall Monument webpages: “Transgender journalist Erin Reed noted that the Stonewall National Monument page once said, ‘Before the 1960s, almost everything about living openly as a lesbian, gay, bisexual, transgender, or queer (LGBTQ+) person was illegal.’ The newly revised version says, ‘Before the 1960s, almost everything about living authentically as a gay or lesbian person was illegal.'”

  • Marcin Wichary: Frame of preference: A history of Mac settings, 1984–2004: “Join me on a journey through the first twenty years of Mac’s control panels.”