model — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited model (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Generates a matched headshot, full-body casting digital, and 4-panel character reference sheet for a brand model character.
Three images are produced:
All three saved to ./brands/[brand-name]/models/[model-name]/.
The character sheet is on by default. Skip with --skip-character-sheet if you don't plan to feed downstream video tools that need a multi-angle reference (saves ~$0.12).
Two modes:
Scan ./brands/ for subfolders that contain a brand-identity/visual-guidelines.md file.
/brand first to set up their brandBefore collecting characteristics, ask: "Do you have a reference photo of the person you want this model to look like? If so, paste the path or drop it into the chat. Skip if you're inventing a new character from scratch."
reference.png (or the original extension). The generator will use it in reference mode so the output actually resembles the person. Still collect characteristics in Step 3 — they guide wardrobe, expression, and anything the image alone can't convey.Ask the user for all of the following in one grouped message. Tell them to skip anything that doesn't apply (e.g. facial hair for a female model).
I need a few details to build your model. Fill in what applies:
DEMOGRAPHICS
Age:
Sex:
Ethnicity:
PHYSICAL FEATURES
Skin tone:
Face shape:
Jawline:
Cheekbones:
Cheeks:
Eye shape:
Eye colour:
Eyebrows:
Nose:
Lips:
Freckles:
Facial hair:
HAIR
Colour:
Style:
BUILD
Height:
Body type:
AESTHETIC NOTES
Tone: (e.g. Natural, editorial, high fashion, athletic, commercial)
Expression: (leave blank for neutral — the default)Confirm back the full characteristics list before proceeding. Ask if they want to change anything.
Ask: "What would you like to name this model? This becomes the folder name — e.g. jade, marcus-02, hero-female."
Slug the name: lowercase, hyphens, no spaces or special characters.
Create the folder and write the spec:
brands/[brand-name]/models/[model-name]/
model-spec.json
characteristics.mdmodel-spec.json format:
{
"model_name": "[model-name]",
"brand": "[brand-name]",
"characteristics": "Age: 23\nSex: Female\nEthnicity: Asian\nSkin tone: Slightly olive, slight freckles\nFace shape: Oval\nJawline: Defined\nCheekbones: Prominent, high\nCheeks: Natural, strong and defined\nEye shape: Almond\nEye colour: Green\nEyebrows: Natural, medium thickness\nNose: Small, straight, lightly rounded tip\nLips: Plump, natural finish\nFreckles: Lightly scattered on nose and cheeks\nFacial hair: None\nHair colour: Light brown\nHair style: Mid-length, slight waves, centre part\nHeight: Average\nBody type: Slim\nTone: Natural, high fashion"
}Format the characteristics as a flat newline-separated key: value list. Include only fields the user provided — omit blanks.
characteristics.md — a readable reference copy:
# [Model Name] — Characteristics
## Demographics
Age: 23
Sex: Female
Ethnicity: Asian
## Physical features
Skin tone: Slightly olive, slight freckles
Face shape: Oval
...
## Hair
Colour: Light brown
Style: Mid-length, slight waves, centre part
## Build
Height: Average
Body type: Slim
## Aesthetic
Tone: Natural, high fashionRun from the project root.
Default (invented character, no reference photo):
python3 skills/references/generate-model.py brands/[brand-name]/models/[model-name]fal-ai/nano-banana-2)fal-ai/nano-banana-2/edit), using the headshot as face referenceReference mode (user provided a photo in Step 2):
python3 skills/references/generate-model.py brands/[brand-name]/models/[model-name] --reference brands/[brand-name]/models/[model-name]/reference.pngUse reference mode when the output needs to actually resemble a real person (client photo, creator likeness, etc.). The characteristics text still guides wardrobe, expression, and anything the image alone can't convey.
Skip the character sheet (cost-conscious or you don't need a multi-angle reference for downstream video):
python3 skills/references/generate-model.py brands/[brand-name]/models/[model-name] --skip-character-sheetCost: ~$0.36 total with character sheet (3 × $0.12 at 2K) · ~$0.24 with --skip-character-sheet · same in either reference mode.
Once generation completes:
brands/[brand-name]/models/[model-name]/headshot.pngbrands/[brand-name]/models/[model-name]/fullbody.pngbrands/[brand-name]/models/[model-name]/character-sheet.png (unless skipped)Once the user is happy, suggest the next step:
"Your model is ready. When you're ready to place clothing on them, run/styleto dress the model in a product from your brand. Thecharacter-sheet.pngis what you upload to Kling's 'Bind elements' feature in/add-motion(or directly on kling.ai) to lock the character's face across video generations."
Regenerate all images (same characteristics):
python3 skills/references/generate-model.py brands/[brand-name]/models/[model-name]Add --reference path/to/photo.png if the original run used a reference image (and you still want likeness preserved). Overwrites headshot.png, fullbody.png, and character-sheet.png. Add --skip-character-sheet to only regenerate the first two.
Tweak characteristics and regenerate:
model-spec.json and characteristics.mdRegenerate full body or character sheet only (keep headshot): Not supported directly — the full body and character sheet both use the headshot as face reference, so all three regenerate together for a consistent match. The headshot step is fast (~15 seconds).
models/ subfolder — multiple brands can have separate model rosters in the same projectbrands/[brand]/models/jade/, brands/[brand]/models/marcus/.env has a valid FAL_KEY~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.