Splitting a group receipt without an account
A group dinner, a holiday house shop, or a housemate warehouse run ends the same way: one person holds a photo of the receipt and everyone else needs a number they can actually pay. Mental math drops the tax. A shared-app split wants an account before it will store the lines. The amount you request has to come from the printed ticket, not from a rounded guess, because a few cents times six people is how someone quietly covers the rest.
In this tool the receipt is a table you control. You drop the photo or type the rows, name the people in the party, and assign each food line. Tax, tip, and discount sit as their own rows so they are not forgotten and not stuffed into the last person's total as leftover noise. When every item has a person, you copy a plain-text summary and paste it into the thread where the money will actually move.
A photo fills the table, you keep the pen
Phone photos of thermal paper are messy input. Tesseract, the open-source engine this page runs in your browser through WebAssembly, reads printed words best on sharp, evenly lit, high-resolution scans, and accuracy falls when the photo is skewed, noisy, or set in an unusual font.12 Treat the scan as a draft. The recognizer is there to type less, not to be trusted blindly.
How the parser classifies each line
Right-aligned prices become amounts, and the rest of the line becomes a label. Keywords such as tax, VAT, tip, and total are classified as they are found, so you are not assigning the grand total as if it were another burger, and a subtotal line is dropped rather than added as a duplicate item. That sorting happens once, right after recognition finishes, and every row lands in the table as one of four kinds: item, tax, tip, or discount.
Editing rows before you assign anyone
On a wide screen the photo stays next to the rows, and on a phone it sits above them, so you check print against pixels instead of reconstructing the meal from memory. Because a missed beer costs more than an extra tap, the table stays fully editable after recognition. Add item, Add tax, Add tip, and Add discount each drop in a blank row of that exact kind, and the × button on any row removes it outright. Type an amount the field cannot read as a number and it stays exactly as you typed it, flagged rather than guessed at, and that row drops out of every total until the number parses. Enter items by hand skips recognition entirely when you already know the rows, or when the photo is too poor to bother.
The party itself is just as editable as the rows are. Add person appends another name field, up to twelve people total, while the × button beside a name removes them, though the tool always keeps at least two names on screen so a split still has someone to compare against. Renaming a person updates every place that name appears at once, in the assign menus, the pinned remainder rows, and the per-person totals further down the page.
One person, equal share, or integer weights
Each food line has three honest states. Press one name and that person owes the whole amount. Press a second name and the line splits equally, which is the shared starter, the bottle, or the plate that two people pointed at. When two or more names are selected, integer weight fields appear so a 2-to-1 split is a pair of numbers you can see, not a private ratio you hope everyone remembers the same way.
A weight of zero leaves that person out of the line without clearing the rest of the share. Clearing the last selected name returns the row to unassigned, and Copy summary stays off until every non-zero item has someone. That rule is the whole point of the tool: you should not paste a total that still contains an orphaned entrée. Blank unused item rows do not count, so an extra empty line will not block the copy.
Tax, tip, and discount after the food
Tax and tip are not food. Treating them as another item you happen to assign last is how the person who paid the card gets stuck with them. Evenly divides those rows across everyone in the party, including someone who only drank tap water. By share of subtotal uses each person's assigned food total as the weight, so the person who ordered the steak carries more of the tax than the person who ordered a side. A currency field sits next to those two rules, and swapping it from $ to another symbol changes how every amount is written from that point on, in the table, the per-person totals, and the copied or downloaded summary alike.
On some tables one person wants the tip. Pin that remainder row to their name and the remainder rule leaves it alone, which is the right move when one person is covering service for the group. Discount rows subtract instead of add, and they follow the same rule or pin, which keeps a coupon from vanishing into the subtotal. Amounts of zero stay out of the copied summary so an unused tip line does not print as $0.00 next to someone who does not owe it.
Matching the printed total in cents
Floating-point money lies in small ways. Three people splitting $10.00 is 333.333… cents each, and if every app rounds the same direction, a cent appears or disappears. This tool stores every amount as an integer number of cents and splits a line with the largest remainder method so the shares of that line sum to the line itself.3 After tax, tip, and discount are applied, a last one-cent adjustment lands on the person with the largest food total if stacked rounding still drifts.
The printed total on the receipt is a separate field because OCR can miss a line or invent one. Type the number from the bottom of the ticket. When it disagrees with the sum of the rows by a cent or more, the totals strip warns you before anyone pays. Matching those two figures is the check that a split app cannot do if it never saw the paper, and it is the check a language model skips when it helpfully rounds.
The receipt stays in this tab
A receipt is a list of what you bought, often with a card hint at the bottom. Sending that photo to a split service or an online OCR API is a different privacy decision from splitting the bill. Inside this tab the decode step, including HEIC photos from an iPhone via a WebAssembly decoder, runs without a server round trip.4 Recognition uses the same local Tesseract worker path already on this site, with English language data cached by the browser rather than a per-receipt upload.5 Nothing is saved when you close the tab, and there is no account and no file download of the photo itself.
What Copy summary and Download .txt produce
The output only leaves the page when you ask for it, and it reads the same way wherever it lands: each person gets their own block, a blank line separates one person from the next, and a final uppercase TOTAL line closes out the summary. Copy summary writes that text straight into your system clipboard so you can paste it into a message, while Download .txt saves the identical text as a plain-text file for anyone who would rather attach a document than paste one.6 Both buttons stay disabled until every item has a person, so neither one can hand out a summary with a mystery entrée still sitting in it. Start over revokes the preview URL and drops the rows, which is the right ending for a working copy of a receipt you did not mean to keep.
- 1.
Tesseract OCR Project, "Tesseract User Manual," tesseract-ocr.github.io, accessed September 2026. https://tesseract-ocr.github.io/tessdoc/
- 2.
Tesseract OCR Project, "Improving the quality of the output," tesseract-ocr.github.io, accessed September 2026. https://tesseract-ocr.github.io/tessdoc/ImproveQuality.html
- 3.
"Largest remainder method," Wikipedia, accessed September 2026. https://en.wikipedia.org/wiki/Largest_remainder_method
- 4.
jSquash, "@jsquash/heic," github.com, accessed September 2026. https://github.com/discourse/jSquash/blob/main/packages/heic/README.md
- 5.
naptha, "Tesseract.js performance guide," github.com, accessed September 2026. https://github.com/naptha/tesseract.js/blob/master/docs/performance.md
- 6.
Mozilla Developer Network, "Clipboard.writeText()," developer.mozilla.org, accessed September 2026. https://developer.mozilla.org/en-US/docs/Web/API/Clipboard/writeText