Repository navigation
Releases: hmderdoc/jockoshop
Release list
jockoshop 0.1.17
Upload to a board and Export As… can now send the 3dBBS .ans with its depth layers (the new -3d.ans format). Before, an uploaded .ans was always flat.
jockoshop v0.1.16
Copy and paste with Moebius and PabloDraw (and between jockoshop windows), a window per document, and automatic updates from this version on.
jockoshop 0.1.15
macOS builds are signed and notarized
They open normally — no right-click → Open, no "unidentified developer" warning.
Verified on the downloaded .dmg rather than from a green build:
spctlreports accepted,source=Notarized Developer IDstapler validatefinds the ticket attached to the bundle, so it holds up offline too- authority chain to Apple Root CA, hardened runtime set, secure timestamp present
Windows and Linux builds are unsigned — SmartScreen shows "More info" → "Run anyway".
What was wrong
APPLE_ID held 10 bytes where the address is 21 — the team ID had been pasted into the wrong secret. Apple answered 401 to a username that is not an account, which is what it had been saying all along.
0.1.12 and 0.1.13 lost their macOS builds to this while it was being chased; 0.1.14 shipped signed but unnotarized. Use this one.
From 0.1.12
The top-left is now the app's own icon rather than the word "jockoshop". Clicking it opens an About box with the version, the commit it was built from, and links to the repository and the release builds.
Still unverified
The FTP upload from 0.1.10 has never touched a real server — tested end-to-end against a mock board speaking Synchronet's dialect, but no live BBS.
jockoshop 0.1.14
Supersedes 0.1.12 and 0.1.13, which both lost their macOS builds while macOS signing was being set up.
macOS builds are back, and signed
Signed with a Developer ID certificate, not yet notarized. macOS still warns on first launch — right-click jockoshop.app → Open — because notarization is what removes that and nothing else does.
Verified on the built bundle rather than assumed: the authority chain runs to Apple Root CA, the hardened runtime flag is set, and codesign reports it valid on disk and satisfying its designated requirement. Gatekeeper rejects it for exactly one reason, Unnotarized Developer ID — so the certificate side is right and only notarization is outstanding.
Apple rejects the notarization credentials with a 401, so that step is parked rather than blocking releases. Since notarizing runs after signing, a failure there does not leave an unnotarized build, it loses the macOS builds altogether — which is what happened twice.
Windows and Linux builds are unsigned — SmartScreen shows "More info" → "Run anyway".
From 0.1.12
The top-left is now the app's own icon rather than the word "jockoshop". Clicking it opens an About box with the version, the commit it was built from, and links to the repository and the release builds.
Still unverified
The FTP upload from 0.1.10 has never touched a real server — tested end-to-end against a mock board speaking Synchronet's dialect, but no live BBS.
jockoshop 0.1.13
Supersedes 0.1.12, which lost its macOS builds to a notarization failure.
macOS builds are back, and signed
Signed with a Developer ID certificate, not yet notarized. macOS still warns on first launch — right-click jockoshop.app → Open — because notarization is what removes that and nothing else does.
Apple rejects the notarization credentials with a 401. Since notarizing runs after signing, a failure there does not leave an unnotarized build, it loses the macOS builds altogether. So it is parked rather than blocking releases, and turning it back on is a repository variable rather than a code change.
Windows and Linux builds are unsigned — SmartScreen shows "More info" → "Run anyway".
From 0.1.12
The top-left is now the app's own icon rather than the word "jockoshop". Clicking it opens an About box with the version, the commit it was built from, and links to the repository and the release builds.
Still unverified
The FTP upload from 0.1.10 has never touched a real server — tested end-to-end against a mock board speaking Synchronet's dialect, but no live BBS.
jockoshop 0.1.12
The mark in the corner
The top-left was the word "jockoshop" in magenta; it is now the app's own icon, drawn as vector so it stays crisp. Clicking it opens an About box: what the app is, the version and the commit it was built from, and links to the repository and the release builds.
The version comes from tauri.conf.json — what a release is tagged from — so the number in the app is the number on the installer. A + after the commit means that build had uncommitted changes, so a local build never claims to be the release it was built beside.
macOS code signing
New this release, and being verified as it lands. macOS builds are signed with a Developer ID certificate and submitted for notarization, which should mean they open normally instead of the right-click → Open dance. This release note will be corrected if verification says otherwise.
Signing runs from repository secrets; without them the workflow still builds unsigned, so forks are unaffected.
Windows and Linux builds remain unsigned — SmartScreen shows "More info" → "Run anyway".
Still unverified
The FTP upload from 0.1.10 has never touched a real server. It is tested end-to-end over a real socket against a mock board speaking Synchronet's dialect, but no live BBS, and FTPS least of all.
jockoshop 0.1.11
Unsigned builds. macOS shows "unidentified developer" the first time — right-click the app and choose Open.
Follows 0.1.10, which added FTP upload and the ASCII converters.
An ASCII conversion is an element, not a mode
ASCII art is valid inside a piece of ANSI art, so a converted ASCII element has to survive being one layer of a larger drawing. The switch was already per layer and the conversion honoured it — but three places regenerate cells after conversion, and every one handed the work to shadeans, which only spells cells in CP437. An ASCII element quietly became block art when:
- its layer was translucent — blending re-matched it with default settings, ignoring the layer's own. Measured worst: 214 of 230 cells came back as blocks.
- it was scaled by re-match.
- a reference image was converted to a layer — that call did not pass the editor, so the font was unknown and the ASCII branch was skipped entirely.
All three now go through one helper. CP437 image layers, TheDraw text, hand-drawn cells and an ASCII conversion composite together, each converted on its own terms.
Contour is not re-run on those paths. It reads edges out of the source image, and what those callers hold is a picture of characters — tracing that finds the outlines of the letters. A translucent contour layer falls back to an ASCII tone match: still ASCII, so nothing is lost to blocks, but not the same drawing.
The document-wide ASCII switch is unchanged and still means what it said — for when the whole piece is ASCII, not for making one element of it so.
Still unverified
The FTP client from 0.1.10 has never touched a real server. It is tested end-to-end over a real socket against a mock board speaking Synchronet's dialect, but no live BBS, and FTPS least of all. Reports welcome.
jockoshop 0.1.10
Unsigned builds. macOS shows "unidentified developer" the first time — right-click the app and choose Open.
Upload to a board
A cloud icon in the top bar (Cmd/Ctrl+Shift+U, or File ▸ Upload to a Board…): FTP straight to a BBS, so a finished piece never has to go through a separate client. Saved connections, the target directory listed so you can see where it is going, and a name already on the board turns Upload into Replace — not overwritten until you press it a second time.
Encrypt (FTPS) does AUTH TLS before logging in; Synchronet's own server offers it, and without it the password crosses the internet in the clear. Test reports the board's greeting and tells you when a board offers encryption you have not switched on. Transfers are always binary, so line endings and SAUCE survive. What it sends is built by the same code Export As… saves with.
Desktop only, and not by choice: FTP needs a raw socket, which no web page may open. The web app shows the dialog and explains rather than failing oddly.
Not yet verified against a real server. The protocol is tested end-to-end against a mock board speaking Synchronet's dialect, but nothing has touched a live BBS — FTPS least of all. Reports welcome.
ASCII, properly
Measured over 13,162 pure low-ASCII files in a 111k-file corpus: real ASCII art is 60% stroke characters against about 11% of the density ramp, and 81% of those files are stroke-led. _ alone is 12.6% of everything drawn. Artists trace outlines; they do not shade. Three modes follow from that.
- ASCII only (image layer): printable 32–126 on one background. Restricting the characters alone buys nothing — a cell whose foreground equals its background is a solid block whatever it holds — so the ground is fixed too. Printable ASCII tops out at 39% ink where CP437's blocks reach 100%, so there is no bright end to the range; that is the alphabet, not a setting.
- Contour: traces the edges and leaves the flat parts empty. The alphabet is derived from the font by ink coverage, and each character is chosen by matching its own ink against the cell's edge pixels — so it follows where in the cell the edge crosses, which
_,-and'cannot be told apart by angle alone. - Monochrome (the ink picker): one colour, for a true
.txt. Colour per cell is unchanged and still the default.
Plus ASCII as a document-wide constraint (top bar, beside iCE and 9px) — a constraint, not a filter. Nothing already drawn is altered: the character grid veils what it will not take, the brush refuses one and says why, images are put into ASCII, and the footer counts whatever is already outside it.
jockoshop 0.1.9
The fonts release. Art is now drawn in the font it asks for, which turned out to touch almost everything.
Fonts
- Art opens in its own font. 86 names from SAUCE — IBM VGA / VGA50 / VGA25G / EGA / EGA43 across sixteen codepages, the eight Amiga fonts, C64 PETSCII. Art that carries its own bitmap (XBIN, ArtWorx
.adf, ICE Draw.idf) is drawn in that. A name jockoshop does not have is kept, so an export still asks for it, and the picture falls back to IBM VGA with a note. Measured against 48,211 real SAUCE records: 99.3% are drawn in exactly the font they name — the rest carry junk in that field rather than a font. - Font browser, on the font name in the top bar: filter, arrow through the list, and your own picture previews in each font, with the whole character set under it. The font is the character set — byte 225 is
ßin an IBM font andáin an Amiga one, and Amiga ASCII is built out of 225 — so seeing it is the only thing that answers which font a file wants. - 9px letter spacing moved out of the SAUCE dialog to a top-bar toggle beside iCE, where people look for it. The rendering was always right: the 9th column repeats the 8th for CP437 192–223, so box drawing joins and letters do not.
- Aspect ratio (SAUCE's other flag): art drawn for a 4:3 CRT is stretched back out, 1.2× at 8-pixel cells and 1.35× at 9. Only the drawing stretches — the grid and the exported characters are untouched.
- The character grid was wrong for every font but IBM VGA. It assumed 16-row cells, so in an 8-row font 240 of its 256 squares picked a different character than the one you clicked. Now 0 wrong at every height.
Images
- Cut out background on an image layer keys the backdrop away in the source pixels, before the picture is matched, so no cell ends up part subject and part background. Tolerance, grow/shrink, and an "only from the edges" switch that keeps the same colour where it is walled inside the subject. A cell the subject only half covers becomes a half block.
- Clean edges and despeckle for art that is already cells. Blur / sharpen / smudge have no meaning on a character grid; these are what they turn into.
- Images convert against the font's own characters when it has no CP437 ramp. shadeans spells cells with
░▒▓█at the codes DOS puts them; in PETSCII those codes are digits, and the output was a wall of0s and1s. Error against the source drops 40% in PETSCII and 21% in Topaz. IBM fonts keep shadeans, which looks better there.
Keyboard
Bindings taken from Moebius 1.0.29's own source, for people who draw with keys: Ctrl+0–7 foreground and Alt+0–7 background (same number again for the bright twin, and changing hue while bright stays bright), Ctrl+arrows to step, Cmd+Shift+X swap, Cmd+D default colour, Alt+U take the colours under the cursor, Alt+F1–F10 straight to a character set, Alt+=/Alt+- brush size, Cmd+E iCE, Cmd+F 9px. ? shows the whole sheet, marking which keys are Moebius's.
Two moved to make room: Cmd+D is Default Colour now (Escape deselects) and Cmd+E is iCE (Export .ans keeps its menu item).
Files
.xbcarries its font and its palette. Both were being dropped. Of 16 real XBINs pulled from 16colo.rs packs, all 16 carry a font and 15 carry a palette — it is the whole reason the format exists.- Export As… shows each format only what it can actually carry, and holds the document palette (VGA or Commodore 64). A plain
.anssave is still one click and never meets any of it. .seqexport — PETSCII the way a Commodore BBS sent it. Foreground only, because a C64 holds one background for the whole screen; it reports how many cells could not keep theirs. (Untested on real hardware — if you run one in VICE, tell me.)
Text and canvas
- TheDraw picker sorts by name, type, rows or file, and filters by a row range — the same number at both ends gives exactly that size instead of everything shorter. A dice beside the font name swaps in another font of the same height, on the canvas, undoably.
- Canvas width is a set of the widths art is drawn at (40 C64, 77 BBS ad, 80, 132, 160), applied in one step, with Custom… behind an Apply button. Height commits when you stop typing instead of resizing on every digit, and grow adds a row when the typewriter runs off the bottom.
- Unsaved changes offer Save now / Proceed anyway / Cancel.
- The Brush and Character panels no longer vanish under the selection tools — collapsed, not taken away.
Builds are unsigned: macOS needs right-click → Open, Windows needs "More info" → "Run anyway".
jockoshop 0.1.8
Cutting backgrounds out of images
Dropping an image in and removing its backdrop used to mean rasterizing, magic-wanding and cutting — and that left a ragged halo around the subject. The reason: shadeans picks one character and two colours per cell, so a cell straddling the silhouette comes back as a shade blending subject and background together. Nothing afterwards can separate them.
- Cut out background on an image layer keys the backdrop away in the source pixels, before the picture is matched, so no cell is ever part subject and part background. It keys on the border's colour to start with, with tolerance for a noisy or JPEG backdrop, grow/shrink to trim a leftover rim, and only from the edges so the same colour survives where it is walled inside the subject (sky through a window, a blue eye). Non-destructive — the original stays in the project and the switch turns it off.
- A cell the subject only half covers now becomes a half block rather than appearing or vanishing whole, so a silhouette is never a whole cell out.
Cleaning up art that is already cells
Where there is no source image left to re-key:
- Clean edges (on by default, beside the selection's buttons) makes Delete take the colour it just removed out of the cells around the selection too. A half block keeps its other half, a shade drawn in that colour loses its ink, and that colour behind a character lets the layer below through.
- Despeckle drops cells left with nothing beside them.
Blur, sharpen and smudge have no meaning on a character grid — there are no pixels between the cells to push around. These are what they turn into.
Also
- Delete on a live layer used to refuse ("rasterize it to draw on it") even though the magic wand happily selected on one. It now cuts the selection out of the layer's mask, so wand-then-Delete works on an image without rasterizing, and nothing is destroyed.
- Unsaved changes now offer Save now / Proceed anyway / Cancel instead of a bare confirm, on close, new, open and import. A cancelled Save As calls the whole thing off.
- The Brush and Character panels are no longer taken away under the selection tools, Move and Find — a selection's fill and delete draw with the brush, so setting a colour meant picking a tool you did not want. They are collapsed but one click away, and remember that separately from the drawing tools.
npm run doctorsays what a desktop build still needs before it compiles for ten minutes, andnpm run fontsfinds or fetches the TheDraw fonts instead of expecting a hardcoded path.
Builds are unsigned: macOS needs right-click → Open, Windows needs "More info" → "Run anyway".