- TypeScript 30.1%
- Prolog 20.9%
- C 16.3%
- Python 8.2%
- Shell 6.9%
- Other 17.6%
|
All checks were successful
muster / update (push) Successful in 1m45s
Two formats, la75plus-portrait and la75plus-landscape, for Digital's 24-wire companion printer. The run is a DEC PPL2 sixel string at 180x180 dpi, the wire pitch: Pn3 = 4 decipoints sets the horizontal grid at 1/180" and the raster attributes make the pixel square. Every byte is seven-bit text, folded into lines under eighty characters, so the run goes down a serial line or a terminal's printer port as it is. The printer takes single sheets up to 8.5" wide, so both runs print on a portrait sheet of A4: portrait turns the photograph a quarter turn to fill the sheet, landscape prints it upright in its own 4:3 across the eight-inch line with the block centred down the page. Captions are set in the printer's own letter-quality font. The tone goes through the shared impact-printer ink model with a 0.2 mm wire. A paper simulator renders the run as the sheet it prints, and the PPL2 programming reference and the LA75 Plus user guide are kept under manual/. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wsnj79thMD9PgGvQhNHssJ |
||
|---|---|---|
| .forgejo/workflows | ||
| ansible | ||
| booth-log | ||
| camera | ||
| dosprint | ||
| faces | ||
| fileserver | ||
| intake | ||
| magiclink | ||
| print-relay | ||
| serial | ||
| sunplot | ||
| talk-material | ||
| web | ||
| .gitattributes | ||
| .gitignore | ||
| BRIEFING.md | ||
| hans.jpg | ||
| projektbeschreibung.md | ||
| README.md | ||
FotoFix
Classic-Computing-Exhibition installation: visitors photograph themselves on an SGI Indy, get a thermal-printed receipt, and the photo is served to vintage computers around the show in their native formats.
See BRIEFING.md for the full concept.
Repository layout
| Path | Purpose |
|---|---|
camera/ |
Capture & transfer software for the SGI Indy (IRIX 6.5) |
print/ |
Thermal-receipt service (Raspberry Pi, Node.js/TS) — generates the visitor receipt with photo, QR code, and photo ID |
fileserver/ |
Photo-format conversion + file serving (FTP / AppleTalk / SMB) — turns each JPG into the formats vintage computers can display, including bundled-viewer downloads for retro systems |
web/ |
HTTP server that exposes photos at https://<host>/foto/<ID> (the QR target on the receipt) |
serial/ |
The serial login the show's terminals meet, the photo screens a Tono and a Minitel meet, and the browser and CLI clients an exhibitor tests against them from home |
sunplot/ |
Plot station for a SPARCclassic (SunOS 4.1.4, XView) — fetches a photo, previews it and the plotter's rendition, and drives the Sekonic SPL-450; an attract loop plots portrait outlines while idle |
dosprint/ |
DOS print client (16-bit, Open Watcom) — a DOS machine with a parallel printer fetches a photo's print run over Kermit and streams it to LPT1 |
print-relay/ |
The relay VERON's Fotodruck screen prints through — it dials VERON and carries a print run to the print server the dot-matrix printer hangs off |
booth-log/ |
Takes the booth's log lines off the wire into the Pi's journal, from where they reach the cluster's Loki and are read in a browser |
talk-material/ |
Photographs for the exhibitor talk and the list of which one stands on which slide. The talk itself, and the page saying how an exhibit is connected, are pages of the exhibition website and live in exhibitron |
ansible/ |
The Pi as the exhibition's file server — FTP, HTTP, SMB and DECnet file access — and bring-up, which makes a new one from a blank SD card |
hans.jpg, sample.jpg |
Test images |
Printer-specific notes live in print/receipt-printer-guide.md.
Format strategy
The canonical photo is fotos/<ID>.jpg, and everything else is published as
fotos/<ID>-<format>.<ext> — three targets write .com, four write .ppm,
five write .adf and four write .dsk, so the format's name has to be in the
file name. Plain image
formats sit alongside per-platform downloads that bundle the picture with a
tiny native viewer, so the visitor's target machine doesn't need a separate
image program:
- C64 — seven files: the hi-res 320x200 monochrome viewer as a
.prg, that bitmap alone at$2000, multi-colour 160x200 in four greys packed behind a viewer and alone, Koala Painter in all sixteen colours as a.koaand with a viewer, and coloured PETSCII both as a BASIC program and as the bare character stream behind it — implemented - Commodore 8032 —
.pbm(a raw 512x512 bitmap for the green tube, set bits lit, captioned in the PET's own font) — implemented - MS-DOS CGA —
.com(8086 + 640x200 mono) — implemented - MS-DOS MGA —
.com(8086 + 720x348 Hercules mono) — implemented - MS-DOS VGA —
.com(80186 + 320x200x256 mode 13h) — implemented - Atari ST —
.tos(m68k + 320x200x16 low-res) — implemented - Amiga —
.iff(IFF ILBM 320x200x32, opened with Multiview) plus five bootable.adffloppies (custom bootblock, no AmigaOS: lo-res/hi-res, interlaced, and HAM6 — all PAL) — implemented - Apple II —
.dsk(bootable disk, boot-PROM loader + HGR/DHGR viewer, mono and colour) — implemented - TI-99/4A —
.rpk(ROM cartridge, TMS9900 viewer + TMS9918A 256x192 bitmap mode, mono and colour) — implemented - Atari 2600 —
.a26(4 KB cartridge, 6507 beam-raced playfield, 40x192, mono and colour) — implemented - MSX —
.rom(256 KB cartridge, probes MSX1/2/2+/turbo R and shows the best of SCREEN 2 / SCREEN 8 / SCREEN 12 YJK) — implemented - Amstrad/Schneider CPC —
.rom(16 KB autostart expansion ROM, Z80 viewer, Mode 0 160x200x16 colour and Mode 2 640x200 mono) — implemented - ASCII art —
.txt/.prn(an 80x24 terminal screen and the TONO's 32x16 one, the 53x16 preview VERON's Fotodruck screen shows before it prints, an 80- and a 132-column line printer, and the 132x60 page a host's line printer puts out; a restricted uppercase character set, the full ASCII one, and the characters every EBCDIC code page agrees on for the 3270 and the host. A screen picks each character for the shape its ink makes, matched against the picture under that cell; a printer picks by ink alone and overprints for extra grey levels, and the host page is one strike a row with nothing but the characters and the line feed in it) — implemented - NEC Pinwriter P6 —
.prn(a print run rather than an image: the photograph turned a quarter turn onto a sheet of A4 as bands of 24-pin dot graphics at 360, 180, 120, 90 or 60 dpi, captioned in the printer's own letter-quality font — send it at the printer and the sheet comes out) — implemented - DEC LA75 Plus —
.prn(a sixel print run under Digital's printing protocol, seven-bit text throughout, so it goes down a serial line as it is: the photograph on a sheet of A4 at 180 dpi, either turned to fill the sheet or upright across the page, captioned in the printer's own letter-quality font) — implemented - Tektronix 4010/4014 —
.tek(storage-tube vector graphics; the photo is drawn as a multi-angle hatch — the screen is swept several times at different angles, brighter areas collecting denser cross-hatch — and, in the traced variants, as an outline drawing held to a fixed number of vectors) — implemented - DEC VT240/VT241 —
.six(sixel graphics, 800x240 over two bit planes: four greys on the VT240's monochrome tube, four colours on the VT241) — implemented - Minitel 1B —
.vdt(a Télétel videotex page the terminal draws as it arrives: 80x66 mosaic blocks over the whole screen, two colours a character cell out of the eight greys the tube shows, and a black-and-white variant that names no colour at all) — implemented - Bildschirmtext —
.cept(a CEPT page for a BTX decoder: the same 80x66 mosaic in sixteen colours taken from the photo and loaded into the decoder's colour table, the same picture in the decoder's own eight, and a dynamically redefinable character set that carries a real 144x70 bitmap, at normal and at double size) — implemented - Sekonic SPL-450 —
.plt(a plot run rather than an image: the photograph drawn on A4 or A3 by the eight-pen flatbed plotter, as a weave of straight lines standing in for its tones or as an outline traced from its edges. A pen draws as much as it is given, so what the drawing is fitted to is a time budget of carriage, pen lifts and serial line — the hatch at five, twelve and thirty minutes, which are three different pictures, and the trace at two, which is all it needs) — implemented - Interchange formats, 640x480, for a machine with a picture loader of its own
—
.png,.gif(256 colours; 320x240 in 16 colours for small screens, both picked from the photo and in the early web's fixed EGA sixteen),.pcx(mono and 256 colours), netpbm.ppmat 24, 16 and 8 bits of colour and at 16 bits a sample,.pgmgrey,.pbmblack and white, and.xbmas C an X client can compile in — implemented
Every bundled viewer overlays two captions in the target's own font (top-left "Classic Computing 2026 - Celle", bottom-right the system name), the P6 prints the same two on the paper, the plotter draws them in the Normschrift of DIN 6776-1, and the videotex pages set them as characters on their first and last row. The interchange formats carry none: they are the photograph on its own.
Every program holds its picture until a key, a joystick or a mouse button says otherwise, and then hands the machine back — to BASIC, to DOS, to the desktop, or, where a target has no system to return to, by resetting it.
See fileserver/src/formats/<platform>/ for each implementation and
fileserver/README.md for how to run each viewer on Mac.