notshot.ai labs

🛠 IN-FLIGHT

20260530-identity-body-multiface-v1

20260530-identity-body-multiface-v1
No SUMMARY.md in this run dir. An operator landing here can't tell what the run was about without digging through the files below. To fix, drop a SUMMARY.md following the template.

Images (56)

FLUXPLD-FA-P0-front-full-S19023.png
FLUXPLD-FA-P0-front-full-S19023.png
FLUXPLD-FA-P0-front-full-S42.png
FLUXPLD-FA-P0-front-full-S42.png
FLUXPLD-FA-P0-front-full-S7301.png
FLUXPLD-FA-P0-front-full-S7301.png
FLUXPLD-FA-P1-back-full-S19023.png
FLUXPLD-FA-P1-back-full-S19023.png
FLUXPLD-FA-P1-back-full-S42.png
FLUXPLD-FA-P1-back-full-S42.png
FLUXPLD-FA-P1-back-full-S7301.png
FLUXPLD-FA-P1-back-full-S7301.png
FLUXPLD-FA-P2-upper-front-S19023.png
FLUXPLD-FA-P2-upper-front-S19023.png
FLUXPLD-FA-P2-upper-front-S42.png
FLUXPLD-FA-P2-upper-front-S42.png
FLUXPLD-FA-P2-upper-front-S7301.png
FLUXPLD-FA-P2-upper-front-S7301.png
FLUXPLD-FB-P0-front-full-S19023.png
FLUXPLD-FB-P0-front-full-S19023.png
FLUXPLD-FB-P0-front-full-S42.png
FLUXPLD-FB-P0-front-full-S42.png
FLUXPLD-FB-P0-front-full-S7301.png
FLUXPLD-FB-P0-front-full-S7301.png
FLUXPLD-FB-P1-back-full-S19023.png
FLUXPLD-FB-P1-back-full-S19023.png
FLUXPLD-FB-P1-back-full-S42.png
FLUXPLD-FB-P1-back-full-S42.png
FLUXPLD-FB-P1-back-full-S7301.png
FLUXPLD-FB-P1-back-full-S7301.png
FLUXPLD-FB-P2-upper-front-S19023.png
FLUXPLD-FB-P2-upper-front-S19023.png
FLUXPLD-FB-P2-upper-front-S42.png
FLUXPLD-FB-P2-upper-front-S42.png
FLUXPLD-FB-P2-upper-front-S7301.png
FLUXPLD-FB-P2-upper-front-S7301.png
IPAFID-FA-P0-front-full-S19023.png
IPAFID-FA-P0-front-full-S19023.png
IPAFID-FA-P0-front-full-S42.png
IPAFID-FA-P0-front-full-S42.png
IPAFID-FA-P0-front-full-S7301.png
IPAFID-FA-P0-front-full-S7301.png
IPAFID-FA-P1-back-full-S19023.png
IPAFID-FA-P1-back-full-S19023.png
IPAFID-FA-P1-back-full-S42.png
IPAFID-FA-P1-back-full-S42.png
IPAFID-FA-P1-back-full-S7301.png
IPAFID-FA-P1-back-full-S7301.png
IPAFID-FA-P2-upper-front-S19023.png
IPAFID-FA-P2-upper-front-S19023.png
IPAFID-FA-P2-upper-front-S42.png
IPAFID-FA-P2-upper-front-S42.png
IPAFID-FA-P2-upper-front-S7301.png
IPAFID-FA-P2-upper-front-S7301.png
IPAFID-FB-P0-front-full-S19023.png
IPAFID-FB-P0-front-full-S19023.png
IPAFID-FB-P0-front-full-S42.png
IPAFID-FB-P0-front-full-S42.png
IPAFID-FB-P0-front-full-S7301.png
IPAFID-FB-P0-front-full-S7301.png
IPAFID-FB-P1-back-full-S19023.png
IPAFID-FB-P1-back-full-S19023.png
IPAFID-FB-P1-back-full-S42.png
IPAFID-FB-P1-back-full-S42.png
IPAFID-FB-P1-back-full-S7301.png
IPAFID-FB-P1-back-full-S7301.png
IPAFID-FB-P2-upper-front-S19023.png
IPAFID-FB-P2-upper-front-S19023.png
IPAFID-FB-P2-upper-front-S42.png
IPAFID-FB-P2-upper-front-S42.png
IPAFID-FB-P2-upper-front-S7301.png
IPAFID-FB-P2-upper-front-S7301.png
PULID-FA-P0-front-full-S19023.png
PULID-FA-P0-front-full-S19023.png
PULID-FA-P0-front-full-S42.png
PULID-FA-P0-front-full-S42.png
PULID-FA-P0-front-full-S7301.png
PULID-FA-P0-front-full-S7301.png
PULID-FA-P1-back-full-S19023.png
PULID-FA-P1-back-full-S19023.png
PULID-FA-P1-back-full-S42.png
PULID-FA-P1-back-full-S42.png
PULID-FA-P1-back-full-S7301.png
PULID-FA-P1-back-full-S7301.png
PULID-FA-P2-upper-front-S19023.png
PULID-FA-P2-upper-front-S19023.png
PULID-FA-P2-upper-front-S42.png
PULID-FA-P2-upper-front-S42.png
PULID-FA-P2-upper-front-S7301.png
PULID-FA-P2-upper-front-S7301.png
PULID-FB-P0-front-full-S19023.png
PULID-FB-P0-front-full-S19023.png
PULID-FB-P0-front-full-S42.png
PULID-FB-P0-front-full-S42.png
PULID-FB-P0-front-full-S7301.png
PULID-FB-P0-front-full-S7301.png
PULID-FB-P1-back-full-S19023.png
PULID-FB-P1-back-full-S19023.png
PULID-FB-P1-back-full-S42.png
PULID-FB-P1-back-full-S42.png
PULID-FB-P1-back-full-S7301.png
PULID-FB-P1-back-full-S7301.png
PULID-FB-P2-upper-front-S19023.png
PULID-FB-P2-upper-front-S19023.png
PULID-FB-P2-upper-front-S42.png
PULID-FB-P2-upper-front-S42.png
PULID-FB-P2-upper-front-S7301.png
PULID-FB-P2-upper-front-S7301.png
face_source_a.jpeg
face_source_a.jpeg
face_source_b.jpeg
face_source_b.jpeg

Data (1)

