BylinaRounds 1.0.0
A single offline web page that tracks lettering correction rounds for comics. Lock the script you lettered, import the writer's revision, review every change against the page/panel/balloon IDs you already lettered, export a correction packet, then lock the round. Repeat for each revision.
Prerequisites and what was tested
- A current desktop browser. Tested: Google Chrome 152.0.7977.82 on Linux (Ubuntu, kernel 5.15), including a run with all networking disabled. Other browsers were not tested.
- No installation, account or internet connection. Unzip
BylinaRounds-1.0.0.zipanywhere and openBylinaRounds.html. - Scripts in the bounded grammar below (Word
.docxor plain text).
First result in two minutes (built-in example)

- Click Load example: Saltmarsh Courier (round 0). The page shows 4 pages, 11 panels, 24 lettered items.
- One line needs your decision: the painted sign
GULL ROCK — KEEP CLEAR
starts with a quote, so it could be lettering. It is art direction: click Not lettered. Locking is disabled until every flagged line is decided.

- Click Lock round 0 (baseline).
- Click Load example revision (round 1). The sign decision is carried over because the same line appears again.
- Review the 10 change rows (expected: 2 edited, 1 speaker, 1 style, 1 emphasis, 1 moved, 3 added, 1 deleted; 24 old − 1 deleted + 3 added = 26 new). The writer inserted a new page 3, so lettered pages 3 and 4 are now pages 4 and 5.

- Accept each row (button or A), or use Accept unflagged on this page. When 0 rows are open, export unlocks.

- Click Download packet (.zip) (all files below in one ZIP), then Lock correction round 1. Load the round 2 example to see punctuation-only corrections, a split caption, a merged balloon and two moved balloons (10 rows to decide). The script has two identical
DONNG
sound effects and one was deleted; which copy is only a proposal, so both rows are marked Check pairing.

The expected answers for both rounds are in samples/EXPECTED.json and the reference outputs in expected-outputs/.
Using your own scripts
- Type the book title at the top (it names your files).
- Click Choose script… (or drop the file on the page) and pick the exact version you lettered. Decide any flagged lines, check the page list, then lock round 0.
- When a revision arrives, import it, review, export, lock. Save the book after each lock.
Supported formats (bounded grammar)
| Input | What is read |
|---|---|
Word .docx | Body paragraphs, bold/italic/underline runs, list numbering. Headers, footers, comments, footnotes/endnotes and images are listed under “Excluded from comparison”. Refused with a message: tracked changes (accept or reject them first), encrypted/password files, legacy .doc, damaged ZIPs, unsafe entry names, DTD/entity declarations and oversized decompression. |
Plain text .txt, .md, .fountain | UTF-8 text (byte-order mark optional) or UTF-16 with a byte-order mark. Emphasis markers: *italic* or _italic_, **bold** or __bold__, ***bold italic***. Unpaired markers stay in the text and are reported. |
Grammar: page headings such as PAGE ONE or PAGE 1; panel headings such as Panel 1.; lettered lines as NAME: text, optionally numbered (3. OSKAR: …) and with a style in parentheses (HESTA (OFF): …). Other paragraphs are panel descriptions. PDF input is not supported. Compatibility with Microsoft Word or Google Docs exports was not tested; the DOCX samples were generated with Python's standard library.
| Limit (each tested at N and N+1) | Value |
|---|---|
| Script file size | 8 MiB |
| Lines / paragraphs per script | 30,000 |
| Pages per script | 200 |
| Lettered items per script | 3,000 |
| Characters per lettered item | 2,000 |
Archive entries in a .docx | 1,000 |
XML read from one .docx (decompressed) | 32 MiB |
| Rounds per book | round 0 plus 12 correction rounds |
| Saved book file | 64 MiB |
Reviewing a revision
- Change types: Text edited, Punctuation / spacing, Speaker changed, Balloon style changed, Emphasis changed, Moved, Split, Merged, Added, Deleted. Capitalisation, punctuation, curly quotes, ellipses and spacing are treated as real corrections.
- Added rows say which lettered item they go after. Inserted, removed and renumbered pages are shown in the page list (
p.3 → 4). - Re-pair… (R) pairs an item with 1 item, or 2–3 items for a split/merge; superseded Added/Deleted rows disappear and other decisions are kept. Unpair (X) breaks a pair into Deleted + Added. No lettering change (N) records that a detected change needs no re-lettering. Undo/Redo (Z/Shift+Z, or Ctrl+Z/Ctrl+Y).
- Keys J/K/A/N/X/R/Z work only when you are not typing in a field.

