Home › Guides › Workout program from a photo

How Liftspan Builds a Workout Program From a Photo

Take a picture of a workout program, a coach's sheet, a page from a book, the whiteboard at your gym or a screenshot, and Liftspan turns it into a program it coaches you through: every move matched, your reps kept, starting weights set, swaps for anything that loads a joint you told it about. This is the full breakdown of how it works, for anyone who wants to see the wiring.

Every training app I have used had the same worst part. A new block starts and you lose an evening typing the whole program in, exercise by exercise, set by set. I built this so that part takes a photo. Then I kept going, because a program you typed in is just a list. The interesting part is what happens after it is read.

Try it free in your browser →

The real thing, start to finish: a whiteboard photo read, matched and coached. The read took 18 seconds; the video speeds that part up. Watch on YouTube

The short version

  1. You take a photo or paste the text.
  2. An AI model reads it and maps every line onto Liftspan's library of 267 moves.
  3. You check it. Anything it is unsure about is marked, with alternatives.
  4. Liftspan fills in the coaching: your goal, starting weights, rest times, swaps for your joints, progression and deload weeks.
  5. You train it. From the first session, the weights move when you earn it.
Liftspan Snap your program screen with a photo of a printed 3-day workout sheet and a Read my program button
A printed 3-day sheet, photographed off a desk. New visitors start on this screen.

Step 1: reading the photo

Your phone shrinks the photo to 1,600 pixels on the long side before it leaves the device, which is plenty to read a printed sheet and keeps the upload small. Liftspan's server sends it to Claude, an AI model made by Anthropic, together with a compact copy of your exercise library: one line per move with its id, name, movement pattern and equipment. If you have added your own custom moves, they are in that list too.

The model is not asked for a chat reply. It has to fill in a fixed form: for every day, every line as written, the library move it matches, a confidence score from 0 to 1, up to three alternatives, and the sets, reps or hold time. The instructions it works to are short and specific:

The server then checks the answer before you see it. Any move id that is not in your library is thrown away, numbers are clamped to sane limits (1 to 10 sets, 1 to 100 reps, holds of 5 seconds to 10 minutes), and a program is capped at 7 days of up to 14 lines each.

Step 2: matching every line

A line becomes one of three things:

ResultWhenWhat you see
MatchedConfidence 0.7 or higherThe move, ready to go
Best guessMatched, confidence under 0.7Marked with a question mark, with alternatives and a "That's right" button
Could not matchNothing reasonable in the libraryThe line as written, with suggested moves that keep its sets and reps, or a search

So far it holds up well. Across the first five real imports, it read 90 lines and matched 88 of them to a move in the library. About one line in six was marked to check, which is what you want: the odd names get a second look, the obvious ones do not.

Liftspan Check your program screen: we read 18 lines, 18 matched, 2 to check; reads like a build muscle program; a high-risk move swapped for a safer one; keep their reps or use Liftspan's
Nothing is saved until you have looked it over.

Step 3: your reps, kept

By default Liftspan keeps the program's own rep targets and coaches you inside them. A range like 8 to 12 stays 8 to 12. A fixed number gets a little headroom, because progression needs room to work: reps climb inside the range first, then the weight goes up.

Written asLiftspan coaches
3 x 55 to 7 reps
3 x 88 to 11 reps
3 x 1010 to 13 reps
3 x 1515 to 20 reps
Plank 30 seconds30 to 45 seconds

The rule: 6 reps or fewer gets 2 extra, 7 to 12 gets 3, anything higher gets 5. Holds stretch to the longer of 15 more seconds or half as long again. If you would rather train to Liftspan's ranges for your goal, one tap switches every move over.

Step 4: working out what the program is for

When you start with a photo, Liftspan does not ask you why you train. It reads the answer off the program. It takes the typical rep target across every move (the median, so one odd line does not skew it) and sorts the program into one of three goals:

Typical repsGoalRest between setsMoves you add later
6 or fewerGet stronger3 minutes4 sets of 4 to 6
7 to 12Build muscle1 minute 453 sets of 8 to 12
13 or moreLose fat1 minute3 sets of 12 to 15

The goal also nudges starting weights (a little heavier for strength, lighter for high-rep work) and decides whether Liftspan pairs opposing moves into supersets to save time: yes for muscle and fat loss, no for strength, where a heavy set deserves your full rest and attention. Your own reps are never changed by this, and you can change the goal in Settings any time.

Step 5: substitutions, and how a swap is chosen

Liftspan grades every move in its library for risk and for the five areas people most often need to work around:

FlagWhat it keeps out
Lower backLoaded spinal flexion and unsupported bent-over work
ShouldersBehind-the-neck work, upright rows, dips and overhead pressing
KneesOpen-chain extension, deep flexion and impact
HipsWide-stance and deep-flexion loading
Wrists and elbowsStraight-bar curls, front-rack and hand-loaded holds