manifest.json
{
  "sweep": "identity-body-multiface-v1",
  "date": "2026-05-30T01:07:30.640394",
  "goal": "Multi-face validation of identity-preserving full-body vendors. Vendor PROCEEDS at >= 14/18 cells PASS (4-axis judge).",
  "faces": [
    {
      "id": "FA",
      "desc": "blonde woman, mid-20s, light eyes, white tank, neutral studio bg",
      "path": "/Users/claude/Projects/ikatomi-workspace/ikatomi-labs/runs/20260530-identity-body-multiface-v1/face_source_a.jpeg"
    },
    {
      "id": "FB",
      "desc": "brown-haired man, mid-30s, fair skin, grey tee, neutral grey bg (cropped from production marketing fixture preview-pants.jpg)",
      "path": "/Users/claude/Projects/ikatomi-workspace/ikatomi-labs/runs/20260530-identity-body-multiface-v1/face_source_b.jpeg"
    }
  ],
  "prompts": [
    {
      "id": "P0-front-full",
      "prompt": "Full-body professional model standing in a neutral pose, front view, clean light grey studio background, photorealistic, sharp focus, soft studio lighting, wearing a plain white tank top and grey shorts."
    },
    {
      "id": "P1-back-full",
      "prompt": "Full-body professional model standing in a neutral pose, back view turned away from camera, clean light grey studio background, photorealistic."
    },
    {
      "id": "P2-upper-front",
      "prompt": "Upper body portrait of a professional model, head and shoulders framing, front view, clean light grey studio background, photorealistic, soft studio lighting, wearing a plain white tank top."
    }
  ],
  "seeds": [
    42,
    7301,
    19023
  ],
  "vendors": [
    {
      "name": "FLUXPLD",
      "endpoint": "fal-ai/flux-pulid",
      "usd_per_call": 0.1,
      "notes": "PuLID over FLUX backbone. Best identity preservation among fal.ai face-conditioning candidates tested for headshots in v1 sweep (5/6 = 83%). Multi-face test: does it generalise."
    },
    {
      "name": "PULID",
      "endpoint": "fal-ai/pulid",
      "usd_per_call": 0.05,
      "notes": "SDXL-backbone PuLID. 50% on prior single-face headshot probe; retest with body framing and multi-face."
    },
    {
      "name": "IPAFID",
      "endpoint": "fal-ai/ip-adapter-face-id",
      "usd_per_call": 0.05,
      "notes": "IP-Adapter Face ID on SDXL-v2-plus. 67% on prior single-face probe. Cheap; tested for completeness."
    }
  ],
  "judge_model": "claude-sonnet-4-6",
  "judge_axes": [
    "face_is_source_identity",
    "body_framing_matches_prompt",
    "clean_studio_bg",
    "looks_photographic"
  ],
  "pass_bars": {
    "per_cell": "all 4 axes = Y",
    "per_vendor": ">= 75% pass rate"
  },
  "outcomes": [
    {
      "vendor": "FLUXPLD",
      "endpoint": "fal-ai/flux-pulid",
      "pass_count": 5,
      "total_cells": 18,
      "pass_rate": 0.2777777777777778,
      "proceeds": false,
      "fal_cost": 1.8000000000000005,
      "judge_in_tokens": 29517,
      "judge_out_tokens": 1381,
      "judge_usd": 0.109266,
      "judges": [
        {
          "label": "FLUXPLD-FA-P0-front-full-S42",
          "face_id": "FA",
          "prompt_id": "P0-front-full",
          "seed": 42,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 4,
          "verdict": "pass",
          "ok": true,
          "observation": "The render shows a full-body front view of a woman who closely matches the reference's facial structure, jawline, and blonde wavy hair, against a clean light studio background with photographic quality.",
          "image_path": "FLUXPLD-FA-P0-front-full-S42.png"
        },
        {
          "label": "FLUXPLD-FA-P0-front-full-S7301",
          "face_id": "FA",
          "prompt_id": "P0-front-full",
          "seed": 7301,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 4,
          "verdict": "pass",
          "ok": true,
          "observation": "The render shows a full-body front view of a blonde woman with similar facial structure, jawline, and features to the reference, against a clean light studio background with photographic quality.",
          "image_path": "FLUXPLD-FA-P0-front-full-S7301.png"
        },
        {
          "label": "FLUXPLD-FA-P0-front-full-S19023",
          "face_id": "FA",
          "prompt_id": "P0-front-full",
          "seed": 19023,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 4,
          "verdict": "pass",
          "ok": true,
          "observation": "The render shows a full-body front view of a blonde woman with matching facial structure, jawline, and features to the reference, against a clean light studio backdrop with photographic realism.",
          "image_path": "FLUXPLD-FA-P0-front-full-S19023.png"
        },
        {
          "label": "FLUXPLD-FA-P1-back-full-S42",
          "face_id": "FA",
          "prompt_id": "P1-back-full",
          "seed": 42,
          "face_is_source_identity": false,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 2,
          "verdict": "fail: Q1, Q4",
          "ok": false,
          "observation": "The render shows a featureless white mannequin with no facial identity preserved and an obviously artificial/plastic appearance rather than a photographic human likeness.",
          "image_path": "FLUXPLD-FA-P1-back-full-S42.png"
        },
        {
          "label": "FLUXPLD-FA-P1-back-full-S7301",
          "face_id": "FA",
          "prompt_id": "P1-back-full",
          "seed": 7301,
          "face_is_source_identity": false,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 2,
          "verdict": "fail: Q1, Q4",
          "ok": false,
          "observation": "The render is a featureless white mannequin/3D sculpture with no face, hair, or any photographic qualities, bearing no resemblance to the reference person.",
          "image_path": "FLUXPLD-FA-P1-back-full-S7301.png"
        },
        {
          "label": "FLUXPLD-FA-P1-back-full-S19023",
          "face_id": "FA",
          "prompt_id": "P1-back-full",
          "seed": 19023,
          "face_is_source_identity": false,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 2,
          "verdict": "fail: Q1, Q4",
          "ok": false,
          "observation": "The render shows a featureless mannequin/3D sculpture with no hair, skin texture, or recognizable facial features, bearing no resemblance to the reference person.",
          "image_path": "FLUXPLD-FA-P1-back-full-S19023.png"
        },
        {
          "label": "FLUXPLD-FA-P2-upper-front-S42",
          "face_id": "FA",
          "prompt_id": "P2-upper-front",
          "seed": 42,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 3,
          "verdict": "fail: Q4",
          "ok": false,
          "observation": "The render is noticeably blurry/soft-focus with plasticky, over-smoothed skin that lacks the photographic sharpness and natural texture of a real photograph.",
          "image_path": "FLUXPLD-FA-P2-upper-front-S42.png"
        },
        {
          "label": "FLUXPLD-FA-P2-upper-front-S7301",
          "face_id": "FA",
          "prompt_id": "P2-upper-front",
          "seed": 7301,
          "face_is_source_identity": false,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 2,
          "verdict": "fail: Q1, Q4",
          "ok": false,
          "observation": "The rendered face has a different bone structure (narrower, more angular jaw, different nose, heavier brows) than the reference, and the image is noticeably blurry/soft with plasticky skin typical of a failed AI render.",
          "image_path": "FLUXPLD-FA-P2-upper-front-S7301.png"
        },
        {
          "label": "FLUXPLD-FA-P2-upper-front-S19023",
          "face_id": "FA",
          "prompt_id": "P2-upper-front",
          "seed": 19023,
          "face_is_source_identity": false,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 2,
          "verdict": "fail: Q1, Q4",
          "ok": false,
          "observation": "The render shows a different person with a narrower face, more prominent cheekbones, and shorter hair, and the image is heavily blurred/soft-focus giving it an unnatural non-photographic appearance.",
          "image_path": "FLUXPLD-FA-P2-upper-front-S19023.png"
        },
        {
          "label": "FLUXPLD-FB-P0-front-full-S42",
          "face_id": "FB",
          "prompt_id": "P0-front-full",
          "seed": 42,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 4,
          "verdict": "pass",
          "ok": true,
          "observation": "The render shows the same dark-haired man with matching facial structure, jawline, and features in a clean full-body front-view studio shot that looks photographic.",
          "image_path": "FLUXPLD-FB-P0-front-full-S42.png"
        },
        {
          "label": "FLUXPLD-FB-P0-front-full-S7301",
          "face_id": "FB",
          "prompt_id": "P0-front-full",
          "seed": 7301,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 3,
          "verdict": "fail: Q4",
          "ok": false,
          "observation": "The render is noticeably blurred/soft-focus throughout, giving it an artificial, non-photographic quality rather than the crispness of a real photograph.",
          "image_path": "FLUXPLD-FB-P0-front-full-S7301.png"
        },
        {
          "label": "FLUXPLD-FB-P0-front-full-S19023",
          "face_id": "FB",
          "prompt_id": "P0-front-full",
          "seed": 19023,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 4,
          "verdict": "pass",
          "ok": true,
          "observation": "The render shows the same dark-haired man with matching facial structure, jawline and nose in a clean full-body front-view pose against a neutral studio backdrop that looks photographic.",
          "image_path": "FLUXPLD-FB-P0-front-full-S19023.png"
        },
        {
          "label": "FLUXPLD-FB-P1-back-full-S42",
          "face_id": "FB",
          "prompt_id": "P1-back-full",
          "seed": 42,
          "face_is_source_identity": false,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 2,
          "verdict": "fail: Q1, Q4",
          "ok": false,
          "observation": "The render shows a featureless white mannequin/sculpture with no discernible face or identity, bearing no resemblance to the reference person and looking entirely non-photographic.",
          "image_path": "FLUXPLD-FB-P1-back-full-S42.png"
        },
        {
          "label": "FLUXPLD-FB-P1-back-full-S7301",
          "face_id": "FB",
          "prompt_id": "P1-back-full",
          "seed": 7301,
          "face_is_source_identity": false,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 2,
          "verdict": "fail: Q1, Q4",
          "ok": false,
          "observation": "The render is a featureless white mannequin/statue with no discernible facial features or skin texture, making identity verification impossible and the image clearly non-photographic.",
          "image_path": "FLUXPLD-FB-P1-back-full-S7301.png"
        },
        {
          "label": "FLUXPLD-FB-P1-back-full-S19023",
          "face_id": "FB",
          "prompt_id": "P1-back-full",
          "seed": 19023,
          "face_is_source_identity": false,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 2,
          "verdict": "fail: Q1, Q4",
          "ok": false,
          "observation": "The render shows a full-body back view on a clean studio background, but the figure appears as a plasticky, mannequin-like model with unrealistically smooth skin rather than a photographic human, and the slim build and body proportions do not match the more athletic reference subject.",
          "image_path": "FLUXPLD-FB-P1-back-full-S19023.png"
        },
        {
          "label": "FLUXPLD-FB-P2-upper-front-S42",
          "face_id": "FB",
          "prompt_id": "P2-upper-front",
          "seed": 42,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 3,
          "verdict": "fail: Q4",
          "ok": false,
          "observation": "The render has plasticky, overly smooth skin with a slightly artificial sheen that makes it look like a stylised AI-generated image rather than a real photograph.",
          "image_path": "FLUXPLD-FB-P2-upper-front-S42.png"
        },
        {
          "label": "FLUXPLD-FB-P2-upper-front-S7301",
          "face_id": "FB",
          "prompt_id": "P2-upper-front",
          "seed": 7301,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 3,
          "verdict": "fail: Q4",
          "ok": false,
          "observation": "The render has plasticky, over-smoothed skin with an artificial sheen and overly symmetric lighting typical of AI stylisation rather than a real photograph.",
          "image_path": "FLUXPLD-FB-P2-upper-front-S7301.png"
        },
        {
          "label": "FLUXPLD-FB-P2-upper-front-S19023",
          "face_id": "FB",
          "prompt_id": "P2-upper-front",
          "seed": 19023,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 3,
          "verdict": "fail: Q4",
          "ok": false,
          "observation": "The render has noticeably plasticky, over-smoothed skin with a slightly artificial sheen that makes it look like a stylised AI render rather than a genuine photograph.",
          "image_path": "FLUXPLD-FB-P2-upper-front-S19023.png"
        }
      ],
      "render_errors": []
    },
    {
      "vendor": "PULID",
      "endpoint": "fal-ai/pulid",
      "pass_count": 5,
      "total_cells": 18,
      "pass_rate": 0.2777777777777778,
      "proceeds": false,
      "fal_cost": 0.9000000000000002,
      "judge_in_tokens": 29517,
      "judge_out_tokens": 1438,
      "judge_usd": 0.110121,
      "judges": [
        {
          "label": "PULID-FA-P0-front-full-S42",
          "face_id": "FA",
          "prompt_id": "P0-front-full",
          "seed": 42,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 4,
          "verdict": "pass",
          "ok": true,
          "observation": "The render shows a full-body front view of a blonde woman whose facial structure, jawline, and overall features closely match the reference, against a clean grey studio backdrop with photographic realism.",
          "image_path": "PULID-FA-P0-front-full-S42.png"
        },
        {
          "label": "PULID-FA-P0-front-full-S7301",
          "face_id": "FA",
          "prompt_id": "P0-front-full",
          "seed": 7301,
          "face_is_source_identity": false,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 3,
          "verdict": "fail: Q1",
          "ok": false,
          "observation": "The rendered face shows a different woman with shorter blonde hair, a narrower facial structure, and distinct features that don't match the reference's broader jaw, fuller lips, and specific nose shape.",
          "image_path": "PULID-FA-P0-front-full-S7301.png"
        },
        {
          "label": "PULID-FA-P0-front-full-S19023",
          "face_id": "FA",
          "prompt_id": "P0-front-full",
          "seed": 19023,
          "face_is_source_identity": false,
          "body_framing_matches_prompt": false,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 2,
          "verdict": "fail: Q1, Q2",
          "ok": false,
          "observation": "The render shows a short-bobbed blonde with noticeably different facial structure (wider jaw, different nose, blue eyes vs. the reference's longer face and softer features), and the body is cropped at mid-thigh with feet not visible.",
          "image_path": "PULID-FA-P0-front-full-S19023.png"
        },
        {
          "label": "PULID-FA-P1-back-full-S42",
          "face_id": "FA",
          "prompt_id": "P1-back-full",
          "seed": 42,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 4,
          "verdict": "pass",
          "ok": true,
          "observation": "The render shows a plausible identity match with similar facial structure, blonde wavy hair, and comparable features; the body is full-length with a back-turned pose, feet visible, against a clean grey studio backdrop, with a photographic appearance throughout.",
          "image_path": "PULID-FA-P1-back-full-S42.png"
        },
        {
          "label": "PULID-FA-P1-back-full-S7301",
          "face_id": "FA",
          "prompt_id": "P1-back-full",
          "seed": 7301,
          "face_is_source_identity": false,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 3,
          "verdict": "fail: Q1",
          "ok": false,
          "observation": "The rendered figure has shorter bob-style hair, a narrower face, and different facial structure compared to the reference's long wavy blonde hair and distinctive jawline/features.",
          "image_path": "PULID-FA-P1-back-full-S7301.png"
        },
        {
          "label": "PULID-FA-P1-back-full-S19023",
          "face_id": "FA",
          "prompt_id": "P1-back-full",
          "seed": 19023,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": false,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 3,
          "verdict": "fail: body_framing_matches_prompt",
          "ok": false,
          "observation": "The render shows a full-body side/three-quarter view with the face visible toward camera, not a back view with the subject turned away as prompted.",
          "image_path": "PULID-FA-P1-back-full-S19023.png"
        },
        {
          "label": "PULID-FA-P2-upper-front-S42",
          "face_id": "FA",
          "prompt_id": "P2-upper-front",
          "seed": 42,
          "face_is_source_identity": false,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 3,
          "verdict": "fail: Q1",
          "ok": false,
          "observation": "The render shows a different person \u2014 shorter bob haircut, more angular jaw, deeper tan, and distinctly different eye color compared to the reference's long wavy hair, softer features, and lighter complexion.",
          "image_path": "PULID-FA-P2-upper-front-S42.png"
        },
        {
          "label": "PULID-FA-P2-upper-front-S7301",
          "face_id": "FA",
          "prompt_id": "P2-upper-front",
          "seed": 7301,
          "face_is_source_identity": false,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 2,
          "verdict": "fail: Q1, Q4",
          "ok": false,
          "observation": "The render shows a different person with distinctly blue eyes, a more angular jawline, shorter hair, and overly smoothed plasticky skin compared to the softer-featured, hazel-eyed reference.",
          "image_path": "PULID-FA-P2-upper-front-S7301.png"
        },
        {
          "label": "PULID-FA-P2-upper-front-S19023",
          "face_id": "FA",
          "prompt_id": "P2-upper-front",
          "seed": 19023,
          "face_is_source_identity": false,
          "body_framing_matches_prompt": false,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 2,
          "verdict": "fail: Q1, Q2",
          "ok": false,
          "observation": "The rendered face is a visibly different person (stronger jaw, blue eyes, shorter hair, more angular features) and the body is posed at a 3/4 angle rather than a front-facing view.",
          "image_path": "PULID-FA-P2-upper-front-S19023.png"
        },
        {
          "label": "PULID-FB-P0-front-full-S42",
          "face_id": "FB",
          "prompt_id": "P0-front-full",
          "seed": 42,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 4,
          "verdict": "pass",
          "ok": true,
          "observation": "The render preserves the source's facial structure, jawline, and dark hair convincingly, shows a full head-to-feet front view against a clean grey studio backdrop, and reads as photographic in quality.",
          "image_path": "PULID-FB-P0-front-full-S42.png"
        },
        {
          "label": "PULID-FB-P0-front-full-S7301",
          "face_id": "FB",
          "prompt_id": "P0-front-full",
          "seed": 7301,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 4,
          "verdict": "pass",
          "ok": true,
          "observation": "The render preserves the source's facial structure, jawline, and dark hair convincingly, shows a full head-to-feet front view against a clean grey studio backdrop, and looks photographic in quality.",
          "image_path": "PULID-FB-P0-front-full-S7301.png"
        },
        {
          "label": "PULID-FB-P0-front-full-S19023",
          "face_id": "FB",
          "prompt_id": "P0-front-full",
          "seed": 19023,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": false,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 3,
          "verdict": "fail: Q2",
          "ok": false,
          "observation": "The face identity is well preserved and the image looks photographic on a clean studio background, but the render is cropped at mid-shin and the feet are not visible, failing the head-to-feet full-body framing requirement.",
          "image_path": "PULID-FB-P0-front-full-S19023.png"
        },
        {
          "label": "PULID-FB-P1-back-full-S42",
          "face_id": "FB",
          "prompt_id": "P1-back-full",
          "seed": 42,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 3,
          "verdict": "fail: Q4",
          "ok": false,
          "observation": "The render has a plasticky, over-smoothed quality with unnaturally glossy fabric shading and slightly artificial skin on the partially visible face, betraying its AI-generated origin rather than looking like a real photograph.",
          "image_path": "PULID-FB-P1-back-full-S42.png"
        },
        {
          "label": "PULID-FB-P1-back-full-S7301",
          "face_id": "FB",
          "prompt_id": "P1-back-full",
          "seed": 7301,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 4,
          "verdict": "pass",
          "ok": true,
          "observation": "The render shows a full-body back view of a man whose dark hair, facial profile, jawline, and overall build are consistent with the reference, set against a clean grey studio backdrop with photographic realism.",
          "image_path": "PULID-FB-P1-back-full-S7301.png"
        },
        {
          "label": "PULID-FB-P1-back-full-S19023",
          "face_id": "FB",
          "prompt_id": "P1-back-full",
          "seed": 19023,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": false,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 2,
          "verdict": "fail: Q2, Q4",
          "ok": false,
          "observation": "The render shows a side/three-quarter view with the face turned toward camera rather than a true back view turned away, and the image has a plasticky, over-smooth AI render quality inconsistent with real photography.",
          "image_path": "PULID-FB-P1-back-full-S19023.png"
        },
        {
          "label": "PULID-FB-P2-upper-front-S42",
          "face_id": "FB",
          "prompt_id": "P2-upper-front",
          "seed": 42,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 3,
          "verdict": "fail: Q4",
          "ok": false,
          "observation": "The skin has an over-smoothed, plasticky sheen and the muscle definition appears artificially enhanced, giving the render a stylised AI look rather than a natural photograph.",
          "image_path": "PULID-FB-P2-upper-front-S42.png"
        },
        {
          "label": "PULID-FB-P2-upper-front-S7301",
          "face_id": "FB",
          "prompt_id": "P2-upper-front",
          "seed": 7301,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 3,
          "verdict": "fail: Q4",
          "ok": false,
          "observation": "The render has plasticky, over-smoothed skin with an artificial sheen and hyper-stylised hair highlights that make it look like a CGI illustration rather than a real photograph.",
          "image_path": "PULID-FB-P2-upper-front-S7301.png"
        },
        {
          "label": "PULID-FB-P2-upper-front-S19023",
          "face_id": "FB",
          "prompt_id": "P2-upper-front",
          "seed": 19023,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 3,
          "verdict": "fail: Q4",
          "ok": false,
          "observation": "The skin has a plasticky, overly smoothed appearance with artificial catchlights and hyper-defined muscle rendering that looks like a stylised AI render rather than a real photograph.",
          "image_path": "PULID-FB-P2-upper-front-S19023.png"
        }
      ],
      "render_errors": []
    },
    {
      "vendor": "IPAFID",
      "endpoint": "fal-ai/ip-adapter-face-id",
      "pass_count": 0,
      "total_cells": 18,
      "pass_rate": 0.0,
      "proceeds": false,
      "fal_cost": 0.9000000000000002,
      "judge_in_tokens": 29517,
      "judge_out_tokens": 1439,
      "judge_usd": 0.11013600000000001,
      "judges": [
        {
          "label": "IPAFID-FA-P0-front-full-S42",
          "face_id": "FA",
          "prompt_id": "P0-front-full",
          "seed": 42,
          "face_is_source_identity": false,
          "body_framing_matches_prompt": false,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 2,
          "verdict": "fail: Q1, Q2",
          "ok": false,
          "observation": "The render shows a different person (heavier brow, different nose/jawline) cropped at the torso rather than showing the required head-to-feet full body view.",
          "image_path": "IPAFID-FA-P0-front-full-S42.png"
        },
        {
          "label": "IPAFID-FA-P0-front-full-S7301",
          "face_id": "FA",
          "prompt_id": "P0-front-full",
          "seed": 7301,
          "face_is_source_identity": false,
          "body_framing_matches_prompt": false,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 2,
          "verdict": "fail: Q1, Q2",
          "ok": false,
          "observation": "The render shows a different person (heavier brow ridge, more angular jaw, fuller lips, darker skin tone) cropped at the waist rather than showing the full head-to-feet body as requested.",
          "image_path": "IPAFID-FA-P0-front-full-S7301.png"
        },
        {
          "label": "IPAFID-FA-P0-front-full-S19023",
          "face_id": "FA",
          "prompt_id": "P0-front-full",
          "seed": 19023,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": false,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 3,
          "verdict": "fail: body_framing_matches_prompt",
          "ok": false,
          "observation": "The render shows only an upper-body/torso shot with feet not visible, failing the required head-to-feet full-body framing.",
          "image_path": "IPAFID-FA-P0-front-full-S19023.png"
        },
        {
          "label": "IPAFID-FA-P1-back-full-S42",
          "face_id": "FA",
          "prompt_id": "P1-back-full",
          "seed": 42,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": false,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 3,
          "verdict": "fail: body_framing_matches_prompt",
          "ok": false,
          "observation": "The render shows only an upper-body/torso crop with the subject turned and glancing back, not a full head-to-feet back view as requested.",
          "image_path": "IPAFID-FA-P1-back-full-S42.png"
        },
        {
          "label": "IPAFID-FA-P1-back-full-S7301",
          "face_id": "FA",
          "prompt_id": "P1-back-full",
          "seed": 7301,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": false,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 2,
          "verdict": "fail: Q2, Q4",
          "ok": false,
          "observation": "The render shows only an upper-body/torso crop with no feet visible, and the image has an over-smoothed, plasticky AI render appearance rather than looking like a genuine photograph.",
          "image_path": "IPAFID-FA-P1-back-full-S7301.png"
        },
        {
          "label": "IPAFID-FA-P1-back-full-S19023",
          "face_id": "FA",
          "prompt_id": "P1-back-full",
          "seed": 19023,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": false,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 3,
          "verdict": "fail: body_framing_matches_prompt",
          "ok": false,
          "observation": "The render shows a upper-body three-quarter view with the face visible looking back over the shoulder, rather than a full head-to-feet back view with the subject turned away.",
          "image_path": "IPAFID-FA-P1-back-full-S19023.png"
        },
        {
          "label": "IPAFID-FA-P2-upper-front-S42",
          "face_id": "FA",
          "prompt_id": "P2-upper-front",
          "seed": 42,
          "face_is_source_identity": false,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 3,
          "verdict": "fail: Q1",
          "ok": false,
          "observation": "The rendered face has blue eyes, a wider/flatter facial structure, and heavier brow arch compared to the reference's green/hazel eyes, softer features, and distinctly different nose \u2014 a visibly different person.",
          "image_path": "IPAFID-FA-P2-upper-front-S42.png"
        },
        {
          "label": "IPAFID-FA-P2-upper-front-S7301",
          "face_id": "FA",
          "prompt_id": "P2-upper-front",
          "seed": 7301,
          "face_is_source_identity": false,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 2,
          "verdict": "fail: Q1, Q4",
          "ok": false,
          "observation": "The render shows a different person with a broader jaw, heavier brows, fuller lips, and more prominent bone structure than the reference, and the skin has an over-smoothed, plasticky AI appearance with artificially sharp hair strands.",
          "image_path": "IPAFID-FA-P2-upper-front-S7301.png"
        },
        {
          "label": "IPAFID-FA-P2-upper-front-S19023",
          "face_id": "FA",
          "prompt_id": "P2-upper-front",
          "seed": 19023,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 3,
          "verdict": "fail: Q4",
          "ok": false,
          "observation": "The skin has an over-smoothed, plasticky sheen with exaggerated contouring highlights that make the render look like a stylised AI image rather than a real photograph.",
          "image_path": "IPAFID-FA-P2-upper-front-S19023.png"
        },
        {
          "label": "IPAFID-FB-P0-front-full-S42",
          "face_id": "FB",
          "prompt_id": "P0-front-full",
          "seed": 42,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": false,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 2,
          "verdict": "fail: Q2, Q4",
          "ok": false,
          "observation": "The render shows only an upper-body crop (feet not visible) and has a plasticky, over-smoothed AI render quality rather than a genuine photograph.",
          "image_path": "IPAFID-FB-P0-front-full-S42.png"
        },
        {
          "label": "IPAFID-FB-P0-front-full-S7301",
          "face_id": "FB",
          "prompt_id": "P0-front-full",
          "seed": 7301,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": false,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 2,
          "verdict": "fail: Q2, Q4",
          "ok": false,
          "observation": "The render shows only an upper-body/torso crop rather than the required head-to-feet full-body view, and the skin and overall image have a plasticky, over-smoothed AI render quality rather than a photographic look.",
          "image_path": "IPAFID-FB-P0-front-full-S7301.png"
        },
        {
          "label": "IPAFID-FB-P0-front-full-S19023",
          "face_id": "FB",
          "prompt_id": "P0-front-full",
          "seed": 19023,
          "face_is_source_identity": false,
          "body_framing_matches_prompt": false,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 2,
          "verdict": "fail: Q1, Q2",
          "ok": false,
          "observation": "The rendered face is visibly older, more angular, and resembles a different person (notably Tom Cruise-like features), and the image is cropped at the waist rather than showing the full head-to-feet body framing.",
          "image_path": "IPAFID-FB-P0-front-full-S19023.png"
        },
        {
          "label": "IPAFID-FB-P1-back-full-S42",
          "face_id": "FB",
          "prompt_id": "P1-back-full",
          "seed": 42,
          "face_is_source_identity": false,
          "body_framing_matches_prompt": false,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 1,
          "verdict": "fail: Q1, Q2, Q4",
          "ok": false,
          "observation": "The render shows a different-looking man with a narrower, more angular face facing the camera in a 3/4 upper-body shot \u2014 not the source identity, not a full-body back view, and the skin has a plasticky over-rendered AI appearance.",
          "image_path": "IPAFID-FB-P1-back-full-S42.png"
        },
        {
          "label": "IPAFID-FB-P1-back-full-S7301",
          "face_id": "FB",
          "prompt_id": "P1-back-full",
          "seed": 7301,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": false,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 3,
          "verdict": "fail: body_framing_matches_prompt",
          "ok": false,
          "observation": "The render shows only an upper-body three-quarter back view with feet not visible, rather than the required full head-to-feet back view.",
          "image_path": "IPAFID-FB-P1-back-full-S7301.png"
        },
        {
          "label": "IPAFID-FB-P1-back-full-S19023",
          "face_id": "FB",
          "prompt_id": "P1-back-full",
          "seed": 19023,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": false,
          "clean_studio_bg": true,
          "looks_photographic": true,
          "axes_passed": 3,
          "verdict": "fail: body_framing_matches_prompt",
          "ok": false,
          "observation": "The render shows an upper-body three-quarter front-facing view with the face looking at camera, rather than a full head-to-feet back/turned-away shot as requested.",
          "image_path": "IPAFID-FB-P1-back-full-S19023.png"
        },
        {
          "label": "IPAFID-FB-P2-upper-front-S42",
          "face_id": "FB",
          "prompt_id": "P2-upper-front",
          "seed": 42,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 3,
          "verdict": "fail: Q4",
          "ok": false,
          "observation": "The skin has a slightly plasticky, over-smoothed quality typical of AI renders, lacking natural pore texture and photographic realism.",
          "image_path": "IPAFID-FB-P2-upper-front-S42.png"
        },
        {
          "label": "IPAFID-FB-P2-upper-front-S7301",
          "face_id": "FB",
          "prompt_id": "P2-upper-front",
          "seed": 7301,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 3,
          "verdict": "fail: Q4",
          "ok": false,
          "observation": "The skin has an overly smooth, plasticky quality with artificially perfect lighting that makes the render look like a retouched CGI image rather than a real photograph.",
          "image_path": "IPAFID-FB-P2-upper-front-S7301.png"
        },
        {
          "label": "IPAFID-FB-P2-upper-front-S19023",
          "face_id": "FB",
          "prompt_id": "P2-upper-front",
          "seed": 19023,
          "face_is_source_identity": true,
          "body_framing_matches_prompt": true,
          "clean_studio_bg": true,
          "looks_photographic": false,
          "axes_passed": 3,
          "verdict": "fail: Q4",
          "ok": false,
          "observation": "The skin has a plasticky, over-smoothed quality with slightly artificial lighting that gives the render a CGI appearance rather than a genuine photograph.",
          "image_path": "IPAFID-FB-P2-upper-front-S19023.png"
        }
      ],
      "render_errors": []
    }
  ],
  "winner": null,
  "total_cost_usd": 3.929523000000001,
  "hard_cap_usd": 6.0,
  "notes": []
}

