Cross-platform character consistency

Every platform breaks your character differently

Design the character in Midjourney, animate it in Kling, finish somewhere else. Each hop means re-uploading, re-anchoring, and finding out that the wording which worked yesterday does something else here.

avatar-lab is the translation layer for that hop: one written character, and the per-platform settings that actually hold it together — measured, not guessed.

You already know the first half

Define fifteen to twenty concrete physical attributes. Generate a reference sheet — front, three-quarter, profile. Use it as the anchor for every scene. This is standard practice in 2026 and it is not what we are selling.

The part that is not written down anywhere is what happens next: the same sheet and the same wording produce a different failure on every platform you take it to. Not a smaller or larger version of the same failure — a different one.

What you'd reasonably assumeWhat we measured
Turn reference strength downto get more scene freedom Identity and scene adherence fall together. At the low end the output has no measurable relationship to the scene description at all. There is no trade to make.
Use a full-body referenceto get a full-body shot The framing got tighter. Composition is driven by how much facial detail sits in the prompt, not by the reference image — and widening it costs 67% of face identity for 7% more scene adherence.
Train the character into the platformfor the strongest lock For a stylised character, the trained version kept 0% of its declared markers — hair colour, face mark, collar palette all wrong. Plain reference images kept 100%. Verified on two platforms.
Higher similarity score is betterso pick the top of the table The highest-scoring platform in our run had the lowest identity score. It reproduced the reference framing five times and ignored three of the five scenes. One number is not enough to tell those apart.

None of this is in any vendor's documentation. Two of the four contradicted what we ourselves believed four days earlier.

What it is

A character pack, and a translator for each destination

Carried across

  • The written specification — silhouette, structure, garment, identity markers, hex palette, prohibitions
  • A reference set generated from that specification, not collected and described afterwards
  • Per-platform anchor text and parameters, because the same wording does not work twice
  • Provenance: decisions, iterations, rejected alternatives

Deliberately not

  • Not a trained model. Weights live on one platform and cannot leave it
  • Not a prompt template. Text alone is lossy — the reference set does the other half
  • Not another closed character system. If the character cannot be taken elsewhere, it has failed at its only job

Why portability has to come from outside the platforms. A platform has no reason to help a character leave. Trained character objects have no export field — that is not an oversight. The layer that carries a character between platforms cannot be built by any of them.

Evidence

Published in full, including what we got wrong

The main run: one character, seven arms across five independent base models, the same five scenes each, five metrics. Three further rounds — Midjourney, Kling, video — ran under their own conditions and are reported separately rather than pooled. Eight independent base models in total, with the limitations stated before the results and three of our own hypotheses recorded as refuted.

Identity similarity alone is easy to game: a model that ignores the prompt and repeats the reference framing scores extremely well on it. So every result is reported on axes that can disagree — face identity, whole-subject similarity, prompt adherence, and how rigid the output set became.

Read the measurement note →

Open format

The specification is public

Ten rules for writing a character that survives, each stated with the experiment that produced it. Apply them by hand; no tool required. The one that matters most costs nothing to adopt — an identity marker you cannot answer with yes or no is not an identity marker.

Open on purpose. A character that only works inside one product has the same problem as a character that only works inside one platform.

Read the specification →

Status

Not open for signup yet

The tooling that automates this — building the pack, generating the reference set, producing per-platform anchors, scoring the output — exists and is in daily use, but has not been opened to anyone else. Claiming otherwise would be the first inconsistency on this site.

If this is a hop you make regularly, that is worth knowing before anything further gets built.

Get in touch →