$npx -y skills add Bria-AI/bria-skill --skill vglMaximum control over AI image generation — write structured VGL (Visual Generation Language) JSON that explicitly controls every visual attribute. Define exact object placement, lighting direction, camera angle, lens focal length, composition, color scheme, and artistic style as
| 1 | # Bria VGL — Full Control Over Image Generation |
| 2 | |
| 3 | Define every visual attribute as structured JSON instead of hoping natural language gets it right. VGL (Visual Generation Language) gives you explicit, deterministic control over objects, lighting, camera settings, composition, and style for Bria's FIBO models. |
| 4 | |
| 5 | > **Related Skill**: Use **[bria-ai](../bria-ai/SKILL.md)** to execute these VGL prompts via the Bria API. VGL defines the structured control format; bria-ai handles generation, editing, and background removal. |
| 6 | |
| 7 | ## Core Concept |
| 8 | |
| 9 | VGL replaces ambiguous natural language prompts with deterministic JSON that explicitly declares every visual attribute: objects, lighting, camera settings, composition, and style. This ensures reproducible, controllable image generation. |
| 10 | |
| 11 | ## Operation Modes |
| 12 | |
| 13 | | Mode | Input | Output | Use Case | |
| 14 | |------|-------|--------|----------| |
| 15 | | **Generate** | Text prompt | VGL JSON | Create new image from description | |
| 16 | | **Edit** | Image + instruction | VGL JSON | Modify reference image | |
| 17 | | **Edit_with_Mask** | Masked image + instruction | VGL JSON | Fill grey masked regions | |
| 18 | | **Caption** | Image only | VGL JSON | Describe existing image | |
| 19 | | **Refine** | Existing JSON + edit | Updated VGL JSON | Modify existing prompt | |
| 20 | |
| 21 | ## JSON Schema |
| 22 | |
| 23 | Output a single valid JSON object with these required keys: |
| 24 | |
| 25 | ### 1. `short_description` (String) |
| 26 | Concise summary of image content, max 200 words. Include key subjects, actions, setting, and mood. |
| 27 | |
| 28 | ### 2. `objects` (Array, max 5 items) |
| 29 | Each object requires: |
| 30 | |
| 31 | ```json |
| 32 | { |
| 33 | "description": "Detailed description, max 100 words", |
| 34 | "location": "center | top-left | bottom-right foreground | etc.", |
| 35 | "relative_size": "small | medium | large within frame", |
| 36 | "shape_and_color": "Basic shape and dominant color", |
| 37 | "texture": "smooth | rough | metallic | furry | fabric | etc.", |
| 38 | "appearance_details": "Notable visual details", |
| 39 | "relationship": "Relationship to other objects", |
| 40 | "orientation": "upright | tilted 45 degrees | facing left | horizontal | etc." |
| 41 | } |
| 42 | ``` |
| 43 | |
| 44 | **Human subjects** add: |
| 45 | ```json |
| 46 | { |
| 47 | "pose": "Body position description", |
| 48 | "expression": "winking | joyful | serious | surprised | calm", |
| 49 | "clothing": "Attire description", |
| 50 | "action": "What the person is doing", |
| 51 | "gender": "Gender description", |
| 52 | "skin_tone_and_texture": "Skin appearance" |
| 53 | } |
| 54 | ``` |
| 55 | |
| 56 | **Object clusters** add: |
| 57 | ```json |
| 58 | { |
| 59 | "number_of_objects": 3 |
| 60 | } |
| 61 | ``` |
| 62 | |
| 63 | **Size guidance**: If a person is the main subject, use `"medium-to-large"` or `"large within frame"`. |
| 64 | |
| 65 | ### 3. `background_setting` (String) |
| 66 | Overall environment, setting, and background elements not in `objects`. |
| 67 | |
| 68 | ### 4. `lighting` (Object) |
| 69 | ```json |
| 70 | { |
| 71 | "conditions": "bright daylight | dim indoor | studio lighting | golden hour | blue hour | overcast", |
| 72 | "direction": "front-lit | backlit | side-lit from left | top-down", |
| 73 | "shadows": "long, soft shadows | sharp, defined shadows | minimal shadows" |
| 74 | } |
| 75 | ``` |
| 76 | |
| 77 | ### 5. `aesthetics` (Object) |
| 78 | ```json |
| 79 | { |
| 80 | "composition": "rule of thirds | symmetrical | centered | leading lines | medium shot | close-up", |
| 81 | "color_scheme": "monochromatic blue | warm complementary | high contrast | pastel", |
| 82 | "mood_atmosphere": "serene | energetic | mysterious | joyful | dramatic | peaceful" |
| 83 | } |
| 84 | ``` |
| 85 | For people as main subject, specify shot type in composition: `"medium shot"`, `"close-up"`, `"portrait composition"`. |
| 86 | |
| 87 | ### 6. `photographic_characteristics` (Object) |
| 88 | ```json |
| 89 | { |
| 90 | "depth_of_field": "shallow | deep | bokeh background", |
| 91 | "focus": "sharp focus on subject | soft focus | motion blur", |
| 92 | "camera_angle": "eye-level | low angle | high angle | dutch angle | bird's-eye", |
| 93 | "lens_focal_length": "wide-angle | 50mm standard | 85mm portrait | telephoto | macro" |
| 94 | } |
| 95 | ``` |
| 96 | **For people**: Prefer `"standard lens (35mm-50mm)"` or `"portrait lens (50mm-85mm)"`. Avoid wide-angle unless specified. |
| 97 | |
| 98 | ### 7. `style_medium` (String) |
| 99 | `"photograph"` | `"oil painting"` | `"watercolor"` | `"3D render"` | `"digital illustration"` | `"pencil sketch"` |
| 100 | |
| 101 | Default to `"photograph"` unless explicitly requested otherwise. |
| 102 | |
| 103 | ### 8. `artistic_style` (String) |
| 104 | If not photograph, describe characteristics in max 3 words: `"impressionistic, vibrant, textured"` |
| 105 | |
| 106 | For photographs, use `"realistic"` or |