Notes (1)

RECOMMENDATION.md
# Identity-preserving body-vendor MULTI-FACE sweep — Verdict: ESCALATE — no fal.ai vendor reached the 75% multi-face bar

**Run**: `20260530-identity-body-multiface-v1/`
**Date**: 2026-05-30T01:07:30.638370
**Faces tested**: 2 identities (FA blonde-W / FB balding-M)
**Vendors tested**: fal-ai/flux-pulid, fal-ai/pulid, fal-ai/ip-adapter-face-id
**Matrix per vendor**: 2 faces × 3 prompts × 3 seeds = 18 cells
**Prompts**: ['P0-front-full', 'P1-back-full', 'P2-upper-front']
**Seeds**: [42, 7301, 19023]
**Cost**: $3.93 actual (hard cap $6.00)
**Judge model**: `claude-sonnet-4-6`
**Pass bars**: per-cell ALL 4 axes Y; per-vendor >= 75% pass rate (>= 14/18).

## Headline

No vendor cleared 75% on the multi-face bar. Identity-preserving full-body generation on fal.ai is not currently viable for the production contract. Recommend escalation to off-platform candidates (Replicate, HuggingFace Inference) or a hybrid pipeline.

## Per-vendor results

| Vendor | Endpoint | Pass (4/4) | Face-ID | Framing | Pass rate | Proceeds | fal $ | judge $ |
|--------|----------|-----------:|--------:|--------:|----------:|:--------:|------:|--------:|
| FLUXPLD | `fal-ai/flux-pulid` | 5/18 | 10/18 | 18/18 | 28% | no | $1.80 | $0.109 |
| PULID | `fal-ai/pulid` | 5/18 | 12/18 | 13/18 | 28% | no | $0.90 | $0.110 |
| IPAFID | `fal-ai/ip-adapter-face-id` | 0/18 | 12/18 | 6/18 | 0% | no | $0.90 | $0.110 |

