Skip to content

Releases: magikh0e/Printery

Printery Desktop v0.3.1

Choose a tag to compare

@github-actions github-actions released this 26 Oct 05:24

The model view now works properly from the keyboard, plus three small fixes for phones and Macs.

The model view and the keyboard

Opening a model used to leave focus on the card you clicked, underneath the overlay. Pressing Tab walked through the library behind it rather than the controls in front of you, and pressing Enter there could open a second model under the first. It also was not marked as a dialog, so a screen reader had no idea anything had opened.

It is a proper dialog now. Focus moves into it when it opens, Tab and Shift+Tab stay inside it and wrap round, the library behind is out of reach until you close it, and closing it puts you back on the model you opened, even if the library redrew itself in the meantime. Escape still closes it, and a dialog opened on top of another still goes back to the first one.

Fixed

  • On a phone or tablet the library no longer tells you to Ctrl-click to pick several models. There is no Ctrl key there to press. It still shows on a touchscreen laptop with a trackpad.
  • At phone width the sidebar showed two identical buttons a few rows apart. The one beside All Models is gone at that width; the header one, which also closes the sidebar's backdrop, does the job.
  • Settings told Mac users to Ctrl+click to tag in bulk. It now says ⌘, like the library already did.

Nothing about your library changes, and it updates in place as usual.

Printery Desktop v0.3.0

Choose a tag to compare

@github-actions github-actions released this 18 Oct 21:49

PrintVault is now Printery. Same app, same library, nothing to re-import.

Why

Five other products already use the name PrintVault, including a paid Windows library manager whose pitch is almost word for word the same as mine, a Play Store filament tracker, and three more on GitHub. Anyone searching for this one found four other things first.

Better to move now, with a few dozen people looking, than later with a few thousand.

What this does not touch

Your library, your tags, your notes, your print history. The database keeps its old name, the backup and quarantine folders keep theirs, and the identifier the operating system uses to recognise this app is unchanged, so it updates in place like any other release.

Backups you exported before today still restore. The importer accepts both names, which took one line and would have cost somebody their history if I had missed it.

The site moved

printery.magikh0e.com is the new home. Every old address redirects to the matching page on the new one, so bookmarks and links keep working.

Some of Windows still says PrintVault

Deliberate, and worth explaining, because it is the first thing you will notice.

The window title and everything inside the app say Printery. What still says PrintVault is the installer filename, the folder it installs into, the executable, the Start menu shortcut and the Add/Remove Programs entry. If you go looking for Printery in your installed programs after updating, you will not find it; look for PrintVault.

The .exe installer finds your existing copy through a registry entry named after the product. Rename the product and it no longer finds anything, so it installs a second copy, leaves the old one behind with a dead shortcut, and you get the update prompt again on every launch. More than half the Windows downloads here are the .exe, so that is not a cost worth passing on for a cosmetic filename.

The msi path was tested properly, installing a renamed build over a real install on a real machine: it replaces cleanly and keeps everything. The .exe path cannot be made to do that, and neither can the Linux packages, which key on the same name. So the installers stay named PrintVault for good.

The same applies if you have both installed. The two installers share a directory, so one can delete the other's files. That is worth knowing regardless of names: pick one and stick with it.

PrintVault Desktop v0.2.34

Choose a tag to compare

@github-actions github-actions released this 18 Oct 19:51

Groundwork, with nothing you can see. Here is what it is for.

What changed

Windows identifies an application by an upgrade code, and that is how an installer knows whether to replace what you already have or put a second copy beside it. Until now this was never set explicitly, so the build tools derived it from the product name.

Deriving it from the name works right up until the name changes. It is now pinned to the exact value every existing install already carries, C70F168C-C834-5496-9DBD-3A58CE97CD70, so it cannot drift.

Why now

I am renaming the app. A few other products already use this name, including a commercial Windows library manager with a near-identical pitch, which is confusing for anyone searching for it. The right time to move is while almost nobody has found it yet.

Pinning the code is what keeps that rename safe on Windows: the renamed installer will still be recognised as this application and will replace what you have, instead of leaving you with two copies where one quietly stops updating.

