Create a new Flow character whose portrait (and optionally body) is a REAL
PHOTO, not a text description or generation. Both photos become the character's
slot-0 (portrait) and slot-1 (body) images directly — Flow's own upload mechanism
in its New Character composer, discovered live 2026-07-11 — no image generation
call happens for either slot, so resemblance is exact, not "similar style". Boots
the on-demand Chrome for this account (~15-30s, longer if body_photo_base64 is
also given), same as create_character, no Android/recaptcha involved.
photo_base64: raw base64-encoded image bytes, no data: URI prefix — portrait.
body_photo_base64: same format, optional — ideally a full-body photo of the same
person, for a guaranteed-exact body image (no generation at all for that slot).
physical_description: IMPORTANT, look at the photo yourself and write this —
a detailed physical description (build, hair color/style, eye color, clothing,
distinguishing features), similar in spirit to: "Adult male, mid-20s, ~180cm,
lean build. Medium-brown wavy hair, light blue-grey eyes, faint stubble. Wears
a dark grey hoodie, dark jeans, white sneakers." This gets saved into the same
"Character Info" field as Flow's own UI. CORRECTED same day as this tool was
first built: an earlier version of this doc claimed body/multi-view generation
can never stay consistent with a photo-seeded portrait — WRONG, confirmed live.
The actual missing ingredient was this detailed text spec — with it, both
generate_character_turnaround and generate_character_expression_sheet below
produce genuinely consistent, on-model results (reproduced live against Flow's
real UI, not just guessed). Skip this only for a bare portrait-only character
with no further generation planned.
Next step after you have entity_id: update_character for a display name, then
generate_character_turnaround / generate_character_expression_sheet if you want
those (skip if you already passed body_photo_base64 for an exact body photo —
generating over it would replace the real photo with a generated approximation).
Fidelity note added 2026-07-11 (later same day): "genuinely consistent" above means
consistent WITH ITSELF across panels (same invented-looking person in every view),
not necessarily an exact match to the real person's face — real-world feedback was
"I don't recognize myself." Good for stylized/invented character sheets; if the goal
is content that's recognizably the actual person, use generate_video_with_reference
(r2v) instead, which conditions on the real photo's pixels rather than a description.
name: optional, added 2026-07-25 — give the character a short human-readable name
and it's saved to YOUR list (list_characters()), keyed on the uploaded photo as the
identity reference (portrait_media_id). Once named, use
generate_with_face(character=name, prompt=...) for further images instead of
tracking portrait_media_id yourself. Must be unique among your own characters; a
clash does NOT fail the call — the character is still created in Flow, just
reported back with a `registration_error` instead of a `name` in the result, so
pick a different name and register it yourself later if that happens.