## Per-face × per-vendor breakdown

| Vendor | Face | Pass (4/4) | Face-ID | Framing |
|--------|------|-----------:|--------:|--------:|
| FLUXPLD | FA | 3/9 | 4/9 | 9/9 |
| FLUXPLD | FB | 2/9 | 6/9 | 9/9 |
| PULID | FA | 2/9 | 3/9 | 6/9 |
| PULID | FB | 3/9 | 9/9 | 7/9 |
| IPAFID | FA | 0/9 | 5/9 | 3/9 |
| IPAFID | FB | 0/9 | 7/9 | 3/9 |

## Per-axis breakdown

| Vendor | face_is_source | body_framing | clean_bg | photographic |
|--------|---------------:|-------------:|---------:|-------------:|
| FLUXPLD | 10/18 | 18/18 | 18/18 | 5/18 |
| PULID | 12/18 | 13/18 | 18/18 | 12/18 |
| IPAFID | 12/18 | 6/18 | 18/18 | 9/18 |

## Per-cell breakdown

| Cell | Vendor | Face | Prompt | Seed | face_id | framing | bg | photo | axes/4 | ok |
|------|--------|------|--------|-----:|:-------:|:-------:|:--:|:-----:|:------:|:--:|
| FLUXPLD-FA-P0-front-full-S42 | FLUXPLD | FA | P0-front-full | 42 | Y | Y | Y | Y | 4/4 | Y |
| FLUXPLD-FA-P0-front-full-S7301 | FLUXPLD | FA | P0-front-full | 7301 | Y | Y | Y | Y | 4/4 | Y |
| FLUXPLD-FA-P0-front-full-S19023 | FLUXPLD | FA | P0-front-full | 19023 | Y | Y | Y | Y | 4/4 | Y |
| FLUXPLD-FA-P1-back-full-S42 | FLUXPLD | FA | P1-back-full | 42 | N | Y | Y | N | 2/4 | N |
| FLUXPLD-FA-P1-back-full-S7301 | FLUXPLD | FA | P1-back-full | 7301 | N | Y | Y | N | 2/4 | N |
| FLUXPLD-FA-P1-back-full-S19023 | FLUXPLD | FA | P1-back-full | 19023 | N | Y | Y | N | 2/4 | N |
| FLUXPLD-FA-P2-upper-front-S42 | FLUXPLD | FA | P2-upper-front | 42 | Y | Y | Y | N | 3/4 | N |
| FLUXPLD-FA-P2-upper-front-S7301 | FLUXPLD | FA | P2-upper-front | 7301 | N | Y | Y | N | 2/4 | N |
| FLUXPLD-FA-P2-upper-front-S19023 | FLUXPLD | FA | P2-upper-front | 19023 | N | Y | Y | N | 2/4 | N |
| FLUXPLD-FB-P0-front-full-S42 | FLUXPLD | FB | P0-front-full | 42 | Y | Y | Y | Y | 4/4 | Y |
| FLUXPLD-FB-P0-front-full-S7301 | FLUXPLD | FB | P0-front-full | 7301 | Y | Y | Y | N | 3/4 | N |
| FLUXPLD-FB-P0-front-full-S19023 | FLUXPLD | FB | P0-front-full | 19023 | Y | Y | Y | Y | 4/4 | Y |
| FLUXPLD-FB-P1-back-full-S42 | FLUXPLD | FB | P1-back-full | 42 | N | Y | Y | N | 2/4 | N |
| FLUXPLD-FB-P1-back-full-S7301 | FLUXPLD | FB | P1-back-full | 7301 | N | Y | Y | N | 2/4 | N |
| FLUXPLD-FB-P1-back-full-S19023 | FLUXPLD | FB | P1-back-full | 19023 | N | Y | Y | N | 2/4 | N |
| FLUXPLD-FB-P2-upper-front-S42 | FLUXPLD | FB | P2-upper-front | 42 | Y | Y | Y | N | 3/4 | N |
| FLUXPLD-FB-P2-upper-front-S7301 | FLUXPLD | FB | P2-upper-front | 7301 | Y | Y | Y | N | 3/4 | N |
| FLUXPLD-FB-P2-upper-front-S19023 | FLUXPLD | FB | P2-upper-front | 19023 | Y | Y | Y | N | 3/4 | N |
| PULID-FA-P0-front-full-S42 | PULID | FA | P0-front-full | 42 | Y | Y | Y | Y | 4/4 | Y |
| PULID-FA-P0-front-full-S7301 | PULID | FA | P0-front-full | 7301 | N | Y | Y | Y | 3/4 | N |
| PULID-FA-P0-front-full-S19023 | PULID | FA | P0-front-full | 19023 | N | N | Y | Y | 2/4 | N |
| PULID-FA-P1-back-full-S42 | PULID | FA | P1-back-full | 42 | Y | Y | Y | Y | 4/4 | Y |
| PULID-FA-P1-back-full-S7301 | PULID | FA | P1-back-full | 7301 | N | Y | Y | Y | 3/4 | N |
| PULID-FA-P1-back-full-S19023 | PULID | FA | P1-back-full | 19023 | Y | N | Y | Y | 3/4 | N |
| PULID-FA-P2-upper-front-S42 | PULID | FA | P2-upper-front | 42 | N | Y | Y | Y | 3/4 | N |
| PULID-FA-P2-upper-front-S7301 | PULID | FA | P2-upper-front | 7301 | N | Y | Y | N | 2/4 | N |
| PULID-FA-P2-upper-front-S19023 | PULID | FA | P2-upper-front | 19023 | N | N | Y | Y | 2/4 | N |
| PULID-FB-P0-front-full-S42 | PULID | FB | P0-front-full | 42 | Y | Y | Y | Y | 4/4 | Y |
| PULID-FB-P0-front-full-S7301 | PULID | FB | P0-front-full | 7301 | Y | Y | Y | Y | 4/4 | Y |
| PULID-FB-P0-front-full-S19023 | PULID | FB | P0-front-full | 19023 | Y | N | Y | Y | 3/4 | N |
| PULID-FB-P1-back-full-S42 | PULID | FB | P1-back-full | 42 | Y | Y | Y | N | 3/4 | N |
| PULID-FB-P1-back-full-S7301 | PULID | FB | P1-back-full | 7301 | Y | Y | Y | Y | 4/4 | Y |
| PULID-FB-P1-back-full-S19023 | PULID | FB | P1-back-full | 19023 | Y | N | Y | N | 2/4 | N |
| PULID-FB-P2-upper-front-S42 | PULID | FB | P2-upper-front | 42 | Y | Y | Y | N | 3/4 | N |
| PULID-FB-P2-upper-front-S7301 | PULID | FB | P2-upper-front | 7301 | Y | Y | Y | N | 3/4 | N |
| PULID-FB-P2-upper-front-S19023 | PULID | FB | P2-upper-front | 19023 | Y | Y | Y | N | 3/4 | N |
| IPAFID-FA-P0-front-full-S42 | IPAFID | FA | P0-front-full | 42 | N | N | Y | Y | 2/4 | N |
| IPAFID-FA-P0-front-full-S7301 | IPAFID | FA | P0-front-full | 7301 | N | N | Y | Y | 2/4 | N |
| IPAFID-FA-P0-front-full-S19023 | IPAFID | FA | P0-front-full | 19023 | Y | N | Y | Y | 3/4 | N |
| IPAFID-FA-P1-back-full-S42 | IPAFID | FA | P1-back-full | 42 | Y | N | Y | Y | 3/4 | N |
| IPAFID-FA-P1-back-full-S7301 | IPAFID | FA | P1-back-full | 7301 | Y | N | Y | N | 2/4 | N |
| IPAFID-FA-P1-back-full-S19023 | IPAFID | FA | P1-back-full | 19023 | Y | N | Y | Y | 3/4 | N |
| IPAFID-FA-P2-upper-front-S42 | IPAFID | FA | P2-upper-front | 42 | N | Y | Y | Y | 3/4 | N |
| IPAFID-FA-P2-upper-front-S7301 | IPAFID | FA | P2-upper-front | 7301 | N | Y | Y | N | 2/4 | N |
| IPAFID-FA-P2-upper-front-S19023 | IPAFID | FA | P2-upper-front | 19023 | Y | Y | Y | N | 3/4 | N |
| IPAFID-FB-P0-front-full-S42 | IPAFID | FB | P0-front-full | 42 | Y | N | Y | N | 2/4 | N |
| IPAFID-FB-P0-front-full-S7301 | IPAFID | FB | P0-front-full | 7301 | Y | N | Y | N | 2/4 | N |
| IPAFID-FB-P0-front-full-S19023 | IPAFID | FB | P0-front-full | 19023 | N | N | Y | Y | 2/4 | N |
| IPAFID-FB-P1-back-full-S42 | IPAFID | FB | P1-back-full | 42 | N | N | Y | N | 1/4 | N |
| IPAFID-FB-P1-back-full-S7301 | IPAFID | FB | P1-back-full | 7301 | Y | N | Y | Y | 3/4 | N |
| IPAFID-FB-P1-back-full-S19023 | IPAFID | FB | P1-back-full | 19023 | Y | N | Y | Y | 3/4 | N |
| IPAFID-FB-P2-upper-front-S42 | IPAFID | FB | P2-upper-front | 42 | Y | Y | Y | N | 3/4 | N |
| IPAFID-FB-P2-upper-front-S7301 | IPAFID | FB | P2-upper-front | 7301 | Y | Y | Y | N | 3/4 | N |
| IPAFID-FB-P2-upper-front-S19023 | IPAFID | FB | P2-upper-front | 19023 | Y | Y | Y | N | 3/4 | N |

