Body progress

POST /v1/body/compare · $0.02 a call

Send two physique photos, before and after. Each is read the same way as the body analysis API, then compared with fixed rules. Small changes inside the normal photo to photo margin count as unchanged, so only real progress shows. The response also says when the two photos differ in pose, clothing, lighting or distance, which makes the comparison less fair.

For body transformation trackers, AI gym coaches, fitness challenges.

Request

Send two photos, before and after, as multipart files, or as before_url / after_url or before_base64 / after_base64. These fields go alongside them:

FieldTypeDescription
contextstring, up to 500 charactersAnything the user adds, e.g. "just woke up, flexed" or "6 months of training".
sexone of male, femalePicks the body fat reference chart. Taken from the photo when missing.
agenumber, 18 to 100Years. Used by the BMI-based estimate (default 30 when height and weight are given without it).
height_cmnumber, 100 to 250With weight_kg, adds a second body fat estimate from BMI (Deurenberg formula).
weight_kgnumber, 30 to 300With height_cm, adds a second body fat estimate from BMI.
goalone of cut, bulk, recomp, maintainAdds a goal-specific note to the training focus.

Photo tips. Same spot, same light, same distance and the same clothes for both photos. Stand relaxed, front view, arms slightly away from the body.

curl https://truelens.keronlabs.com/v1/body/compare \
  -H "Authorization: Bearer $TRUELENS_KEY" \
  -F before=@before-physique.jpg \
  -F after=@after-physique.jpg \
  -F context="example"

Response

FieldDescription
summaryOne line, e.g. "Body fat 17% to 14%, physique score 66 to 72, shoulders and arms up".
body_fatbefore, after, change in percentage points, and result (improved, worsened, unchanged). Changes under 1.5 points count as unchanged.
physique_scorebefore, after, change and result. Changes under 3 points count as unchanged.
muscles.<group>Score before and after (1 to 10) for groups visible in both photos.
muscles_improved, muscles_worsenedGroup names.
postureEach posture issue seen in either photo, with severity before and after.
comparable, comparability_warningsfalse, with reasons, when the photos differ in ways that make the comparison less fair.
before, afterThe full body analysis of each photo.

Example

Output of this API’s own code on a sample photo. Values will differ for your photos.

{
  "metadata": {
    "id": "req_9cf4da08fe7f40dab71a",
    "engine": "body/compare",
    "status": "success",
    "cached": false,
    "credits_used": 2,
    "created_at": "2026-10-19T09:30:00.000Z",
    "processing_ms": 3400
  },
  "summary": "Body fat 13% to 8.5%, physique score 75 to 78, shoulders and arms up",
  "body_fat": {
    "before": 13,
    "after": 8.5,
    "change": -4.5,
    "result": "improved"
  },
  "physique_score": {
    "before": 75,
    "after": 78,
    "change": 3,
    "result": "improved"
  },
  "muscles": {
    "shoulders": {
      "before": 6,
      "after": 7,
      "change": 1,
      "result": "improved"
    },
    "chest": {
      "before": 6,
      "after": 6,
      "change": 0,
      "result": "unchanged"
    },
    "arms": {
      "before": 6,
      "after": 7,
      "change": 1,
      "result": "improved"
    },
    "core": {
      "before": 5,
      "after": 5,
      "change": 0,
      "result": "unchanged"
    }
  },
  "muscles_improved": [
    "shoulders",
    "arms"
  ],
  "muscles_worsened": [],
  "posture": [
    {
      "issue": "rounded_shoulders",
      "before": "mild",
      "after": "none",
      "result": "improved"
    }
  ],
  "comparable": true,
  "comparability_warnings": [],
  "before": {
    "summary": "Physique 75/100 (Advanced), est. body fat 12 to 15%",
    "physique_score": 75,
    "level": "Advanced",
    "score_breakdown": {
      "muscle": 53,
      "leanness": 100,
      "symmetry": 78,
      "posture": 90
    },
    "body_fat": {
      "estimate": 13,
      "low": 11.5,
      "high": 14.5,
      "method": "visual",
      "visual": {
        "low": 11.5,
        "high": 14.5,
        "mid": 13
      },
      "bmi_based": null,
      "reference_chart": "male"
    },
    "muscles": {
      "shoulders": {
        "visible": true,
        "score": 6
      },
      "chest": {
        "visible": true,
        "score": 6
      },
      "arms": {
        "visible": true,
        "score": 6
      },
      "back": {
        "visible": false,
        "score": null
      },
      "core": {
        "visible": true,
        "score": 5
      },
      "legs": {
        "visible": false,
        "score": null
      }
    },
    "strongest": [
      "shoulders",
      "chest"
    ],
    "weakest": [
      "core"
    ],
    "symmetry": 8,
    "v_taper": {
      "waist_to_shoulder_ratio": 0.76,
      "category": "moderate"
    },
    "posture": [
      {
        "issue": "rounded_shoulders",
        "severity": "mild"
      }
    ],
    "training_focus": [
      "Add weighted crunches or cable crunches and hanging leg raises, 2 to 3 times a week."
    ],
    "confidence": 0.85,
    "warnings": [],
    "disclaimer": "Visual estimates for fitness tracking only. Not a medical assessment. For an accurate body fat number use DEXA or a similar measurement."
  },
  "after": {
    "summary": "Physique 78/100 (Advanced), est. body fat 7 to 10%",
    "physique_score": 78,
    "level": "Advanced",
    "score_breakdown": {
      "muscle": 58,
      "leanness": 97,
      "symmetry": 78,
      "posture": 100
    },
    "body_fat": {
      "estimate": 8.5,
      "low": 7,
      "high": 10,
      "method": "visual",
      "visual": {
        "low": 7,
        "high": 10,
        "mid": 8.5
      },
      "bmi_based": null,
      "reference_chart": "male"
    },
    "muscles": {
      "shoulders": {
        "visible": true,
        "score": 7
      },
      "chest": {
        "visible": true,
        "score": 6
      },
      "arms": {
        "visible": true,
        "score": 7
      },
      "back": {
        "visible": false,
        "score": null
      },
      "core": {
        "visible": true,
        "score": 5
      },
      "legs": {
        "visible": false,
        "score": null
      }
    },
    "strongest": [
      "shoulders",
      "arms"
    ],
    "weakest": [
      "core"
    ],
    "symmetry": 8,
    "v_taper": {
      "waist_to_shoulder_ratio": 0.76,
      "category": "moderate"
    },
    "posture": [],
    "training_focus": [
      "Add weighted crunches or cable crunches and hanging leg raises, 2 to 3 times a week."
    ],
    "confidence": 0.85,
    "warnings": [],
    "disclaimer": "Visual estimates for fitness tracking only. Not a medical assessment. For an accurate body fat number use DEXA or a similar measurement."
  },
  "disclaimer": "Visual estimates for fitness tracking only. Not a medical assessment. Photos taken the same way give the most reliable comparison."
}