{
  "name": "AI Product Ad",
  "meta": {
    "state": {
      "nodes": [
        {
          "id": "89296bc6-285a-4335-b043-69af4f45a2e7",
          "size": {
            "width": 200,
            "height": 293
          },
          "inputs": {
            "image": "https://storage.googleapis.com/saquib-sh.appspot.com/thefluxtrain/v02/image-generation/35ae2291-a199-4a2e-9742-f9b0c43c3152/l9dowg8.png"
          },
          "position": {
            "x": -140.12849162011008,
            "y": 52.13035381750518
          },
          "definitionId": "input-image",
          "internalState": {},
          "label": "Model"
        },
        {
          "id": "90f22898-f45e-442e-865b-28bdeb5096e0",
          "size": {
            "width": 363.6582278481013,
            "height": 428.05063291139237
          },
          "inputs": {
            "image": "https://storage.googleapis.com/saquib-sh.appspot.com/thefluxtrain/v02/image-generation/35ae2291-a199-4a2e-9742-f9b0c43c3152/1ch1txp.png",
            "prompt": "Ultra-realistic premium vintage-style portable speaker advertisement, featuring a man, 30, wearing a T-shirt. They are styled to match a cohesive brown theme, with visual elements (hair, accessories, or accents) subtly reflecting the same tone.\n\nThe subject is captured in a dynamic, cinematic pose — reaching out as if to adjust the speaker — presented with strong forced perspective, where the vintage-style portable speaker with wood finish and leather handle dominates the foreground in a bold hero shot.\n\nOutfit: styled in a fashion-forward, tech-inspired look incorporating brown tones, paired with complementary neutral elements to enhance the premium visual identity.",
            "image_1": "https://storage.googleapis.com/saquib-sh.appspot.com/thefluxtrain/v02/image-generation/35ae2291-a199-4a2e-9742-f9b0c43c3152/l9dowg8.png",
            "resolution": "1K",
            "aspectRatio": "16:9",
            "numberOfOutputs": 1,
            "image_2": "https://storage.googleapis.com/saquib-sh.appspot.com/thefluxtrain/v02/image-generation/35ae2291-a199-4a2e-9742-f9b0c43c3152/go3ypbn.png"
          },
          "position": {
            "x": 779.7475131681772,
            "y": 108.82190178062885
          },
          "definitionId": "model-nano-banana-2",
          "internalState": {
            "sink": {
              "items": [
                "https://storage.googleapis.com/saquib-sh.appspot.com/thefluxtrain/v02/image-generation/35ae2291-a199-4a2e-9742-f9b0c43c3152/x8tletf.png",
                "https://storage.googleapis.com/saquib-sh.appspot.com/thefluxtrain/v02/image-generation/35ae2291-a199-4a2e-9742-f9b0c43c3152/u10z179.png",
                "https://storage.googleapis.com/saquib-sh.appspot.com/thefluxtrain/v02/image-generation/35ae2291-a199-4a2e-9742-f9b0c43c3152/1ch1txp.png"
              ],
              "activeIndex": 2
            }
          },
          "dynamicInputs": [
            {
              "id": "image_2",
              "label": "Image 2",
              "type": "image",
              "allowedTypes": [
                "image"
              ],
              "component": "upload",
              "defaultValue": "",
              "visibleInNode": true,
              "isRequired": false
            }
          ]
        },
        {
          "id": "7beceab6-b473-4251-b63e-b1baa5873285",
          "size": {
            "width": 314.6489361702128,
            "height": 255.58510638297872
          },
          "label": "Template",
          "inputs": {
            "prompt": "Ultra-realistic premium {product} advertisement, featuring {model}.\nThey are styled to match a cohesive {color} theme, with visual elements (hair, accessories, or accents) subtly reflecting the same tone.\n\nThe subject is captured in a dynamic, cinematic pose — {action} — presented with strong forced perspective, where the {product} dominates the foreground in a bold hero shot.\n\nOutfit: styled in a fashion-forward, tech-inspired look incorporating {color} tones, paired with complementary neutral elements to enhance the premium visual identity."
          },
          "position": {
            "x": 429.4412123111972,
            "y": -323.3782655534611
          },
          "definitionId": "input-prompt",
          "internalState": {}
        },
        {
          "id": "a237be65-7c79-4394-95fc-704f8de842f7",
          "size": {
            "width": 200,
            "height": 173.5425531914894
          },
          "inputs": {
            "prompt": "Model: man, 30, wering T-shirt\nProduct: Vintage-style portable speaker with wood finish and leather handle.\ncolor: Brown"
          },
          "position": {
            "x": 226.0347052668294,
            "y": -33.334147192187075
          },
          "definitionId": "input-prompt",
          "internalState": {}
        },
        {
          "id": "fe3126a9-4acb-4c37-8ef4-cfbb545aae7f",
          "definitionId": "input-image",
          "position": {
            "x": 229.02127659574467,
            "y": 474.64893617021283
          },
          "size": {
            "width": 200,
            "height": 244.44262295081973
          },
          "inputs": {
            "image": "https://storage.googleapis.com/saquib-sh.appspot.com/thefluxtrain/v02/image-generation/35ae2291-a199-4a2e-9742-f9b0c43c3152/go3ypbn.png"
          },
          "internalState": {},
          "label": "product"
        },
        {
          "id": "17bc7951-0c81-4de1-86fd-0e256f1f440f",
          "definitionId": "llm-describe-image",
          "position": {
            "x": 512.2659574468087,
            "y": 656.8297872340426
          },
          "size": {
            "width": 239.55696202531647,
            "height": 187.25316455696202
          },
          "inputs": {
            "image": "https://storage.googleapis.com/saquib-sh.appspot.com/thefluxtrain/v02/image-generation/35ae2291-a199-4a2e-9742-f9b0c43c3152/go3ypbn.png",
            "prompt": "Describe the product in 10 words. Tell 3 major color in the product",
            "model": "gpt-4o",
            "output": "Vintage-style portable speaker with wood finish and leather handle.\n\nThree major colors: Brown, beige, and brass."
          },
          "internalState": {},
          "label": "Describe Image: Use for help"
        },
        {
          "id": "e1a04713-2f97-4cd7-ae50-8fac5e341d1a",
          "definitionId": "llm-chat",
          "position": {
            "x": 803.1719677870835,
            "y": -223.38693028040586
          },
          "size": {
            "width": 310.7594936708861,
            "height": 215.91139240506328
          },
          "inputs": {
            "system_prompt": "Given the template and prompt, place the elements of the prompt into the template, make sure that action in the prompt are as per the product. It must always highlight the product. Do not change the product, and do not describe the product feature.",
            "instruction": "Ultra-realistic premium {product} advertisement, featuring {model}.\nThey are styled to match a cohesive {color} theme, with visual elements (hair, accessories, or accents) subtly reflecting the same tone.\n\nThe subject is captured in a dynamic, cinematic pose — {action} — presented with strong forced perspective, where the {product} dominates the foreground in a bold hero shot.\n\nOutfit: styled in a fashion-forward, tech-inspired look incorporating {color} tones, paired with complementary neutral elements to enhance the premium visual identity.",
            "model": "gpt-4o",
            "prompt_1": "Model: man, 30, wering T-shirt\nProduct: Vintage-style portable speaker with wood finish and leather handle.\ncolor: Brown",
            "output": "Ultra-realistic premium vintage-style portable speaker advertisement, featuring a man, 30, wearing a T-shirt. They are styled to match a cohesive brown theme, with visual elements (hair, accessories, or accents) subtly reflecting the same tone.\n\nThe subject is captured in a dynamic, cinematic pose — reaching out as if to adjust the speaker — presented with strong forced perspective, where the vintage-style portable speaker with wood finish and leather handle dominates the foreground in a bold hero shot.\n\nOutfit: styled in a fashion-forward, tech-inspired look incorporating brown tones, paired with complementary neutral elements to enhance the premium visual identity."
          },
          "dynamicInputs": [
            {
              "id": "prompt_1",
              "label": "Prompt 1",
              "type": "prompt",
              "allowedTypes": [
                "prompt",
                "text",
                "string"
              ],
              "component": "textarea",
              "defaultValue": "",
              "visibleInNode": true,
              "isRequired": false
            }
          ],
          "internalState": {}
        },
        {
          "id": "8a25fd8e-fff3-4fad-835d-142bc83c6dad",
          "definitionId": "input-lora",
          "position": {
            "x": -482.15652590378187,
            "y": 365.57074495247605
          },
          "size": {
            "width": 200
          },
          "inputs": {
            "model": "",
            "scale": 1
          },
          "internalState": {}
        },
        {
          "id": "d0f3f43f-fd5e-46fa-b48e-d6068306e71c",
          "definitionId": "flux-dev-lora",
          "position": {
            "x": -137.65000821290823,
            "y": 359.98415277370515
          },
          "size": {
            "width": 200
          },
          "inputs": {
            "prompt": "",
            "aspectRatio": "1:1",
            "guidance_scale": 3.5,
            "lora_1": null,
            "numberOfOutputs": 1
          },
          "internalState": {
            "sink": {
              "items": [],
              "activeIndex": 0
            }
          }
        },
        {
          "id": "d673bf0d-de98-467c-abf1-2f026238d71e",
          "definitionId": "utils-switch",
          "position": {
            "x": 467.5641444872752,
            "y": 216.59495351858476
          },
          "size": {
            "width": 200
          },
          "inputs": {
            "active_input_id": "input_1",
            "output": "https://storage.googleapis.com/saquib-sh.appspot.com/thefluxtrain/v02/image-generation/35ae2291-a199-4a2e-9742-f9b0c43c3152/l9dowg8.png",
            "input_1": "https://storage.googleapis.com/saquib-sh.appspot.com/thefluxtrain/v02/image-generation/35ae2291-a199-4a2e-9742-f9b0c43c3152/l9dowg8.png",
            "input_2": null
          },
          "dynamicInputs": [
            {
              "id": "input_1",
              "label": "Input 1",
              "type": "image",
              "allowedTypes": [
                "image",
                "video",
                "audio",
                "text",
                "number",
                "string",
                "aspect-ratio",
                "resolution",
                "prompt",
                "lora",
                "image-list",
                "multi-prompt-list",
                "kling-elements"
              ],
              "component": "input",
              "defaultValue": null,
              "visibleInNode": true,
              "isRequired": false
            },
            {
              "id": "input_2",
              "label": "Input 2",
              "type": "image",
              "allowedTypes": [
                "image",
                "video",
                "audio",
                "text",
                "number",
                "string",
                "aspect-ratio",
                "resolution",
                "prompt",
                "lora",
                "image-list",
                "multi-prompt-list",
                "kling-elements"
              ],
              "component": "input",
              "defaultValue": null,
              "visibleInNode": true,
              "isRequired": false
            }
          ],
          "internalState": {}
        },
        {
          "id": "bdd694b2-3b5a-463f-b739-65c815f2c000",
          "definitionId": "model-nano-banana-2",
          "position": {
            "x": 1242.599940028278,
            "y": 57.9804097376975
          },
          "size": {
            "width": 252.90909090909085,
            "height": 564.7272727272722
          },
          "inputs": {
            "prompt": "Ultra-realistic premium vintage-style portable speaker advertisement, featuring a man, 30, wearing a T-shirt. They are styled to match a cohesive brown theme, with visual elements (hair, accessories, or accents) subtly reflecting the same tone.\n\nThe subject is captured in a dynamic, cinematic pose — reaching out as if to adjust the speaker — presented with strong forced perspective, where the vintage-style portable speaker with wood finish and leather handle dominates the foreground in a bold hero shot.\n\nOutfit: styled in a fashion-forward, tech-inspired look incorporating brown tones, paired with complementary neutral elements to enhance the premium visual identity.",
            "image_1": "https://storage.googleapis.com/saquib-sh.appspot.com/thefluxtrain/v02/image-generation/35ae2291-a199-4a2e-9742-f9b0c43c3152/l9dowg8.png",
            "aspectRatio": "9:16",
            "resolution": "1K",
            "numberOfOutputs": 1,
            "image": "https://storage.googleapis.com/saquib-sh.appspot.com/thefluxtrain/v02/image-generation/35ae2291-a199-4a2e-9742-f9b0c43c3152/jhaquer.png",
            "image_2": "https://storage.googleapis.com/saquib-sh.appspot.com/thefluxtrain/v02/image-generation/35ae2291-a199-4a2e-9742-f9b0c43c3152/go3ypbn.png"
          },
          "dynamicInputs": [
            {
              "id": "image_2",
              "label": "Image 2",
              "type": "image",
              "allowedTypes": [
                "image"
              ],
              "component": "upload",
              "defaultValue": "",
              "visibleInNode": true,
              "isRequired": false
            }
          ],
          "internalState": {
            "sink": {
              "items": [
                "https://storage.googleapis.com/saquib-sh.appspot.com/thefluxtrain/v02/image-generation/35ae2291-a199-4a2e-9742-f9b0c43c3152/jhaquer.png"
              ],
              "activeIndex": 0
            }
          }
        },
        {
          "id": "5b0853a3-92cf-49a3-ba89-326c14428803",
          "definitionId": "llm-chat",
          "position": {
            "x": 1326.945691594961,
            "y": 746.6008761284462
          },
          "size": {
            "width": 200
          },
          "inputs": {
            "system_prompt": "# Seedance 2.0 Prompting Guide for reference based generation\n### This guide turns a simple description of a scene into a detailed prompt for Seedance 2.0 to be used with references for characters, prompts and environment.\n\n**Saquib@TheFluxTrain. All rights reserved.**\n\n---\n\n## HOW TO USE THIS GUIDE\n\nWhen a user describes a scene they want generated, follow this process in order:\n\n1. **Understand the scene.** Identify the subject(s), setting, action, emotional tone, duration, and whether the beat is a single continuous take or multiple edited shots (each **cut between** shots is explicit via transition lines).\n2. **Do not ask questions.** Directly generate the prompt based on the provided information, making reasonable assumptions as needed.\n3. **Fill out the master template for a single shot.** Complete every applicable section in the exact order given.\n4. **Describe the shot.** Specify framing, lens, camera movement, and clear, concise action—all within one unbroken sequence.\n5. **Declare transitions at each shot boundary.** Do **not** use `TRANSITION IN` on the **first** shot or `TRANSITION OUT` on the **last** shot. The **first** shot only has `TRANSITION OUT` (hand-off to Shot 2). **Intermediate** shots have both `TRANSITION IN` (from the prior shot) and `TRANSITION OUT` (to the next). The **final** shot only has `TRANSITION IN`. Put sequence openings (fade up, crash in, etc.) and endings (fade down, hold to finish) in that shot’s framing/action prose—not in transition lines. Name each join’s technique plus one concrete cue—don’t leave cuts ambiguous.\n6. **Ensure the prompt complies with the checklist** before delivering.\n\nYour sole task is to translate the user's input into an AI-ready, cinematic prompt. Do not invent or describe any scene, character, or element—these are determined entirely by the provided reference images or audio. Only describe what the camera objectively sees, with no explanations, justifications, or reasoning for any visual detail. Ignore your own interpretations or storytelling—assemble technical camera direction and sequencing using the exact material supplied, even if the input is strange or sparse. Never add backstory, motivation, or subjective detail: strictly focus on the visible, filmic instructions.\n\n---\n\n## TIMING MATTERS: KEEP IT REALISTIC\n\nShort durations are extremely limited—keep your prompts simple and focused.\n\n- 5 seconds: fits just one clear action or moment\n- 10 seconds: allows two or three actions, at most\n- 15 seconds: supports up to four distinct actions, maximum\n\nPacking in too many actions or too much dialogue for the duration will lead to awkward, glitchy results. Be mindful: count actions, count syllables, and set realistic expectations.\n\nIf feedback like \"too much,\" \"chill,\" or \"be realistic\" comes up, it means there are too many beats for the time given. Cut content as needed, rather than trying to rewrite to fit more in.\n\n---\n\n## CINEMATIC PROMPT STRUCTURE\n\n(Keep all output in plain text. Do not use any markdown formatting.)\n\nFORMAT: [duration]s / [shot count] SHOTS / [one-line concept]\n\nPRIMARY CHARACTER: @Image 1.\n\nSECONDARY CHARACTER[Optional, skip if not present]: @Image 2.\n\n\nSETTING: [If a reference is provide, just mention that (@Image 3) and do not describe. If there is no reference for the location or background, then describe the location, time of day, and vivid sensory/environmental details. Use (A), (B), (C) labels if more than one.]\n\nSOUNDTRACK[Optional, skip if not present]: [Describe the score’s evolution — or tag @Audio N if an audio reference is used]\n\nPALETTE[Optional, skip if not present]: [Identify primary color theme plus an accent/highlight color]\n\nVISUAL STYLE[Optional, skip if not present]: [Reference an aesthetic plus technical properties—depth of field, grain, lighting setup]\n\nCONTINUITY[Optional, skip if not present]: [Rules for consistency—avoid duplication, keep props and appearances stable]\n\nWHAT TO AVOID: [Optional — specific undesired elements]\n\n---\n\nSHOT 1 — 0:00 to 0:0X. (First shot: no TRANSITION IN.)\nTRANSITION OUT: [Join to Shot 2 — technique + one concrete cue]\n[Describe framing — include opening beats here if needed, e.g. fade up from black], [Lens focal length]mm, [Camera movement].\n[Describe sequence of actions and any dialogue, all as flowing prose.]\n\nSHOT 2 — 0:0X to 0:0Y. (If this is the **final** shot: no TRANSITION OUT. If a Shot 3 follows, add TRANSITION OUT below.)\nTRANSITION IN: [Must pair logically with Shot 1’s TRANSITION OUT]\n[Describe framing — include closing beats here if this is the last shot, e.g. fade to black], [Lens focal length]mm, [Camera movement].\n[Actions and dialogue for this shot]\n\n(Any **middle** shot — neither first nor last — includes both `TRANSITION IN` and `TRANSITION OUT` after its header.)\n\n---\n\n## FORMATTING RULES — STRICT REQUIREMENTS\n\nFollow these exact standards to ensure clarity and compatibility:\n\n- **Image Tagging:** Only use the `@Image N` format for uploaded reference images. Do not use variants like `<<<Image 1>>>`, `[Image 1]`, or any Markdown (e.g., `**Image 1**`).\n- **No Bold Text:** Keep all output in plain text. Never use bold (e.g., `**text**`).\n- **Shot Metadata:** Separate shot metadata from actions using a period followed by a line break. Do not use a `/` as a separator.\n- **Timestamps:** All timecodes must use whole seconds, formatted like `0:00 to 0:02`. Do not include decimals.\n- **Section Breaks:** Always use `---` to divide metadata from shot descriptions. Don’t omit dividers or present text in a continuous wall.\n- **Spacing:** Insert a single blank line between each shot for readability. Do not stack shots without spacing.\n- **Transitions:** Put `TRANSITION OUT` alone on the **first** shot; `TRANSITION IN` alone on the **last** shot; **middle** shots get **both**, each on its own line after the shot header. Omit `TRANSITION IN` on shot 1 and omit `TRANSITION OUT` on the final shot. Adjacent shots’ OUT/IN pairs must describe the same edit from outgoing vs incoming perspective.\n- **Character Referencing:** Assign each unique character their own `@Image N` tag. Don’t reuse a single tag for multiple different characters.\n\nAdhering to these formatting conventions is essential for accuracy and usable output.\n\n---\n\n### Choosing shot count by scene emotion or action\n\n- For lingering emotions (such as grief, joy, or tension), use fewer shots with longer durations.\n- For scenes with energy or fast movement (action, parties, montages), use more shots with shorter durations.\n- For a continuous performance (singing, fighting, speaking, vlogging), use a single uninterrupted shot (oner). Omit both transition lines (that shot is both first and last); describe any fade-in or fade-out in the shot’s framing/action prose if needed.\n- For stories with multiple narrative beats (setup, conflict, climax), align the number of shots with the number of distinct beats.\n\n---\n\n## AUDIO TAGGING — HANDLING USER-PROVIDED AUDIO FILES\n\nWhen a user supplies a pre-made audio file (such as a song, voiceover, or dialogue):\n\n- Always reference the file as `@Audio 1` in the MUSIC section, or within the shot if it’s specifically a voice cue.\n- Do not include a transcript or detailed description of the audio in the shot breakdown. Just indicate the presence of the audio—the AI will handle syncing automatically.\n- Focus your shot description on visual performance and character action. Avoid specifying lyrics, spoken words, or matching actions to individual lyric moments.\n\n**Example — dance scene with attached instrumental audio:**\n```\nMUSIC: @Audio 1\nSHOT 1 — 0:00 to 0:12, WS, 28mm, tracking left.\n@image_1 moves energetically across the dance floor to the rhythm of @Audio 1. Camera glides alongside, capturing the full motion in the vibrant setting.\n```\n\nDon't write \"He dances to the drumbeat\" or describe musical cues. The audio drives the performance.\n\n### Handling scenes with user-supplied dialogue and other character responses\n\nIf the provided audio contains only the user's (e.g., @image_1) spoken lines, but other characters interact with the user, note these as follows:\n\n- For the user's spoken lines, reference the audio using `@Audio 1`—do not transcribe or paraphrase their words separately.\n- For other characters' responses, write out their dialogue fully.\n- Clearly indicate which character each line belongs to.\n\n**Example:**\n```\n@image_1 speaks @Audio 1 \"Excuse me, do you guys have Rolexes?\"\n@image_2 replies: \"Are you wearing those recording glasses?\"\n@image_1 responds @Audio 1 \"Yeah, I'm recording.\"\n```\n\n### Audio realism for POV scenes\n\nWhen the scene is POV through a real-world device (phone, smart glasses, vlog camera), add this note: *\"All audio sounds like it was captured by the device's microphone — natural, slightly muffled, no studio polish.\"* Otherwise the generated audio feels bass-boosted and wrong for the format.\n\n---\n\n## CAMERA LANGUAGE\n\n### Framing\n\n| Term | Meaning | Best For |\n|---|---|---|\n| ECU | Extreme Close-Up | Eye detail, object texture |\n| CU | Close-Up | Face and neck |\n| MCU | Medium Close-Up | Head and shoulders — dialogue workhorse |\n| MS | Medium Shot | Waist up — action workhorse |\n| WS | Wide Shot | Full body in environment |\n| OTS | Over-The-Shoulder | Conversations, reveals |\n| POV | Point of View | Immersive subjective — camera IS the eyes |\n\n### Lenses\n\n| Lens | Feel | Best For |\n|---|---|---|\n| 24–28mm | Wide, immersive | Action, establishing, dynamic spaces |\n| 35mm | Documentary, natural | Handheld realism, street scenes |\n| 50mm | Neutral | Most versatile |\n| 85mm | Intimate, shallow DOF | Faces, emotion, portraits |\n| 100mm macro | Extreme detail | Objects, textures |\n\n### Movement\n\n| Term | Meaning |\n|---|---|\n| Locked | Static tripod |\n| Slow push-in | Emotional escalation |\n| Slow pull-back | Reveal or release |\n| Tracking | Follows subject |\n| Arc / orbit | Circles subject |\n| Whip pan | Fast snap — action |\n| Handheld | Urgency, realism |\n| Rack focus | Shifts between planes |\n\n---\n\n## SCENE TRANSITIONS\n\nUse this vocabulary when filling `TRANSITION IN` / `TRANSITION OUT` at **boundaries between shots**—not on the outer edges of the sequence (no IN on the first shot, no OUT on the last). Naming the technique plus a single concrete cue (shape, motion, sound overlap, duration of blend) produces smoother edits than writing “cut to next scene.”\n\n### How to use transitions in prompts\n\n1. **Always pair adjacent shots.** Shot N `TRANSITION OUT` should describe the same edit as Shot N+1 `TRANSITION IN` (same technique, described from outgoing vs incoming perspective).\n2. **Be specific but short.** One technique name + one observable detail (e.g., “match on action — hand continues through frame edge,” “dissolve — 12-frame overlap of warm highlights”).\n3. **Leverage camera movement already in the shot.** Whip pans, pushes through glass, and zooms can motivate hidden cuts or seamless joins—say where the cut hides (blur peak, darkness, frame wipe).\n4. **Audio counts.** For L-cuts and J-cuts, state whether dialogue or ambience leads or trails the picture change.\n5. **Openings and endings.** Because shot 1 has no `TRANSITION IN` and the final shot has no `TRANSITION OUT`, write fades, crash-ins, final holds, and fade-outs in those shots’ framing and action lines—not as transition labels.\n\n### Core transition terms\n\n- **Match cut:** Connects two shots through shared visual or conceptual similarity—shape, motion, or composition—so the edit feels intentional and seamless.\n- **Match on action:** The same movement continues across the cut so motion bridges the two shots and hides the edit.\n- **Smash cut:** A sudden jump to a contrasting image or tone for shock, humor, or emotional emphasis.\n- **Cross dissolve (dissolve):** One shot fades out while the next fades in; overlap implies time passage, dream logic, or mood shift.\n- **Fade in / fade out:** Picture emerges from or falls away to a solid (usually black); signals sequence start, end, or ellipsis.\n\n### Advanced / stylistic transitions\n\n- **Whip pan transition:** A fast pan creates motion blur that masks the cut between two scenes.\n- **L-cut / J-cut:** Audio overlaps the picture edit—L-cut: sound from the prior shot continues over the new picture; J-cut: sound from the next shot begins before its picture appears.\n- **Morph cut:** Digital interpolation blends two states so subjects or framing appear to morph across the join (use sparingly; describe what transforms).\n- **Invisible cut (hidden cut):** Cut concealed by movement, a dark frame, an edge wipe, or passing foreground—audience should not register a visible splice.\n- **Graphic match:** Match cut driven by aligned graphic elements—geometry, color blocks, silhouette—between outgoing and incoming frames.\n\n### Creative / cinematic transitions\n\n- **Seamless transition:** General term for edits designed to feel continuous; often combines motivated camera move, blocking, and timing.\n- **Transition through object:** Camera travels into, through, or past a surface (glass, door, fabric, liquid) and emerges in the next setup.\n- **Zoom transition:** Zoom in or out and cut mid-zoom to a new scene that completes the motion or matches framing scale.\n- **Time warp transition:** Speed ramps, motion blur, or stylized treatment sells a jump in time or pacing across the join.\n\n### Storyboard-oriented combinations\n\nPerfume spots, fashion films, and montage-heavy references often combine:\n\n- **Match cut** or **graphic match** for visual continuity between bottles, faces, or environments.\n- **Seamless transition** as the overall goal across several beats.\n- **Transition through object** or **zoom transition** for camera-driven scene changes.\n- **Whip pan** or **motion blur at peak velocity** to hide hard cuts between mismatched backgrounds.\n\nMap each shot change to one primary technique; add a secondary cue only if duration allows (see timing rules above).\n\n### Example — two shots with paired transitions\n\n```\nFORMAT: 8s / 2 SHOTS / Perfume reveal in two beats\n\nPRIMARY CHARACTER: @Image 1.\n\nSETTING: (@Image 3)\n\nSHOT 1 — 0:00 to 0:04.\nTRANSITION OUT: Zoom transition — push tight on circular bottle cap; cut mid-zoom to Shot 2 where the same circle completes as a rim-lit perfume bottle silhouette (graphic match).\nOpens from black into CU — slow push on @Image 1’s hands at eye level; CU transitions toward ECU, 85mm, smooth push-in.\n@Image 1 raises the bottle; glass catches a thin streak of light. No dialogue.\n\nSHOT 2 — 0:04 to 0:08.\nTRANSITION IN: Completes the zoom-graphic-match from Shot 1 — rim-lit silhouette resolves into full bottle hero framing with mist or particle accent.\nWS, 50mm, slow orbit left around pedestal.\nLight rolls across the bottle; ambience carries under (optional J-cut prep if a third shot followed). End on held hero frame — last glint on glass holds a beat, then picture fades to black.\n```\n\n---\n\n## POV SCENES — A SPECIAL CASE\n\nPOV scenes (phone vlog, smart glasses, camcorder, helmet cam) have their own rules.\n\n### The device IS the camera. Never show the device in frame.\n\n- iPhone selfie vlog → his arm extends toward the lens. Phone not visible.\n- Meta Ray-Ban smart glasses → natural human eyeline. Hands visible when gesturing.\n- Found-footage camcorder → we see what the camcorder sees. On-camera LED light is the only illumination.\n\n### Match the device's real-world look. Don't Hollywood-ify it.\n\n| Device | Look |\n|---|---|\n| iPhone selfie camera | Everything in focus front to back. NO shallow DOF. Natural phone-cam color. No lens flare. No cinematic grain. |\n| Meta Ray-Ban glasses | Clean natural human POV. **No fisheye.** No vignette. Subtle head sway. |\n| Handheld camcorder (found footage) | Harsh on-camera LED, heavy digital noise in shadows, mild lens distortion, timestamp and REC indicator in corner |\n| GoPro / action cam | Wide-angle distortion, high contrast, over-saturated colors |\n\n### Hard POV rules to include:\n\n- LOGIC RULE: *\"POV — the camera IS the [device]. The device is never visible in frame.\"*\n- For iPhone selfie: *\"Full depth of field — background is sharp, not blurred. NO autofocus hunting.\"*\n- For Ray-Bans: *\"Clean natural first-person view. No fisheye, no lens distortion.\"*\n\n### Environmental rules for POV scenes\n\n**Subject movement:** If someone is walking and vlogging, they must walk continuously for the full shot. Specify this, or they'll stop mid-take. Example: *\"@image_1 walks forward continuously for the full 15 seconds — never stops, never slows to a standstill.\"*\n\n---\n\n## WRITING MOOD, MUSIC, COLOR, STYLE\n\n### MOOD — write an arc, not a vibe\n\n- **Weak:** \"Scary and tense.\"\n- **Strong:** \"Casual vlog banter sliding into genuine unease, landing on a deadpan punchline.\"\n\n### MUSIC — describe evolution, OR tag @audio_N\n\n- **Weak:** \"Dramatic music.\"\n- **Strong:** \"Sparse piano note under ambient room tone. Strings enter at the midpoint, building tension. A single sharp cello stab on the reveal.\"\n- **With audio attached:** `MUSIC: @audio_1`\n\n### COLOR LOGIC — dominant palette + one accent\n\n- **Weak:** \"Colorful.\"\n- **Strong:** \"Warm amber household light in the hallway. Basement staircase dim and cool-toned, but visible — not a black void.\"\n\n**Watch out:** Don't say \"pitch black\" or \"black void\" unless you genuinely want nothing visible. If the scene needs a staircase or hallway where things still happen, use \"dim but visible.\"\n\n### STYLE — aesthetic + technical specs\n\nAlways include:\n- Aesthetic reference (Ultra-Realistic, A24 restraint, found-footage, iPhone vlog, etc.)\n- Technical specs (DOF, grain, lighting, framing quirks)\n- What to avoid if relevant (\"no fisheye\", \"no shallow DOF\")\n\n---\n\n## LOGIC RULES — PREVENT AI FAILURES\n\n| Failure | Rule |\n|---|---|\n| Duplicate characters | \"Only one @Image 1 visible in frame at any time.\" |\n| Characters blend together | \"@Image 1 is visually distinct from the [other character] — different hair, build, face. No duplicates.\" |\n| Wardrobe changes mid-scene | \"Same wardrobe across all shots unless specified.\" |\n| POV camera appears in frame | \"POV — camera is [device]. The device is never visible in frame.\" |\n| Props appear from nowhere | \"The [prop] is produced at SHOT N with a visible motion.\" |\n| Specific identity (card, book, logo) | \"The [item] is always the same. No other, ever. Only ONE visible at a time.\" |\n| Subject stops moving in a walking shot | \"Walks forward continuously for the full duration.\" |\n| Autofocus hunting in POV | \"NO autofocus shifting. Focus stays locked on his face.\" |\n\n---\n\n## DIALOGUE RULES\n\n### Good dialogue:\n- **Short.** 1–2 lines per character per shot, max.\n- **Broken.** Contractions, hesitations, em-dashes.\n- **Real.** Sounds like how someone actually talks.\n- **In character.** Fits their energy.\n\n### Bad dialogue:\n- Long speeches.\n- Info-dumps.\n- Theatrical or on-the-nose lines.\n- Cringe brand mentions.\n\n### When in doubt, CUT the dialogue.\n\nSilence + a face beats a monologue. A shot without dialogue can carry more emotion than one stuffed with words.\n\n### Dialogue inline\n\nPut dialogue inside the shot description in double quotes:\n\n> @image_1 sits back, jaw tight. \"I'm not doing this again.\" He stands.\n\nNo separate script format. Lives in the prose.\n\n### Dialogue math\n\nA spoken line takes about 2–3 seconds. If a 4-second shot has 3 lines of dialogue, it's overstuffed. Count it out.\n\n---\n\n## COMMON FAILURE MODES AND FIXES\n\n| Problem | Diagnosis | Fix |\n|---|---|---|\n| Shots feel rushed or glitchy | Too many actions per shot | Cut actions. Split shots if needed. |\n| User says \"too much\" / \"chill\" | Over-stuffed shots | Cut just the bloated part. Don't rewrite everything. |\n| Characters duplicating | No anti-duplication rule | Add LOGIC RULE. Describe characters as distinct. |\n| Dialogue feels cringe | Too long, on-the-nose | Cut 50%. Use contractions. |\n| Wrong prop keeps generating | Model isn't locking on | Add NEGATIVE PROMPT. Repeat constraint. |\n| Emotional scene flat | Abstract writing | Write physical detail: \"chest heaving, tears mixing with sweat, knuckles white.\" |\n| POV shots show the camera | Missing POV rule | Add LOGIC RULE: \"Camera IS the device, never visible in frame.\" |\n| iPhone vlog looks too cinematic | Default cinematic DOF | Add: \"Everything in focus front to back. NO shallow DOF.\" |\n| Smart glasses POV has fisheye | Default action-cam distortion | Add: \"No fisheye, no lens distortion, clean natural human POV.\" |\n| Subject stops walking in a walking vlog | No continuous movement rule | Add: \"Walks forward continuously for the full duration.\" |\n| Audio feels overproduced for POV | Default studio-quality audio | Add: \"Audio captured by device mic — natural, slightly muffled.\" |\n| Object enters wrong part of frame | Camera framing not locked | Explicitly direct: \"Camera tilts DOWN and focuses on the bottom of the stairs. Object enters from the side at floor level.\" |\n| Environment too dark to see | \"Black void\" / \"pitch black\" language | Change to \"dim but visible\" |\n| Ending feels forced | Default \"cut to black\" or dramatic push-in | Ask user preference. Default to natural settle unless user requests dramatic ending. |\n\n---\n\n## FINAL PRINCIPLES\n\n**Translate, don't rewrite.** The user has a vision. Your job is precise, cinematic, AI-readable translation.\n\n**Respect the clock.** Short durations are tiny. Count actions. Count words. Be realistic.\n\n**Cut before you add.** A simple shot with rich atmosphere beats a busy shot every time.\n\n**Specificity beats volume.** Three specific sensory details beat a paragraph of vague description.\n\n**When audio is tagged, the shot description stays minimal.** Don't choreograph every lyric beat.\n\n**The user is always right about their own vision.** Suggest, don't impose.\n",
            "instruction": "Create 6 seconds an ad shot for the image prompt. Scene Image 1, product Image 2. 2 shots",
            "model": "gpt-4o",
            "prompt_1": "Ultra-realistic premium vintage-style portable speaker advertisement, featuring a man, 30, wearing a T-shirt. They are styled to match a cohesive brown theme, with visual elements (hair, accessories, or accents) subtly reflecting the same tone.\n\nThe subject is captured in a dynamic, cinematic pose — reaching out as if to adjust the speaker — presented with strong forced perspective, where the vintage-style portable speaker with wood finish and leather handle dominates the foreground in a bold hero shot.\n\nOutfit: styled in a fashion-forward, tech-inspired look incorporating brown tones, paired with complementary neutral elements to enhance the premium visual identity.",
            "output": "FORMAT: 6s / 2 SHOTS / Vintage-style portable speaker advertisement\n\nPRIMARY CHARACTER: @Image 1.\n\nPRODUCT: @Image 2.\n\n---\n\nSHOT 1 — 0:00 to 0:03.\nTRANSITION OUT: Match cut — @Image 1's hand reaching out aligned with the speaker's handle in the next shot.\nWS, 28mm, handheld.\n@Image 1 stands confidently, styled in a cohesive brown theme, dynamic pose reaching out towards the vintage-style portable speaker. Strong forced perspective emphasizes the speaker, with the wood finish and leather handle in sharp focus. Natural handheld motion adds an authentic feel.\n\nSHOT 2 — 0:03 to 0:06.\nTRANSITION IN: Match cut — continues with the hand touching the speaker handle.\nCU, 50mm, locked.\nThe focus shifts to the vintage speaker in a bold hero shot, capturing its premium details — wood texture and leather handle. @Image 1's hand adjusts the speaker subtly, showcasing its design. The shot holds to finish with a brief glint of light across the speaker's surface, highlighting its elegance."
          },
          "dynamicInputs": [
            {
              "id": "prompt_1",
              "label": "Prompt 1",
              "type": "prompt",
              "allowedTypes": [
                "prompt",
                "text",
                "string"
              ],
              "component": "textarea",
              "defaultValue": "",
              "visibleInNode": true,
              "isRequired": false
            }
          ],
          "internalState": {}
        },
        {
          "id": "996709fb-7e50-462f-b238-47acd760dc52",
          "definitionId": "model-kling-o3-reference-to-video",
          "position": {
            "x": 1644.9545444046125,
            "y": 732.423952802579
          },
          "size": {
            "width": 436.89320388349404,
            "height": 307.446601941747
          },
          "inputs": {
            "quality": "pro",
            "aspectRatio": "16:9",
            "prompt": "FORMAT: 6s / 2 SHOTS / Vintage-style portable speaker advertisement\n\nPRIMARY CHARACTER: @Image 1.\n\nPRODUCT: @Image 2.\n\n---\n\nSHOT 1 — 0:00 to 0:03.\nTRANSITION OUT: Match cut — @Image 1's hand reaching out aligned with the speaker's handle in the next shot.\nWS, 28mm, handheld.\n@Image 1 stands confidently, styled in a cohesive brown theme, dynamic pose reaching out towards the vintage-style portable speaker. Strong forced perspective emphasizes the speaker, with the wood finish and leather handle in sharp focus. Natural handheld motion adds an authentic feel.\n\nSHOT 2 — 0:03 to 0:06.\nTRANSITION IN: Match cut — continues with the hand touching the speaker handle.\nCU, 50mm, locked.\nThe focus shifts to the vintage speaker in a bold hero shot, capturing its premium details — wood texture and leather handle. @Image 1's hand adjusts the speaker subtly, showcasing its design. The shot holds to finish with a brief glint of light across the speaker's surface, highlighting its elegance.",
            "reference_image_1": "https://storage.googleapis.com/saquib-sh.appspot.com/thefluxtrain/v02/image-generation/35ae2291-a199-4a2e-9742-f9b0c43c3152/go3ypbn.png",
            "duration": 6,
            "reference_image_2": "https://storage.googleapis.com/saquib-sh.appspot.com/thefluxtrain/v02/image-generation/35ae2291-a199-4a2e-9742-f9b0c43c3152/1ch1txp.png",
            "video": "https://storage.googleapis.com/saquib-sh.appspot.com/thefluxtrain/v02/jobs/35ae2291-a199-4a2e-9742-f9b0c43c3152/55hvw0t.mp4"
          },
          "dynamicInputs": [
            {
              "id": "reference_image_2",
              "label": "Reference Image 2",
              "type": "image",
              "allowedTypes": [
                "image"
              ],
              "component": "upload",
              "defaultValue": "",
              "visibleInNode": true,
              "isRequired": false
            }
          ],
          "internalState": {
            "sink": {
              "items": [
                "https://storage.googleapis.com/saquib-sh.appspot.com/thefluxtrain/v02/jobs/35ae2291-a199-4a2e-9742-f9b0c43c3152/55hvw0t.mp4"
              ],
              "activeIndex": 0
            },
            "inputInline": {
              "prompt": false
            }
          }
        }
      ],
      "connections": [
        {
          "id": "88d76a6b-a980-4ced-add1-4cc319ab1c89",
          "sourceNodeId": "fe3126a9-4acb-4c37-8ef4-cfbb545aae7f",
          "sourceOutputId": "image",
          "targetNodeId": "17bc7951-0c81-4de1-86fd-0e256f1f440f",
          "targetInputId": "image"
        },
        {
          "id": "5e18ba43-b756-4981-b9eb-a68c9a8c5ef1",
          "sourceNodeId": "7beceab6-b473-4251-b63e-b1baa5873285",
          "sourceOutputId": "prompt",
          "targetNodeId": "e1a04713-2f97-4cd7-ae50-8fac5e341d1a",
          "targetInputId": "instruction"
        },
        {
          "id": "9f1cc12c-0118-435a-b1ea-f4b7c32dae00",
          "sourceNodeId": "a237be65-7c79-4394-95fc-704f8de842f7",
          "sourceOutputId": "prompt",
          "targetNodeId": "e1a04713-2f97-4cd7-ae50-8fac5e341d1a",
          "targetInputId": "prompt_1"
        },
        {
          "id": "6a6e8c3a-0068-4254-a4da-c9c7d242cdf3",
          "sourceNodeId": "e1a04713-2f97-4cd7-ae50-8fac5e341d1a",
          "sourceOutputId": "output",
          "targetNodeId": "90f22898-f45e-442e-865b-28bdeb5096e0",
          "targetInputId": "prompt"
        },
        {
          "id": "41b5dec8-1e34-4835-a197-890b1619d90a",
          "sourceNodeId": "fe3126a9-4acb-4c37-8ef4-cfbb545aae7f",
          "sourceOutputId": "image",
          "targetNodeId": "90f22898-f45e-442e-865b-28bdeb5096e0",
          "targetInputId": "image_2"
        },
        {
          "id": "da40dc3d-0b80-470f-96c2-ba5922534ba9",
          "sourceNodeId": "89296bc6-285a-4335-b043-69af4f45a2e7",
          "sourceOutputId": "image",
          "targetNodeId": "d673bf0d-de98-467c-abf1-2f026238d71e",
          "targetInputId": "input_1"
        },
        {
          "id": "18d84703-9b59-48d2-827b-e1b3544eb234",
          "sourceNodeId": "d0f3f43f-fd5e-46fa-b48e-d6068306e71c",
          "sourceOutputId": "image",
          "targetNodeId": "d673bf0d-de98-467c-abf1-2f026238d71e",
          "targetInputId": "input_2"
        },
        {
          "id": "c1c41395-2905-4ad3-9d17-3dc375c5cb6d",
          "sourceNodeId": "d673bf0d-de98-467c-abf1-2f026238d71e",
          "sourceOutputId": "output",
          "targetNodeId": "90f22898-f45e-442e-865b-28bdeb5096e0",
          "targetInputId": "image_1"
        },
        {
          "id": "aae9dff1-5f65-498b-bd48-be3ec2999073",
          "sourceNodeId": "8a25fd8e-fff3-4fad-835d-142bc83c6dad",
          "sourceOutputId": "lora",
          "targetNodeId": "d0f3f43f-fd5e-46fa-b48e-d6068306e71c",
          "targetInputId": "lora_1"
        },
        {
          "id": "fc2dd768-e2a1-4171-b406-ead122cc032f",
          "sourceNodeId": "e1a04713-2f97-4cd7-ae50-8fac5e341d1a",
          "sourceOutputId": "output",
          "targetNodeId": "bdd694b2-3b5a-463f-b739-65c815f2c000",
          "targetInputId": "prompt"
        },
        {
          "id": "27608ccc-448a-4802-b06e-7fcd1840e845",
          "sourceNodeId": "d673bf0d-de98-467c-abf1-2f026238d71e",
          "sourceOutputId": "output",
          "targetNodeId": "bdd694b2-3b5a-463f-b739-65c815f2c000",
          "targetInputId": "image_1"
        },
        {
          "id": "e9c36ddb-7a0e-4518-a313-8ef949770a69",
          "sourceNodeId": "fe3126a9-4acb-4c37-8ef4-cfbb545aae7f",
          "sourceOutputId": "image",
          "targetNodeId": "bdd694b2-3b5a-463f-b739-65c815f2c000",
          "targetInputId": "image_2"
        },
        {
          "id": "15c86348-5d99-4f33-8af4-069238865e95",
          "sourceNodeId": "e1a04713-2f97-4cd7-ae50-8fac5e341d1a",
          "sourceOutputId": "output",
          "targetNodeId": "5b0853a3-92cf-49a3-ba89-326c14428803",
          "targetInputId": "prompt_1"
        },
        {
          "id": "0a4576a8-3591-40bb-8a50-45649db32a63",
          "sourceNodeId": "5b0853a3-92cf-49a3-ba89-326c14428803",
          "sourceOutputId": "output",
          "targetNodeId": "996709fb-7e50-462f-b238-47acd760dc52",
          "targetInputId": "prompt"
        },
        {
          "id": "f97f9fe3-61cb-41f2-9657-22c5687955d8",
          "sourceNodeId": "fe3126a9-4acb-4c37-8ef4-cfbb545aae7f",
          "sourceOutputId": "image",
          "targetNodeId": "996709fb-7e50-462f-b238-47acd760dc52",
          "targetInputId": "reference_image_1"
        },
        {
          "id": "83fa91ef-4519-457e-a9ca-b331d4277c57",
          "sourceNodeId": "90f22898-f45e-442e-865b-28bdeb5096e0",
          "sourceOutputId": "image",
          "targetNodeId": "996709fb-7e50-462f-b238-47acd760dc52",
          "targetInputId": "reference_image_2"
        }
      ],
      "selectedNodeIds": [],
      "selectedConnectionId": null,
      "viewport": {
        "x": 264.0895675226701,
        "y": 217.78515340140075,
        "zoom": 0.4230000000000024
      },
      "videoTaskList": [],
      "isEditUIMode": false
    },
    "updatedAt": 1778200326787
  }
}