## Vendor schema notes (verbatim input shape)

### FLUXPLD — `fal-ai/flux-pulid`

- **Contract**: PuLID over FLUX backbone. Best identity preservation among fal.ai face-conditioning candidates tested for headshots in v1 sweep (5/6 = 83%). Multi-face test: does it generalise.
- **Per-call cost**: ~$0.10
- **Cells judged**: 18
- **All-4-axes pass**: 5/18 (28%)

**fal.subscribe input mapping:**

```json
{
  "reference_image_url": "<face crop CDN URL>",
  "prompt": "<body framing prompt>",
  "id_weight": 1.0,
  "num_inference_steps": 20,
  "guidance_scale": 4,
  "image_size": "portrait_4_3",
  "negative_prompt": "blurry, low quality, deformed, distorted, bad anatomy, cropped face, close-up of face only",
  "seed": 42
}
```

### PULID — `fal-ai/pulid`

- **Contract**: SDXL-backbone PuLID. 50% on prior single-face headshot probe; retest with body framing and multi-face.
- **Per-call cost**: ~$0.05
- **Cells judged**: 18
- **All-4-axes pass**: 5/18 (28%)

**fal.subscribe input mapping:**

```json
{
  "reference_images": [
    {
      "image_url": "<face crop CDN URL>"
    }
  ],
  "prompt": "<body framing prompt>",
  "id_scale": 1.2,
  "mode": "fidelity",
  "num_inference_steps": 8,
  "guidance_scale": 1.2,
  "num_images": 1,
  "seed": 42,
  "image_size": "portrait_4_3"
}
```

