Starting fresh into the next demi-decade
Valetudo 2026.01.0
Kicking off 2026, Valetudo now comes with improved visuals. Don't worry, it's not YouTube. You can stop screaming.
The soul is still here. I'm just iterating.
A new font
Most central to this is the new choice of font. Replacing the default material Roboto, Valetudo now uses IBM Plex Sans.
I really like that font. It is mostly Helvetica but IBM and with some twists and interesting visual features.
Compared to Roboto, which is engineered to be in the background, IBM Plex Sans tells you that it exists and has something to show to you.
Beside the merits of the font itself, I think out of all corps, IBM is probably the most aligned with what Valetudo is.
When I think IBM, I think massive Mainframes, sturdy Thinkpads and lasting substance.
Serious business that didn't bother with petty nonsense like rebranding or new logos since the early 70s.
They are a corp and have skeletons in their basement for sure, but for the most part, they just do their thing, building their International Business Machines and keeping the world running.
A refreshing contrast to the rest of big tech, currently at the forefront of dismantling democracy, turning everything into dysfunctional gambling, just being evil and generally setting things on fire.
Of course, I'm also writing this to invoke Cunningham's law and get someone to tell me about all the evil stuff IBM does, so that I can return to my cynical baseline.
Anyway.
I think this gives Valetudo a more distinct visual identity, which fits the maturity and spirit of the project.
Improved icons
Being stuck sick at home and not attending 39C3, I still wanted to do something that isn't hacking vacuum robots for a change.
Fortunately, I have this whole project that comes with many different hats I can wear, so I've decided to wear the design hat and take a vacation from Valetudo by working on Valetudo.
The map view always felt a bit like it was built by an engineer; possibly because it was built by an engineer.
Therefore, I stared at it for a while and pondered why that is. 🔮
After investigating at what the vendors do and what makes their visual language tick, I noticed that my icons were just.. bland and flat.
A unicolor gray circle on a gray background.
So the first thing I changed was to add more visual detail. Three circles are more interesting than one circle.
Additionally, I've noticed that the vendors use slight gradients to give the icons presence in the space instead of appearing like someone layered cardboard cutouts on top of something. So I did that too, and indeed it suddenly starts feeling much better.
Just by looking at the comparisons, I could not tell you that there is a gradient now. It just feels.. better.
So that is neat.
As it should turn out however, Firefox got very unhappy rendering all those gradient-filled SVGs at 60fps.
I suppose that makes sense. Filling a simple shape with a single color is much less computationally expensive than calculating the color to fill with for each single pixel. It also doesn't help that the map renderer architecture is not at all following best practices on how to build performant 2d graphics.
So that came with a technical detour, adding automatic mipmap generation and letting the renderer use raster graphics instead, while still keeping the visual clarity of the SVGs.
While I was at it, I've also cleaned up some other performance issues. For example, also caused by the architecture, using shadows and blur on the canvas completely tanks performance due to.. idk I didn't care enough at this time. Something something very large things to draw.
Lastly, I've made the red and purple of virtual restrictions a bit less pure red and purple, as those didn't really fit the rest of the map.
Improved visuals
Beside icons, other visuals were also improved.
For example, text on the map now comes in these pills:
This greatly elevates the look from "meme-font Impact with black and white stroke" to "how all the other vendor apps are looking", which isn't always a correct goal, but this time it sure is.
Additionally, handling of zoomlevels was improved. The text now scales more sensibly and so do the icons.
For some reason, past-me thought that icons must never get smaller than x pixels, leading to this abomination:
Now, new year new me 💅 is doing the sensible thing:
Don't ask me why it took me so long to realize that the previous thing was nonsense.
Floor Materials
Not all is just visual in this update, though this also comes with new visuals.
After just going through backlogs of messages and generally looking around and assessing the situation, I've noticed that @xuefer apparently managed to draw floor materials in what I assume must be a private fork of Valetudo. (Which is great! Everyone should do it like that. It is FOSS precisely so that this can happen. People solving their own problems.)
This intrigued me, because I just never had an idea how to implement that. Seeing it being possible though made things finally click.
Once that mental block is gone, it is actually surprisingly simple. All you need to do is render some pixels in a different color and then you get texture.
So thank you @xuefer, for being a model citizen!
From a technical standpoint, this works by checking the coordinates of a pixel drawn, determining if according to the texture it should be accented, and if so, draw with an accented color. Simple stuff and super easy to extend with more textures.
So now, if your robot's firmware supports it, you can configure the floor material of a segment.
What is this good for, you wonder? That's where the next item comes in
FloorMaterialDirectionAwareNavigationControlCapability
That's a mouthful.
If your firmware supports it, you can now tell the robot "these are wood planks and you will hurt them and possibly you if you don't clean them in paths aligned with them".
I don't have such flooring, nor would I want to have it the same way I do not need non-dishwasher-safe things in my life.
But if you do, this will likely improve your experience.
What else is going on?
If you're reading this, you probably have a 3d printer, or are at the very least aware of their existence.
What you may not know however is that we by now have similar machines for similar prices for embroidery.
@jhbruhn recently got one, but was unhappy that it required an account and the vendor app to use.
So of course he did what we all should do when facing such tech: He liberated it through making it interoperable.
Using https://github.com/jhbruhn/respira you can now use the Brother PP-1 SKiTCH embroidery machine completely without the cloud.
If you or someone in your household might be interested in these crafts, now is the time to look into that.
I am unfortunately not a very artsy person, so I cannot really paint vivid pictures for you regarding what could all be done with that thing.
I am great at being cynical though!
So one thing you could do is create counterfeits of work clothes, which may or may not allow someone with criminal energy to enter places they should not be in. Getting busted for being a darknet embroidery vendor will also most certainly get you onto some podcasts. Of course, please don't actually do that. Just because you don't see them behind your screen, doesn't mean that cybercrime would have no victims.
Putting that aside, I do think that there is real potential for ethical red-teaming here. You could easily manufacture the right clothing on-site in the trunk of your car. That also makes for a good story and gets you onto podcasts, but it does so by improving the world instead of harming it.
Maybe we as the hacker bubble could push for a bit more ethics and not reward criminals as much as we tend to sometimes do.
Just some food for thought.
I will leave you with this perfectly cut clip from 39C3 I found on the internet (needs sound):
why.mp4
Happy new year!
The usual
If you like this release or Valetudo in general, you might want to consider donating:
https://github.com/sponsors/Hypfer
https://builder.dontvacuum.me/donations.txt
Autogenerated changelog
Features
- ui: Update capability icons with new monochrome robot icon design
5004619 - ui: Improve some wording
d6cb9c3 - webserver: Lawful compliance
6638b23 - ui: Update robot icons to look less like a pokeball
386dbd8 - ui: Switch font to IBM Plex Sans
d0fa5a2 - ui: Improve label rendering for map structures
8fd17be - ui: General map polish including improvements to performance + UX + looks
6d54afa - ui: Improve map icons
05450c4 - vendor.midea: More quirks
8dfb08c - vendor.dreame: FloorMaterialDirectionAwareNavigationControlCapability
2c4717f - vendor.roborock: FloorMaterialDirectionAwareNavigationControlCapability + MapSegmentMaterialControlCapability
5c257a5 - ui: FloorMaterialDirectionAwareNavigationControlCapability
4005e0e - core: FloorMaterialDirectionAwareNavigationControlCapability
7db5b75 - webserver: Add another 404 page
3456363 - vendor.dreame: MapSegmentMaterialControlCapability
5273df1 - vendor.midea: MapSegmentMaterialControlCapability
93132c6 - ui: MapSegmentMaterialControlCapability
b13d796 - core: MapSegmentMaterialControlCapability
6a8dd6f
Fixes
- ui: Minor visual cleanup
4cbc004 - vendor.dreame: The latest L10spuh firmware uses the newer-style mop extension controls
04bac60