One honest limitation

This covers the msi, which is also what the updater uses, so updating in place is covered either way.

The .exe installer has no equivalent setting. It keys its entry on the product name, with nothing to pin, so if you originally installed from the .exe you will be left with a stale PrintVault entry in Add or Remove Programs after the rename, pointing at a copy that no longer updates. Uninstalling it by hand is all that is needed, and the rename notes will say so again at the time.

Nothing else changed in this release.

PrintVault Desktop v0.2.33

Choose a tag to compare

@github-actions github-actions released this 14 Oct 21:50

A security fix in the TLS library the desktop app uses for updates. Nothing you can see changed.

What it is

GHSA-2mjx-qc3c-rqvc, medium severity in rustls: TLS 1.3 handshake messages were accepted across encryption level boundaries. Fixed in 0.23.45, and this release carries that.

It reaches PrintVault through tauri-plugin-updater and reqwest, which is the code path that checks for a new version and downloads an installer. That is the only TLS this app does, which is also why this is going out on its own instead of waiting for the next feature: leaving it to ride along means every installed copy keeps talking to the update endpoint through the vulnerable library until then.

A patch bump inside the existing range, so only the lockfile moved. rustls-webpki came with it, 0.103.13 to 0.103.15.

Everything else

Unchanged from 0.2.32, which fixed light mode leaving dropdowns and number fields painted dark on Linux.

The browser version is unaffected by this one. It does no TLS of its own; your browser does that.

PrintVault Desktop v0.2.32

Choose a tag to compare

@github-actions github-actions released this 14 Oct 01:33

Light mode no longer leaves dropdowns and number fields painted dark. Reported by @CleverNimbus in #5.

What was happening

Switching to light mode left every select, and the up and down arrows on number fields, in dark colours on an otherwise light page. The text inputs beside them were correct, which is what makes it look arbitrary.

It is not arbitrary. A browser engine paints parts of a form control itself, and it takes the colours for those from color-scheme rather than from any background the page sets. PrintVault declared color-scheme only in a meta tag, as "dark light", which hands the decision to the operating system. So on a desktop running a dark system theme the engine kept painting controls dark while the app was in light mode. An input is drawn from CSS and obeyed the theme; a select's body is drawn by the engine and did not.

Both themes now declare it, which covers selects, number spinners, the date picker and native scrollbars in one go.

Why it only showed on Linux

The Linux build renders with WebKitGTK, which takes those colours from the GTK theme. Chromium does not reproduce it at all, with or without a dark system theme, so it was invisible from the machine this is developed on and from the browser version.

It was reproduced for this fix by rendering the real page in WebKitGTK under a dark GTK theme and comparing snapshots before and after, rather than by reasoning about it.

Fixed

  • Selects, number spinners, the date picker and scrollbars follow the app's theme instead of the system's.

PrintVault Desktop v0.2.31

Choose a tag to compare

@github-actions github-actions released this 04 Oct 04:37

A Support panel in Settings, and nothing else. This is a small release.

Why it is there

The app has never said anywhere inside itself that it is free, that nothing is uploaded, or who makes it. The site says all three, the repo says all three, and the one place a person actually looks when deciding what a program is doing with their files said none of it. Settings is where you go to find out whether something is phoning home. It should answer that.

So the panel says it plainly: free and open source, no accounts, no tracking, no ads, nothing uploaded. Then two ways to chip in if it has saved you a failed print or a few gigabytes, one off or monthly, and a line that a bug report or a folder layout that breaks the scanner is worth as much. That last part is not politeness. A library that groups wrong is the most useful thing anyone can send.

What it is not

Neither link unlocks anything, because nothing is locked and nothing is going to be. There is no payment code in this build, no network call added, and no check of any kind at startup or anywhere else. Both buttons open your browser at an external page, and that is the entire mechanism.

If you would rather it was not there, it is one panel at the bottom of Settings and it does not follow you around the app.

Everything else

Unchanged from 0.2.30. The duplicate detection work from 0.2.29 and the Headfit link from 0.2.30 are the substance of the recent releases; this one is a sentence the app should have been saying since July.