### IPAFID — `fal-ai/ip-adapter-face-id`

- **Contract**: IP-Adapter Face ID on SDXL-v2-plus. 67% on prior single-face probe. Cheap; tested for completeness.
- **Per-call cost**: ~$0.05
- **Cells judged**: 18
- **All-4-axes pass**: 0/18 (0%)

**fal.subscribe input mapping:**

```json
{
  "face_image_url": "<face crop CDN URL>",
  "prompt": "<body framing prompt>",
  "model_type": "SDXL-v2-plus",
  "num_samples": 1,
  "num_inference_steps": 30,
  "guidance_scale": 5.0,
  "width": 768,
  "height": 1024,
  "seed": 42,
  "face_id_det_size": 640
}
```

## Judge observations

### FLUXPLD-FA-P0-front-full-S42 — axes 4/4 — pass

The render shows a full-body front view of a woman who closely matches the reference's facial structure, jawline, and blonde wavy hair, against a clean light studio background with photographic quality.

### FLUXPLD-FA-P0-front-full-S7301 — axes 4/4 — pass

The render shows a full-body front view of a blonde woman with similar facial structure, jawline, and features to the reference, against a clean light studio background with photographic quality.

### FLUXPLD-FA-P0-front-full-S19023 — axes 4/4 — pass

