Generative models have mostly worked as a black box: you type a prompt, an image comes back, and you have no visibility into how the prompt was interpreted. That is fine for brainstorming and poor for production, where teams need precision, consistency and reproducibility.
Bria's answer is Visual Generation Language (VGL): a structured, explicit JSON description of a scene that both humans and machines can read and edit. The FIBO model family is trained natively on VGL. It is not a wrapper or a post-processing step; VGL is the representation the models render from, and every generation returns the full VGL specification behind the image.
| Prompt-based generation | VGL-based generation | |
|---|---|---|
| Input | Natural language | A structured specification (JSON) |
| Strength | Fast creative exploration | Precision, auditability, systematic edits |
| Reproducibility | Interpretation varies between runs | Same specification and seed, same output |
| Editing | Rewrite the prompt and hope | Change one attribute, keep everything else |
In practice you rarely write VGL by hand. You send a prompt (or a reference image), FIBO's translation step turns it into VGL, the image is rendered, and you get both back. From there you can store the specification, tweak a single field, or feed it to another FIBO model.
- Explicit. Every visual attribute is declared. If a lighting condition was used, it is in the VGL.
- Disentangled. Change the lighting direction without touching the object's texture or the background.
- Physically grounded. Parameters map to real-world quantities: normalized pixel positions, camera optics, lighting conditions.
- Natively typed. Semantics are words, quantities are numbers, positions are coordinates, colors are RGB values.
- Precision editing. Because the scene is structured (a "person" is an addressable object with clothing properties), "change the shirt color" becomes a data edit rather than a masking exercise.
- Reproducibility and audit. Compliance teams can inspect every parameter that produced an asset, and the same VGL plus seed reproduces it.
- Automation. VGL is JSON, so agents and pipelines can read, validate, transform and chain specifications without a human in the loop.
- Brand consistency. Encode brand rules as concrete parameters (palettes, lighting, mood) instead of asking a model to "look like our brand".
| Endpoint | Role |
|---|---|
POST /v2/image/generate | Prompt or image in, image plus structured_prompt (VGL) out. Send structured_prompt and seed back to reproduce; add a prompt to refine. |
POST /v2/structured_prompt/generate | Only the translation step: returns the VGL without rendering, for review or programmatic editing. |
POST /v2/structured_prompt/generate_from_diff | Repairs and optimizes a VGL document after a user edited it directly. |
POST /v2/image/edit and /v2/structured_instruction/generate | The editing equivalent: a structured_instruction describes the change to apply to an existing image. |
The Image Generation best practices guide covers the explore, lock and render workflow that uses these together. The vgl agent skill teaches coding agents to write VGL directly.
A VGL document describes what is in the image, where things are, how the scene is lit, and how it feels. Every field below is a real field on the document; the comments describe type and whether it's required.
{
"short_description": "string, required — the semantic anchor: a concise description of what the visual represents",
"background_setting": "string, required — environment, location and scene context",
"style_medium": "string, required — photography | digital illustration | 3D render | vector art | watercolor | oil painting | pencil sketch | anime | pixel art",
"artistic_style": "string — specific stylistic references or influences, e.g. \"lifestyle photography, café culture aesthetic, warm tones\"",
"context": "string — narrative and situational framing, e.g. \"autumn seasonal marketing image for a coffee brand\"",
"lighting": { // object, required
"conditions": "string — overall lighting quality",
"direction": "string — primary light source",
"shadows": "string — shadow characteristics"
},
"aesthetics": { // object, required
"composition": "string — framing and arrangement",
"mood_atmosphere": "string — emotional quality",
"color_palette": "[[R, G, B], ...] — global color governance"
},
"photographic_characteristics": { // object, optional
"depth_of_field": "string",
"focus": "string — target and sharpness",
"camera_angle": "string",
"lens_focal_length": "string"
},
"objects": [ // array of object, optional — every discrete element in the scene
{
"description": "string — what the object is",
"bounding_box": "[x, y, w, h] — normalized coordinates for exact placement",
"shape_and_color": "string — physical form and primary color. In the next VGL version this becomes primary_color and secondary_color as [R, G, B] arrays",
"texture": "string — matte | glossy | rough | smooth",
"appearance_details": "string — additional visual characteristics",
"relationship": "string — spatial or semantic relationship to other objects",
"orientation": "string — direction the object faces or is positioned",
"relative_distance": "string — foreground | midground | background",
// added only when this object is a person:
"age": "number — apparent age in years",
"gender": "\"male\" | \"female\" | \"NA\"",
"pose": "[[pose_name, [x, y]], ...] — body keypoints, normalized coordinates",
"expression": "string — facial expression and emotional state",
"clothing": "string — attire and accessories. In the next VGL version this becomes an array of objects",
"action": "string — what the person is doing",
"skin_tone_and_texture": "string — skin appearance",
"monk_scale": "number, 1-10 — Monk Skin Tone Scale value"
}
],
"text_render": [ // array of object, optional — typography elements embedded in the visual
{
"text": "string — the text content",
"color": "string — primary text color in RGB",
"font": "string — font family or style description",
"appearance_details": "string — additional styling",
"bounding_box": "[x, y, w, h] — normalized placement",
"relative_distance": "string — layer position relative to scene elements"
}
]
}{
"short_description": "A warm outdoor cafe patio scene: a woman enjoying a coffee at a small bistro table, an A-frame chalkboard sign on cobblestones announcing 'TODAY'S SPECIAL' and 'Pumpkin Spice', potted plants, and a glowing neon 'OPEN' sign in the window behind.",
"background_setting": "European-style outdoor cafe patio with cobblestone ground, storefront with large windows, urban street, autumn atmosphere",
"lighting": {
"conditions": "soft, warm late-afternoon daylight",
"direction": "from the upper left",
"shadows": "long, soft shadows across the cobblestones"
},
"aesthetics": {
"composition": "subject slightly right of center, sign in the left foreground, negative space at top",
"mood_atmosphere": "cozy, inviting, unhurried",
"color_palette": [[181, 101, 29], [120, 81, 45], [237, 201, 175]]
},
"photographic_characteristics": {
"depth_of_field": "shallow",
"focus": "on the woman and the sign",
"camera_angle": "eye level",
"lens_focal_length": "50mm"
},
"style_medium": "photography",
"artistic_style": "lifestyle photography, cafe culture aesthetic, warm tones",
"context": "Autumn seasonal marketing image for a coffee brand"
}VGL is the shared language of the FIBO family: FIBO for high-fidelity generation, FIBO Lite for high-volume and on-premises production, and FIBO Edit for editing existing images. A VGL document created in one part of your pipeline can be executed by a different FIBO model in another part without translation, from concept to production.
Ready to try it? Generate a structured prompt with /v2/structured_prompt/generate, edit a field, and render it with /v2/image/generate.