PrintVault Desktop v0.2.30

Choose a tag to compare

@github-actions github-actions released this 26 Sep 05:22

Settings now points at Headfit, which has been sitting on the site since it was written with no way to find it from inside the app.

Headfit

It builds a head from three tape measurements, takes a helmet or a mask STL, and shows you where the two collide before you commit to a print that runs for hours and sometimes days. Clearance painted onto a model of your own head, a section cut through the narrowest point, swept gaskets if you are sealing a mask, and printable sizing rings so you can measure yourself properly rather than guessing.

It lives at printvault.magikh0e.pl/headfit.html and runs in a browser with nothing to install, no account and nothing uploaded, the same as the browser build of PrintVault. Source is at magikh0e/headfit, split out of this repo on the day this release went out, because eight versions had shipped without one of them being visible as a release to anybody.

Why a link and not part of the download

Headfit is 716 KB against this app's 396, nearly all of it an inlined three.js. Bundling it would put that in every installer on every platform, get it signed, and have it downloaded again on every update by the many people who will never open a fit bench. It also needs nothing the desktop shell provides: no filesystem access, no printer polling, no index.

A link has one more advantage. Headfit has gone from 0.1.0 to 0.8.1 in the time this app moved 0.2.28 to 0.2.30, so whoever clicks it gets the current version rather than whichever one happened to be frozen into their installer.

PrintVault Desktop v0.2.29

Choose a tag to compare

@github-actions github-actions released this 25 Sep 18:36

Duplicate detection has been wrong in two directions at once: offering to delete files that were never duplicates, and quietly skipping models it should have been checking.

A model in two formats is one model

Plenty of downloads arrive twice, once as STLs and once as a 3MF. PrintVault has been calling those a duplicate and pre-ticking one of them for deletion.

It comes from a deliberate choice that went one step too far. The key a model is grouped by strips stl, stls, 3mf and gcode out of the name, so that a folder called "Dragon STL" groups with one called "Dragon" rather than sitting beside it as a stranger. The cost, unnoticed, was that "Dragon STL" and "Dragon 3MF" also landed on the same key, and the two formats of one model were presented as one model downloaded twice.

Grouping now takes the format into account as well, and reads it off the model's own mesh files rather than its folder name, because the name is the part that lies. It is weighed by bytes rather than by file count, so one small STL sitting beside a large 3MF does not make the whole model an STL. A model that genuinely holds both formats has a single dominant format and still groups with another copy of itself, which is the case that has to keep working.

Six letter words were being deleted out of every model name

The same key strips the hash-like ids that downloads collect, things like a3f9c2 and 3d8f21b4. It did it with this:

\b(?:\d{6,}|[a-z0-9]{6}\d*)\b

The second half matches any six character word. Dragon. Statue. Helmet. Bottle. Opener. Every one of them was being deleted out of model names before they were compared, and it cut both ways.

A name made only of such words reduced to nothing at all. "Lizard Statue" became an empty string, fell below the minimum key length, and dropped out of duplicate checking entirely: real copies of it were invisible. Meanwhile unrelated models collided, because "Cool Dragon Thing" and "Cool Holder Thing" both reduce to "cool thing".

An id is six or more characters carrying both a digit and a letter, which a word never is. That is what it matches now. It errs towards keeping things, because leaving an id in only means two copies fail to group, while stripping a word offers two different models up as one and the second is the one that loses files.

Measured over 242 real folder names from an actual library rather than invented ones: names silently dropped from checking falls from twelve to seven, a false grouping of "Figurines" with "Grumpy Figurines" goes away, and a genuine pair that the old rule had blinded itself to is found.

Fixed

  • A release that carries no build for your platform is now reported as exactly that. It used to come back as a failure to reach the update endpoint, which sends you looking at your network for a problem that is not there.

PrintVault Desktop v0.2.28

Choose a tag to compare

@github-actions github-actions released this 06 Sep 18:08

A print that finishes now takes itself off the queue, and printing the same file twice in one day is finally logged twice.

The queue closes its own rows