The render shows a full-body front view of a blonde woman with matching facial structure, jawline, and features to the reference, against a clean light studio backdrop with photographic realism.

### FLUXPLD-FA-P1-back-full-S42 — axes 2/4 — fail: Q1, Q4

The render shows a featureless white mannequin with no facial identity preserved and an obviously artificial/plastic appearance rather than a photographic human likeness.

### FLUXPLD-FA-P1-back-full-S7301 — axes 2/4 — fail: Q1, Q4

The render is a featureless white mannequin/3D sculpture with no face, hair, or any photographic qualities, bearing no resemblance to the reference person.

### FLUXPLD-FA-P1-back-full-S19023 — axes 2/4 — fail: Q1, Q4

The render shows a featureless mannequin/3D sculpture with no hair, skin texture, or recognizable facial features, bearing no resemblance to the reference person.

### FLUXPLD-FA-P2-upper-front-S42 — axes 3/4 — fail: Q4

The render is noticeably blurry/soft-focus with plasticky, over-smoothed skin that lacks the photographic sharpness and natural texture of a real photograph.

### FLUXPLD-FA-P2-upper-front-S7301 — axes 2/4 — fail: Q1, Q4

The rendered face has a different bone structure (narrower, more angular jaw, different nose, heavier brows) than the reference, and the image is noticeably blurry/soft with plasticky skin typical of a failed AI render.

### FLUXPLD-FA-P2-upper-front-S19023 — axes 2/4 — fail: Q1, Q4

The render shows a different person with a narrower face, more prominent cheekbones, and shorter hair, and the image is heavily blurred/soft-focus giving it an unnatural non-photographic appearance.

### FLUXPLD-FB-P0-front-full-S42 — axes 4/4 — pass

The render shows the same dark-haired man with matching facial structure, jawline, and features in a clean full-body front-view studio shot that looks photographic.

### FLUXPLD-FB-P0-front-full-S7301 — axes 3/4 — fail: Q4

The render is noticeably blurred/soft-focus throughout, giving it an artificial, non-photographic quality rather than the crispness of a real photograph.

### FLUXPLD-FB-P0-front-full-S19023 — axes 4/4 — pass

The render shows the same dark-haired man with matching facial structure, jawline and nose in a clean full-body front-view pose against a neutral studio backdrop that looks photographic.

### FLUXPLD-FB-P1-back-full-S42 — axes 2/4 — fail: Q1, Q4

The render shows a featureless white mannequin/sculpture with no discernible face or identity, bearing no resemblance to the reference person and looking entirely non-photographic.

### FLUXPLD-FB-P1-back-full-S7301 — axes 2/4 — fail: Q1, Q4

The render is a featureless white mannequin/statue with no discernible facial features or skin texture, making identity verification impossible and the image clearly non-photographic.

### FLUXPLD-FB-P1-back-full-S19023 — axes 2/4 — fail: Q1, Q4

The render shows a full-body back view on a clean studio background, but the figure appears as a plasticky, mannequin-like model with unrealistically smooth skin rather than a photographic human, and the slim build and body proportions do not match the more athletic reference subject.

### FLUXPLD-FB-P2-upper-front-S42 — axes 3/4 — fail: Q4

The render has plasticky, overly smooth skin with a slightly artificial sheen that makes it look like a stylised AI-generated image rather than a real photograph.

### FLUXPLD-FB-P2-upper-front-S7301 — axes 3/4 — fail: Q4

The render has plasticky, over-smoothed skin with an artificial sheen and overly symmetric lighting typical of AI stylisation rather than a real photograph.

### FLUXPLD-FB-P2-upper-front-S19023 — axes 3/4 — fail: Q4

The render has noticeably plasticky, over-smoothed skin with a slightly artificial sheen that makes it look like a stylised AI render rather than a genuine photograph.

### PULID-FA-P0-front-full-S42 — axes 4/4 — pass

The render shows a full-body front view of a blonde woman whose facial structure, jawline, and overall features closely match the reference, against a clean grey studio backdrop with photographic realism.

### PULID-FA-P0-front-full-S7301 — axes 3/4 — fail: Q1

The rendered face shows a different woman with shorter blonde hair, a narrower facial structure, and distinct features that don't match the reference's broader jaw, fuller lips, and specific nose shape.

### PULID-FA-P0-front-full-S19023 — axes 2/4 — fail: Q1, Q2