Export, save and reopen
| File | Use |
|---|---|
*-corrections.json | Canonical data with exact texts and IDs. |
*-corrections.csv | Exact texts (RFC 4180). |
*-corrections-spreadsheet-safe.csv | Cells starting with = + - @ get a leading apostrophe so spreadsheets do not run them. Texts here are not exact. |
*-paste-pack.txt | Plain text to paste into your lettering file. Plain text cannot carry bold/italic, so emphasis is listed on an EMPHASIS: line for you to apply. |
*-paste-pack.html | The same texts with bold/italic/underline applied, to copy with formatting. |
*-ledger.csv | Page lineage for the round: old page, new page, items on each, change rows. |
*-corrections.html / Print | Printable packet: instructions, page map, tick boxes, IDs, word differences and rich emphasis. |
manifest.json | SHA-256 of every file in the packet ZIP. |
Save book downloads title.bylina.json with every locked round, the original script bytes, your line decisions and pairings — and, if you are mid-review, the unlocked script with its decisions so far. The file carries SHA-256 fingerprints of the whole book (title, every round, the unlocked script and its decisions) and of each round in a chain. Open book… checks those fingerprints, re-reads and re-parses every stored script and restores the open review. A book changed in any way after it was saved — even one decision or the title — is refused. The fingerprints use no password or secret key: they catch accidental and casual edits, not someone who deliberately recomputes them, so keep books where only you can change them. Your source scripts are only read, never modified.
A book holds round 0 plus 12 correction rounds and can be up to 64 MiB. BylinaRounds refuses to lock a 13th correction round, or a round that would make the book larger than 64 MiB, and will not save a book it could not reopen. When that happens, export the round’s corrections and start a new book with the latest script as round 0.
Troubleshooting
| Message or symptom | Fix |
|---|---|
| “contains tracked changes” | Accept or reject all changes in your word processor, save a copy, import the copy. |
| “No PAGE headings were found” | Add headings like PAGE ONE on their own line. |
| Lines that need your decision | Pick New lettered item, Join previous balloon, Speaker cue or Not lettered. Lock stays disabled until all are decided. |
| A change paired with the wrong balloon | Use Re-pair… or Unpair; Undo reverses it. |
| Export buttons are disabled | Some rows are still open; the page list shows the count per page. |
| “legacy Word .doc or encrypted” | Save as .docx without a password. |
| Print window blocked | Download the HTML packet and print it. |
| “This book was changed after BylinaRounds saved it” or “has no whole-book fingerprint” | The file was edited (by hand, a script or a sync tool) or saved by a pre-release build. Open the copy exactly as BylinaRounds saved it. |
| “already holds 12 correction rounds” or “would make the book … can be reopened” | The book is full. Export this round’s corrections, then start a new book with the latest script as round 0. |
Privacy
BylinaRounds runs entirely in your browser tab. Its content-security policy blocks all network connections; it uses no storage API, cookies or analytics. Nothing is kept after you close the tab unless you download it.
Uninstall
Delete the unzipped folder. Saved books and exports are ordinary files wherever you downloaded them.
Limitations
- Tested only in Google Chrome 152 on Linux. Other browsers and operating systems are untested.
- Matching proposals can be wrong for heavily rewritten pages; every change needs your decision, and rows marked “Check pairing” need particular care.
- No direct integration with lettering applications; you paste or retype corrections.
- Not a general Word or Fountain parser: unsupported layouts may be flagged, refused or misread as descriptions — always check the page list before locking.