When you import, any move rated high risk is swapped for a safer one before you save, and if you have already told Liftspan about a joint, so is anything that loads it. Every swap shows what it replaced, with a one-tap button to keep the original. It is your program. If you are new and tell Liftspan about a joint after the import, it does not quietly rewrite what you just checked: those moves are marked in the workout, each with a named swap one tap away.

A Liftspan workout card for Stiff-Legged Dumbbell Deadlift with a lower back warning and a Use Bird Dog button
A move that loads your lower back, with the swap one tap away.

How the replacement is picked: many moves in the library carry a hand-picked safer alternative, and that is used first if it works in the room you train in and is not already in that day. Otherwise Liftspan scores every move you can do there and takes the best fit. A lower score wins:

SignalScore
Same movement pattern (a press for a press, a hinge for a hinge)−10
Same main muscle−6
Works any of the same muscles−2
Compound stays compound, isolation stays isolation−2
Same equipment−1
Less common move (staples are preferred)up to +4 per step
Riskier than the move it replaces+6
Jumping or cardio move+12

A timed hold only ever swaps for another timed hold, and a rep-based move for another rep-based move, so a set of presses never turns into a plank.

Step 6: starting weights

After the import, Liftspan asks two quick things: your experience, birth year and bodyweight, then anything to train around. That is enough to set a starting weight for every move you have never logged:

Starting weight = bodyweight × a share for the main muscle × compound or isolation × dumbbell or not × experience × joint-friendly × goal, then rounded to a weight you can actually load.

FactorValues
Share for the main muscleQuads and calves 0.35, chest, back, glutes and traps 0.30, hamstrings 0.28, shoulders 0.14, triceps 0.13, biceps 0.12, core 0.10
Compound or isolation1 or 0.55
Dumbbell (per hand)0.42
ExperienceNew or returning 0.55, a year or two 0.75, experienced 0.95
Joint-friendly mode0.85 (on automatically from 50, or whenever you switch it on)
GoalGet stronger 1.12, build muscle 1, lose fat 0.8

For a 190 lb lifter who is new or coming back, that works out to 15 lb dumbbells per hand on the bench press, a 15 lb goblet squat, and the empty 45 lb bar for a barbell squat, because a barbell lift never starts below the bar. Weights land on what you own: 5 lb dumbbell steps, 5 lb on the bar, 10 lb on a machine stack, or your own increments if you set them. These are deliberately cautious first guesses. The first session tells Liftspan more than any formula.

Liftspan Your first workout card: six moves with sets, reps and starting weights, moves that load the shoulders marked with a warning sign, and a Start button
The first workout from the imported program, with starting weights filled in.

Step 7: progression and deloads

From here it is a normal Liftspan program. Each move uses double progression: you add reps inside the range, and when you hit the top, the weight goes up and the reps drop back to the bottom. If the next weight up is too big a jump for you to hit the bottom of the range, the reps keep climbing past the top for a few more sessions (3 to 5 extra) until you have earned it.

What it does not do yet

Privacy and limits

Your photo or text goes to Liftspan's server and to Anthropic only to build the program, and it is not kept afterwards. Liftspan stores a count of your imports, not what was in them, and the program you save is private to your account. Only import programs you have the right to use. Your first import is free, Pro includes 10 a month, and an import that fails to read does not use one up. The full details are in the privacy policy.

Snap your program →

Common questions

Can I take a picture of a workout and turn it into a program?

Yes. In Liftspan, take a photo of the program, or a screenshot, or paste the text. It reads every line, matches each move to its library, keeps your sets and reps, and turns it into a program it coaches you through, with starting weights, progression and deload weeks. Your first import is free.

Does it read handwriting?

Usually, if it is reasonably clear. Printed sheets, whiteboards and screenshots read best. Anything it cannot read is listed separately so you can fix it before saving.

What if it matches the wrong exercise?

Moves it is less sure about are marked as a best guess with alternatives. You can pick another move or search the library before you save. Nothing is saved until you check it.

Does it change my program?

It keeps your days, moves, sets and reps. It only swaps moves rated high risk, or that load a joint you told it about, and every swap has a one-tap button to keep the original.

Is my photo stored?

No. It is sent to Liftspan's server and to Anthropic only to read it, and it is not kept afterwards. Liftspan keeps a count of your imports for the monthly limit.

🏋️
Dave Newman
Founder of Liftspan. Came back to lifting in his 40s and has kept at it since. Built Liftspan because every other strength app assumed everyone training is 25 and injury-free. Not a doctor: when something hurts, see one.

Keep reading: a 3 day full body plan with a printable sheet · the science of training after 40 · lifting with a bad shoulder · all guides