1. Getting Started — Profiles
A profile represents a bowler. Every saved game is attached to one profile, so you need at least one before you can record games.
Create a profile
- Open the Profiles tab (rightmost tab).
- Tap + in the top-right corner.
- Enter a name and tap Add.
Rename a profile
- Tap the profile in the list to open its detail page.
- Tap the pencil icon in the top-right corner.
- The existing name is pre-selected — start typing to replace it, or use the cursor to make minor edits.
- Tap Save.
Delete a profile
On the Profiles list, swipe left on a profile and tap Delete. This also deletes all games associated with that profile.
2. Snap Tab — Import from a Photo
The Snap tab uses your camera (or photo library) to read a bowling center scoreboard and extract per-player scores automatically.
Step 1 — Capture the scoreboard
Tap the Snap tab (center tab, camera icon).
- Take Photo — opens the camera. Frame the entire scoreboard and tap the shutter button.
- Choose from Library — pick an existing photo from your photo library.
After you provide a photo, a processing overlay appears while the OCR pipeline runs. The app automatically tries up to 27 preprocessing strategies — including image upscaling, binarization, and inverted color passes — then fuses the best results and picks the winner. This may take 10–15 seconds depending on the photo.
Step 2 — Review Scores
The Review Scores screen shows one row per player detected on the scoreboard.
Each player row shows:
- The player name detected by OCR (used as a hint only — you will assign the real profile below).
- A toggle (on by default) — turn it off to exclude that player from saving.
- A full 10-frame scorecard showing the extracted rolls and running cumulative scores.
- An "Assign to" picker — select an existing profile or leave it as New Profile to create one automatically using the detected name.
- An orange "Score discrepancy" warning if the cumulative totals on the scoreboard don't match what the scoring engine calculates from the extracted rolls. This is a signal to review that player's frames.
If no players are detected, you will see a "No Players Detected" message. Try a clearer photo with better lighting and the full scoreboard visible.
Low-confidence result: An orange warning banner appears at the bottom if the OCR pipeline wasn't confident about the extraction. Review all frames carefully.
Step 3 — Correct OCR errors
Tap any frame cell on a player's scorecard to open the frame editor.
Frame editor:
- Frames 1–9 show 2 roll chips at the top; frame 10 shows 3 roll chips.
- The active chip (highlighted in blue) is the roll you are editing.
- Use the pin keypad (buttons 0–10) to set the pin count in one tap. Buttons that would produce an impossible result are grayed out automatically.
- Tap any roll chip to jump back to an earlier roll and correct it.
- After tapping a button the editor automatically advances to the next roll chip.
- The notation display below the chips updates live, showing X for strike, / for spare, – for zero, and digits for all other values.
- Tap Done to apply and return to the review screen.
After editing, the scorecard and discrepancy indicator update immediately.
Inserting a missing frame
Bowling scoreboards sometimes display a circle around a pin count to indicate a split. The OCR pipeline may skip that frame entirely, leaving a player with fewer than 10 frames detected.
When this happens, an orange warning appears below the player's scorecard:
"N of 10 frames detected" [Insert Frame]
Tap Insert Frame to open the insertion sheet:
- The sheet lists all currently detected frames in order, showing each frame's roll notation (X, /, digits).
- Between every pair of frames — and before the first and after the last — there is a blue "+ Insert …" row.
- Tap the position where the skipped frame belongs. A blank frame
[0, 0] is inserted there and all subsequent frames shift right by one.
- The sheet closes automatically and the new blank frame appears in the scorecard. Tap it to edit its rolls using the pin keypad.
You can repeat this process if more than one frame was skipped. The orange banner disappears once all 10 frames are present.
Step 4 — Save
Tap Save (top-right) to save all kept players as games. Each player's game is linked to its assigned profile. If a player was set to New Profile, a new profile is created automatically using the detected name. You can rename it later in the Profiles tab.
The original photo (compressed) is saved alongside each game and will appear as a thumbnail in the game's detail view.
Tapping Cancel discards all detected data and returns to the Snap tab.
Grid Inspector (advanced / debugging)
Tap the grid circle icon (⊞) in the toolbar on the Review Scores screen to open the Grid Inspector. This diagnostic tool shows four sections:
- Preprocessing Passes — up to 27 preprocessing strategies (A–S, varying gamma, contrast, sharpening, minimum text height, image upscaling, binarization, and .fast recognition level) with the exact-match count for each. A green checkmark marks the winner. A "FUSED" entry appears when the selective fusion of top-performing passes produced the best result. If every pass shows 0 exact matches, the missing cells are below Vision's detection floor for that photo — a clearer photo is needed.
- Raw Vision Observations (pre-cluster) — every text region Vision detected, sorted top-to-bottom, before any row grouping. Observations in orange show alternative OCR candidates that were considered but not selected. Comparing this list across passes tells you whether preprocessing is the bottleneck or Vision itself.
- Raw Vision Grid (post-cluster) — the same observations after
SpatialGridAnalyzer groups them into player rows. Each row shows its cells with X/Y positions.
- Parsed Players — frame-by-frame rolls with computed vs. detected cumulative scores. Mismatches are shown in orange.
Use the Export button in the Grid Inspector toolbar to share all four sections as plain text — helpful for diagnosing stubborn OCR errors.
3. Manual Tab — Enter Scores by Hand
The manual entry flow is accessed from the Home tab by tapping + in the top-right corner.
Set up bowlers
- Tap Add Bowlers.
- Tap each profile in turn order — a circled number appears showing their position in the rotation. Tap again to remove.
- Tap Done.
You must create profiles in the Profiles tab before they appear here.
Bowling center (optional)
Tap the location field below the scorecards and type the bowling center name. Tap the X to clear it.
Entering rolls
A pin pad appears at the bottom of the screen showing the rolls available for the current bowler and frame. The active bowler is indicated by a blue dot next to their name.
- For frames 1–9: tap the number of pins knocked down on each roll. If the first roll is a strike, the frame advances automatically.
- For frame 10: up to 3 rolls may be available depending on whether you bowl a strike or spare.
- Buttons are automatically disabled when they would result in an impossible total (e.g. you can't knock down 7 pins on roll 2 if you only left 6 standing).
The scorecards for all bowlers update in real time. Cumulative scores appear as soon as enough future-frame data exists for the engine to calculate them.
Correcting a frame
Tap any already-filled frame cell on any bowler's scorecard. That frame is cleared and the entry cursor jumps back to it. Frames after the corrected one remain saved and the engine skips over them automatically once the corrected frame is re-entered.
Mid-game lineup changes
Once scoring has started, tap Edit Lineup (pencil icon above the scorecards) to:
- Reorder bowlers (drag handles on the left).
- Remove a bowler (swipe left to delete).
- Add a bowler who wasn't in the original lineup (tap Add Bowler in the toolbar).
Removed bowlers' partially-entered frames are discarded. Added bowlers start with empty frames and are placed at the end of the rotation.
Game complete
When all bowlers have finished all 10 frames, a Game Complete screen appears showing final scores. Tap Save in the toolbar to persist the game. Tap Cancel to discard (a confirmation prompt appears if any rolls have been entered).
4. Home Tab
The Home tab shows your most recent games (up to 10).
- Profile filter strip — if you have multiple profiles, a horizontal chip strip appears at the top. Tap a name to filter the list to that profile. Tap All to see everyone's games.
- Tap any game row to open its Game Detail view.
- Tap + in the top-right corner to start a new manual game.
5. History Tab
The History tab shows all saved games, newest first.
- Profile filter — same chip strip as Home. Tap a name to filter.
- Tap any game row to open the Game Detail view.
- Delete a game — tap Edit (top-left), then tap the red delete button, or swipe left on a game row.
Game Detail
Tapping a game shows:
- Player name, date, time, and bowling center (if recorded).
- An Incomplete game warning (orange) if the game didn't reach a final score.
- Source photo thumbnail for OCR-imported games.
- A scrollable 10-frame scorecard (strikes highlighted red, spares highlighted blue).
- Final score colored by performance (blue ≥ 150, green ≥ 200, gold ≥ 270).
- A Frame Breakdown grid showing each frame's individual score and rolls.
- Delete button (trash icon in the toolbar) with confirmation prompt.
6. Stats Tab
The Stats tab shows analytics for one profile at a time.
If you have more than one profile, a profile chip strip appears at the top. The stats update immediately when you switch profiles.
Summary cards
| Stat | Description |
| Avg (All-Time) | Mean final score across all complete games |
| Avg (Last 10) | Mean final score for the 10 most recent complete games |
| High Game | Highest single-game score |
| High Series | Best three-consecutive-game total |
Incomplete games are excluded from all calculations.
Score History chart
A line chart of final scores over time, with a dashed horizontal line showing the all-time average. Appears when there are at least 2 complete games.
Strike Rate by Frame
A bar chart showing what percentage of rolls resulted in a strike for each of frames 1–9. Useful for identifying which frames consistently give you trouble.
Spare Conversion
The percentage of non-strike leave frames that were converted to spares. Excludes frame 10 bonus rolls.
Export CSV
Tap Export CSV to share a spreadsheet of all complete games for the selected profile. The export includes date, location, final score, and frame-by-frame detail.
7. Profiles Tab
The Profiles tab is where you manage all bowler profiles.
- Create — tap + (top-right).
- Delete — swipe left on a profile, or tap Edit (top-left) to enter edit mode.
- Tap a profile to open its detail page.
Profile detail page
Shows:
- Summary section: average score, high game, and total games recorded.
- Games section: full history of that profile's games, sorted newest first. Tap any game to open Game Detail.
- Rename — tap the pencil icon (top-right). The existing name is pre-selected; start typing to replace it entirely or reposition the cursor to edit part of it.
8. Tips for Better OCR Results
The OCR pipeline works best under these conditions:
- Fill the frame with the scoreboard. The less wasted space around the scoreboard, the better Vision can resolve individual frame cells.
- Avoid extreme angles. Shoot as straight-on as possible. Slight angles are corrected automatically, but severe skew reduces accuracy.
- Steady the phone. Motion blur is the most common cause of misread characters, especially
X (strike), / (spare), and single digits.
- Adequate lighting. Bowling alleys are often dim. If the display is backlit, that's usually fine — avoid shooting against strong overhead glare that washes out the screen.
- Both dark and light scoreboards are supported. The app tries up to 27 preprocessing strategies including image inversion, gamma adjustment, 2× upscaling, binarization, and varying sharpness levels. It then selectively fuses the best-performing passes and picks whichever result produces the best score alignment. No manual setting is needed.
- Include the full scoreboard, not just one lane. Cropping out player names or cumulative score rows can confuse the row-pairing logic.
- Check the discrepancy warning. An orange "Score discrepancy detected" label on a player row means the cumulative totals on the board don't match what the engine calculated. Tap individual frame cells to find and correct the misread.
- Use the Grid Inspector when something looks wrong but you can't figure out why. The raw Vision observations show you exactly what text the phone saw and where, before any parsing logic ran.
Common OCR misreads and how to fix them
| Misread | Actual | Fix |
0 showing as a spare or wrong value | Was O or 0 confused | Tap the frame cell, correct with the pin keypad |
Frame shows 1 – instead of X | X read as I or 1 | Tap the frame cell, set roll 1 to 10 |
| Player has fewer than 10 frames | OCR skipped a circled-split frame | Tap Insert Frame in the orange banner; pick the position; edit the new blank frame |
| Extra player row appears | Two scoreboard rows merged, a header row detected, or a ball-name display row ("House Ball") picked up | Toggle that player slot off before saving |
| Cumulative scores off but rolls look right | OCR picked up wrong number from adjacent column | Ignore — the engine recalculates from rolls; detected scores are display-only |