The monitor already did the hard part. It notices a job ending, writes the print log with the real duration and the real filament rather than the slicer's estimate, and takes the grams off the spool. It simply had no idea the queue existed. So a row you started, that PrintVault sent, watched and logged entirely by itself, still sat there saying printing until you went and ticked it off.

A successful send now writes onto the row which file went to which printer, and the monitor looks that up when a job ends. What it finds back there is better than anything it could work out alone: the model comes off the row instead of being guessed out of the filename, and the spool you chose when you queued the job wins over whichever one happens to be flagged in use.

A run of six is six prints, so a finished copy advances a count rather than closing the row, and the row drops back to pending ready for the next one. The row, its estimates and the totals across the top all count what is left instead of what you first typed, so a batch half way through reads 4x with "2 of 6 printed" beside it. A print that stops early counts for nothing and goes straight back. Pressing Done yourself still closes the whole row, however many copies were on it.

Printing something twice a day now records both

Making that count work exposed why it never could have. The guard against logging one job twice matched on printer, file and day:

x.auto && x.printer === printer.name && x.date === U.today() && x.jobFile === name

Which quietly meant a file could only be logged once in a day. Print the same thing three times in an evening and you got one print record and one filament deduction. The other two were dropped on the floor, grams and all, and nothing said so. Anyone running repeats, a batch of the same part or a printer farm, has been losing print history to this.

It is a flag now, set when a run is written down and cleared the moment the printer reports printing again. One run logs once, on its own account, however alike two of them look. A window of time was the obvious fix and the wrong one: a short print is genuinely indistinguishable from a duplicate tick that way.

Fixed

  • The queue was unusable on a phone. The card is a single nowrap row, so the wider button labels that came with 0.2.27 squeezed the name column to nothing, wrapped its details one word per line, and pushed the last button off the screen. It wraps below 640px now, name beside the thumbnail and the buttons underneath. The printing row had been overflowing on its own since well before those labels.
  • The duplicates tab said "N in zips" above a list that has always counted 7z and rar too.

PrintVault Desktop v0.2.27

Choose a tag to compare

@github-actions github-actions released this 06 Sep 07:43

Start in the queue sends the print now, a cost calculator for a run before you commit to it, and 7z archives read like zips.

Start actually starts something

Reported by @howardaron-git in #4. Pressing Start on a queued item made the row say PRINTING and did nothing else, because that is all the code did: it wrote a word on the record and redrew the screen. Nothing anywhere read that field except the badge you were looking at and the button's own label. In an app that can push gcode to Moonraker and OctoPrint, a button called Start had no business doing only bookkeeping.

Start now opens the same send window the model screen uses, with this item's model already chosen and the printer named on the row already selected. The row is marked as printing once the upload has come back, not the moment you press the button. There was a separate send icon on the row that did roughly this, but it only appeared once you had a printer with a network address saved, so most people never saw it. Start replaces it.

In the browser build there is nothing to send to, so the button says Mark printing and does only that, which was the honest name for it all along.

What is this going to cost

A cost button on a model asks how many copies you want and works out the filament and the running cost for the lot, using the grams and minutes already read out of your sliced gcode. Pick a spool and it says whether there is enough left on it for the whole run, which is the thing you actually want to know before starting a batch at eleven at night.

Everything is editable, so a model with no sliced gcode can still be estimated by typing the numbers in. The hourly running cost is a setting, so it carries over.

7z

The desktop app lists and extracts 7z archives the same way it handles zips: contents indexed and searchable without unpacking, extract when you want the files out. The browser build cannot do this. 7z is LZMA, and a decoder for it would mean adding a dependency to a file that deliberately has none.

The archives view on the Duplicates tab counts them too, so a 7z sitting beside the folder it was already extracted into now shows up as reclaimable rather than being ignored.

Also

  • Six accent colours under Settings, on top of the light and dark themes.
  • The updater says why it found nothing instead of going quiet, and there is a button to make it look.
  • Press ? for the keyboard shortcuts, and the hints name the right modifier key for your platform.

Fixed

  • The delete confirmation printed the raw markup of the trash icon across the dialog instead of drawing it.
  • Prices ignored the currency setting and always showed a dollar sign.