The render shows a short-bobbed blonde with noticeably different facial structure (wider jaw, different nose, blue eyes vs. the reference's longer face and softer features), and the body is cropped at mid-thigh with feet not visible.

### PULID-FA-P1-back-full-S42 — axes 4/4 — pass

The render shows a plausible identity match with similar facial structure, blonde wavy hair, and comparable features; the body is full-length with a back-turned pose, feet visible, against a clean grey studio backdrop, with a photographic appearance throughout.

### PULID-FA-P1-back-full-S7301 — axes 3/4 — fail: Q1

The rendered figure has shorter bob-style hair, a narrower face, and different facial structure compared to the reference's long wavy blonde hair and distinctive jawline/features.

### PULID-FA-P1-back-full-S19023 — axes 3/4 — fail: body_framing_matches_prompt

The render shows a full-body side/three-quarter view with the face visible toward camera, not a back view with the subject turned away as prompted.

### PULID-FA-P2-upper-front-S42 — axes 3/4 — fail: Q1

The render shows a different person — shorter bob haircut, more angular jaw, deeper tan, and distinctly different eye color compared to the reference's long wavy hair, softer features, and lighter complexion.

### PULID-FA-P2-upper-front-S7301 — axes 2/4 — fail: Q1, Q4

The render shows a different person with distinctly blue eyes, a more angular jawline, shorter hair, and overly smoothed plasticky skin compared to the softer-featured, hazel-eyed reference.

### PULID-FA-P2-upper-front-S19023 — axes 2/4 — fail: Q1, Q2

The rendered face is a visibly different person (stronger jaw, blue eyes, shorter hair, more angular features) and the body is posed at a 3/4 angle rather than a front-facing view.

### PULID-FB-P0-front-full-S42 — axes 4/4 — pass

The render preserves the source's facial structure, jawline, and dark hair convincingly, shows a full head-to-feet front view against a clean grey studio backdrop, and reads as photographic in quality.

### PULID-FB-P0-front-full-S7301 — axes 4/4 — pass

The render preserves the source's facial structure, jawline, and dark hair convincingly, shows a full head-to-feet front view against a clean grey studio backdrop, and looks photographic in quality.

### PULID-FB-P0-front-full-S19023 — axes 3/4 — fail: Q2

The face identity is well preserved and the image looks photographic on a clean studio background, but the render is cropped at mid-shin and the feet are not visible, failing the head-to-feet full-body framing requirement.

### PULID-FB-P1-back-full-S42 — axes 3/4 — fail: Q4

The render has a plasticky, over-smoothed quality with unnaturally glossy fabric shading and slightly artificial skin on the partially visible face, betraying its AI-generated origin rather than looking like a real photograph.

### PULID-FB-P1-back-full-S7301 — axes 4/4 — pass

The render shows a full-body back view of a man whose dark hair, facial profile, jawline, and overall build are consistent with the reference, set against a clean grey studio backdrop with photographic realism.

### PULID-FB-P1-back-full-S19023 — axes 2/4 — fail: Q2, Q4

The render shows a side/three-quarter view with the face turned toward camera rather than a true back view turned away, and the image has a plasticky, over-smooth AI render quality inconsistent with real photography.

### PULID-FB-P2-upper-front-S42 — axes 3/4 — fail: Q4

The skin has an over-smoothed, plasticky sheen and the muscle definition appears artificially enhanced, giving the render a stylised AI look rather than a natural photograph.

### PULID-FB-P2-upper-front-S7301 — axes 3/4 — fail: Q4

The render has plasticky, over-smoothed skin with an artificial sheen and hyper-stylised hair highlights that make it look like a CGI illustration rather than a real photograph.

### PULID-FB-P2-upper-front-S19023 — axes 3/4 — fail: Q4

The skin has a plasticky, overly smoothed appearance with artificial catchlights and hyper-defined muscle rendering that looks like a stylised AI render rather than a real photograph.

### IPAFID-FA-P0-front-full-S42 — axes 2/4 — fail: Q1, Q2

The render shows a different person (heavier brow, different nose/jawline) cropped at the torso rather than showing the required head-to-feet full body view.

### IPAFID-FA-P0-front-full-S7301 — axes 2/4 — fail: Q1, Q2

The render shows a different person (heavier brow ridge, more angular jaw, fuller lips, darker skin tone) cropped at the waist rather than showing the full head-to-feet body as requested.

### IPAFID-FA-P0-front-full-S19023 — axes 3/4 — fail: body_framing_matches_prompt

The render shows only an upper-body/torso shot with feet not visible, failing the required head-to-feet full-body framing.

### IPAFID-FA-P1-back-full-S42 — axes 3/4 — fail: body_framing_matches_prompt

The render shows only an upper-body/torso crop with the subject turned and glancing back, not a full head-to-feet back view as requested.

### IPAFID-FA-P1-back-full-S7301 — axes 2/4 — fail: Q2, Q4

The render shows only an upper-body/torso crop with no feet visible, and the image has an over-smoothed, plasticky AI render appearance rather than looking like a genuine photograph.

### IPAFID-FA-P1-back-full-S19023 — axes 3/4 — fail: body_framing_matches_prompt

The render shows a upper-body three-quarter view with the face visible looking back over the shoulder, rather than a full head-to-feet back view with the subject turned away.

### IPAFID-FA-P2-upper-front-S42 — axes 3/4 — fail: Q1

The rendered face has blue eyes, a wider/flatter facial structure, and heavier brow arch compared to the reference's green/hazel eyes, softer features, and distinctly different nose — a visibly different person.

### IPAFID-FA-P2-upper-front-S7301 — axes 2/4 — fail: Q1, Q4

The render shows a different person with a broader jaw, heavier brows, fuller lips, and more prominent bone structure than the reference, and the skin has an over-smoothed, plasticky AI appearance with artificially sharp hair strands.

### IPAFID-FA-P2-upper-front-S19023 — axes 3/4 — fail: Q4

The skin has an over-smoothed, plasticky sheen with exaggerated contouring highlights that make the render look like a stylised AI image rather than a real photograph.

### IPAFID-FB-P0-front-full-S42 — axes 2/4 — fail: Q2, Q4

The render shows only an upper-body crop (feet not visible) and has a plasticky, over-smoothed AI render quality rather than a genuine photograph.

### IPAFID-FB-P0-front-full-S7301 — axes 2/4 — fail: Q2, Q4

The render shows only an upper-body/torso crop rather than the required head-to-feet full-body view, and the skin and overall image have a plasticky, over-smoothed AI render quality rather than a photographic look.

### IPAFID-FB-P0-front-full-S19023 — axes 2/4 — fail: Q1, Q2

The rendered face is visibly older, more angular, and resembles a different person (notably Tom Cruise-like features), and the image is cropped at the waist rather than showing the full head-to-feet body framing.

### IPAFID-FB-P1-back-full-S42 — axes 1/4 — fail: Q1, Q2, Q4

The render shows a different-looking man with a narrower, more angular face facing the camera in a 3/4 upper-body shot — not the source identity, not a full-body back view, and the skin has a plasticky over-rendered AI appearance.

### IPAFID-FB-P1-back-full-S7301 — axes 3/4 — fail: body_framing_matches_prompt

The render shows only an upper-body three-quarter back view with feet not visible, rather than the required full head-to-feet back view.

### IPAFID-FB-P1-back-full-S19023 — axes 3/4 — fail: body_framing_matches_prompt

The render shows an upper-body three-quarter front-facing view with the face looking at camera, rather than a full head-to-feet back/turned-away shot as requested.

### IPAFID-FB-P2-upper-front-S42 — axes 3/4 — fail: Q4

The skin has a slightly plasticky, over-smoothed quality typical of AI renders, lacking natural pore texture and photographic realism.

### IPAFID-FB-P2-upper-front-S7301 — axes 3/4 — fail: Q4

The skin has an overly smooth, plasticky quality with artificially perfect lighting that makes the render look like a retouched CGI image rather than a real photograph.

### IPAFID-FB-P2-upper-front-S19023 — axes 3/4 — fail: Q4

The skin has a plasticky, over-smoothed quality with slightly artificial lighting that gives the render a CGI appearance rather than a genuine photograph.

## Webapp recommendation

**No fal.ai vendor cleared the 75% multi-face bar.** Native identity-preserving body generation is not viable through fal.ai with the vendors tested at the multi-face bar.

### Ranked next options

1. **Off-platform — Replicate.com PuLID/PhotoMaker variants** — richer parameter surfaces (more inference steps, tunable face_attention weights). Run same 4-axis judge against same fixtures and prompts.
2. **HuggingFace Inference — PhotoMaker-V2 / FlashFace / Face0** — purpose-built single-face conditioning models with better SOTA on full-body framing.
3. **Hybrid pipeline (lowest engineering risk)** — FASHN model-create for body, then FASHN `/edit` masking face region with the Kontext face crop as image_context. Same vendor; deterministic identity rescue. Confirm with Thor whether 'same-vendor edit pass' counts as 'no post-process'.
4. **Self-host PuLID or PhotoMaker-V2 on ComfyUI / Modal** — highest engineering cost; unlocks LoRA stack tuning.

## Defaults documented

- **Face A**: cropped from webapp marketing fixture `preview-models.jpg` — blonde woman, mid-20s, light eyes, white tank.
- **Face B**: cropped from webapp marketing fixture `preview-pants.jpg` — brown-haired man, mid-30s, light eyes, grey tee. Production-template aligned per Thor's brief.
- **Prompts**: 3 framings — front full-body, back full-body, upper-body front.
- **Seeds**: [42, 7301, 19023].
- **Per-cell PASS bar**: all 4 axes Y — face identity is LOAD-BEARING.
- **Per-vendor PROCEED bar**: >= 75% of cells (>= 14/18).
- **Judge**: Claude `claude-sonnet-4-6`, two-image vision call.
- **Vendor priority**: FLUXPLD → PULID → IPAFID. Early-stop at first PROCEED.
- **Hard budget cap**: $6.00 (fal + judge).

---

_Per `feedback_labs_results_need_thor_review_before_port` — DO NOT port to webapp until Thor reviews this RECOMMENDATION.md (+ `validate.html`) and explicitly directs which (if any) vendor to apply._

Other files (1)