Contributions to PDFWorkshop

Pulled 2026-06-01 from https://github.com/esaruoho/PDFWorkshop and the local clone at /Users/esaruoho/work/PDFWorkshop.

Summary

Local commits

Authored on /Users/esaruoho/work/PDFWorkshop. Some commits are squashed into the PRs above when they land upstream.

DateSHAMessage
2026-06-01c33d15eocr: stamp host in heartbeats so the fleet attributes OCR to this machine
2026-06-01b1485bfocr-worker: self-heal fuzzy-matches sanitized upload names (fix download_failed)
2026-05-29d002b6bstart-ocr: single-instance guard (daemon mode) so boot re-runs don't stack OCR supervisors
2026-05-29b8c2be1ocr-submit: REMOTE_HOST=cloudcitymacmini not dead .local mDNS hostname
2026-05-2936dd6e1ocr-worker: self-heal missing uploads from merlib archive
2026-05-27dcf5f51fix(ocr-worker): self-heal queue subdirs + visible mv failures
2026-05-01ed00c00fix(ocr): preserve OCR text on encrypted PDFs and assembly failures
2026-04-282149af3fix(ocr-worker): clean up uploads/, capture failure logs, fix base_name bug
2026-04-27865d1a2Fix detached ArrayBuffer crash in autosave
2026-04-1495b5e12Disable MLX auto-start: mlx-vlm sampler produces repetition loops on GLM-OCR
2026-04-1425ac06eFix MLX GLM-OCR bootstrap: install torch/torchvision + auto-start on Apple Silicon
2026-04-13832ba02batch-ocr: per-page heartbeat writes to comms/queue/ocr-heartbeat.json
2026-04-13d71f66bAdd priority queue: queue/priority/ runs before queue/pending/
2026-04-127339dceocr-submit: add --scrape flag for batch PDF submission from HTML pages
2026-04-09034a822Add Syncthing inbox: drop PDFs into comms/queue/ocr-inbox/
2026-04-093a114aaAdd PYTHONPATH to execSync env for user site-packages
2026-04-094f49e37Fix PATH for PyMuPDF detection in nohup worker environment
2026-04-092b6ae1aAdd PyMuPDF fallback for page rendering when pdfjs canvas fails
2026-04-09a64c7c5Add ocr-prepare for downscaling large PDFs before OCR
2026-04-096288498Guard against browser OOM on large PDFs (>100MB)
2026-04-09a037abdHandle large PDFs: skip .pdfws for >50MB, re-read for pdf-lib, always emit .txt
2026-04-090583b5eFix ArrayBuffer detachment: keep separate copy for pdf-lib
2026-04-09aff4834Fix PDF byte handling for Node v25 Buffer/Uint8Array compatibility
2026-04-098039290Fix pdfjs worker path resolution using createRequire
2026-04-093215e6eFix pdfjs worker source for Node.js v25
2026-04-09b056a16Fix batch-ocr backend detection: use health check instead of broken test image
2026-04-090eaa5a5Fix download_pdf: redirect log to stderr so path is not contaminated
2026-04-09e15d6c2Fix bash compatibility: replace ${,,} with tr for lowercase
2026-04-09b20d7a7Fix OCR backend detection to use lightweight health checks
2026-04-0989f2794Add OCR worker daemon for remote headless OCR via Mac Mini
2026-04-08e9fbde0Auto-save to IndexedDB, responsive layout, fix Cleanup arrow
2026-04-08599e367Add Cmd+F search across pages, Export TXT, fix copy button width
2026-04-0835a9f5eShow copy feedback on button text instead of separate label
2026-04-0893ea89cFix garbled text in exported PDFs: disable font subsetting
2026-04-08d7bc9b0Fix allPages undefined crash and hydration mismatch
2026-04-08742e33aFix garbled PDF export, add Stop button and clipboard copy
2026-04-07116e2d3Fix fallback order: GLM-OCR → Gemini → Tesseract
2026-04-07c205ba0Auto-fallback through OCR engines when one returns empty
2026-04-07023ceaeFix startup order: Next.js first, then browser, then MLX
2026-04-07c917045Press Q to quit in start.sh
2026-04-072930f00Auto-restart MLX server on crash, client-side retry for GLM-OCR
2026-04-07e35bdc8GLM-OCR: detect crashed server, give actionable error message
2026-04-07f94be16Replace all alert/prompt with in-app result banner, fix MLX retry, fix capitalization
2026-04-076c7f595Add First/Last page navigation buttons
2026-04-07c80e989Add auto-retry for suspicious empty pages after batch OCR
2026-04-07f97f251Add post-OCR sanity check and fix page number padding
2026-04-07e984376Show actual GLM-OCR error message instead of generic 500
2026-04-078cdb3f3Update README and ARCHITECTURE for GLM-OCR, Unicode export, all new features
2026-04-07eac60dbAdd batch OCR CLI, fix Unicode export, improve UX
2026-04-06ba4ba43Show MLX model download/loading progress in terminal
2026-04-0666a19b9Improve GLM-OCR progress: show model loading hint on first page
2026-04-069eb1f26Fix GLM-OCR dropdown label: say 'local' not 'API'
2026-04-06eb1061bstart.sh auto-launches GLM-OCR MLX server on Apple Silicon
2026-04-069c0804dGLM-OCR runs locally: MLX (Apple Silicon) or Ollama, no API key needed
2026-04-067f94496Add GLM-OCR as third OCR engine via Zhipu MaaS API
2026-04-05c16684dFix start.bat: window no longer vanishes on error
2026-04-04ae4d780Zero-install: bundle Node.js in release, auto-download if missing
2026-04-045223461Add Windows support and GitHub release workflow
2026-04-03092dc0aFix canvas render collision when changing pages quickly
2026-04-03fd95a52Add language selection, save/load, diff view, batch cleanup, keyboard nav, tests
2026-04-034c8559fPDF Workshop — split-screen PDF OCR workbench
2026-04-0358c3a0dInitial commit from Create Next App