{
  "config": {},
  "extra": {
    "VHS_KeepIntermediate": true,
    "VHS_MetadataImage": true,
    "VHS_latentpreview": false,
    "VHS_latentpreviewrate": 0,
    "ds": {
      "offset": [
        3219.69215291202,
        673.4714147038846
      ],
      "scale": 0.3232086812076298
    },
    "frontendVersion": "1.44.18",
    "workflowRendererVersion": "Vue-corrected"
  },
  "groups": [
    {
      "bounding": [
        -900,
        70,
        1050,
        830
      ],
      "color": "#3f789e",
      "flags": {},
      "id": 1,
      "title": "First to Last Frame Translator"
    },
    {
      "bounding": [
        250,
        150,
        550,
        750
      ],
      "color": "#3f789e",
      "flags": {},
      "id": 2,
      "title": "Seedance 2.0"
    },
    {
      "bounding": [
        -2000,
        0,
        1000,
        700
      ],
      "color": "#3f789e",
      "flags": {},
      "id": 3,
      "title": "Prompt"
    }
  ],
  "id": "637dd782-011f-45ff-b55e-aca5e8667e4c",
  "last_link_id": 16,
  "last_node_id": 10,
  "links": [
    [
      2,
      2,
      0,
      3,
      1,
      "IMAGE"
    ],
    [
      3,
      1,
      0,
      3,
      0,
      "IMAGE"
    ],
    [
      4,
      2,
      0,
      5,
      0,
      "IMAGE"
    ],
    [
      5,
      3,
      0,
      4,
      0,
      "VIDEO"
    ],
    [
      6,
      1,
      0,
      7,
      0,
      "IMAGE"
    ],
    [
      13,
      7,
      0,
      8,
      0,
      "STRING"
    ],
    [
      15,
      8,
      0,
      2,
      2,
      "STRING"
    ],
    [
      16,
      1,
      0,
      2,
      0,
      "IMAGE"
    ]
  ],
  "nodes": [
    {
      "flags": {},
      "id": 1,
      "inputs": [
        {
          "link": null,
          "localized_name": "image",
          "name": "image",
          "type": "COMBO",
          "widget": {
            "name": "image"
          }
        },
        {
          "link": null,
          "localized_name": "choose file to upload",
          "name": "upload",
          "type": "IMAGEUPLOAD",
          "widget": {
            "name": "upload"
          }
        }
      ],
      "mode": 0,
      "order": 0,
      "outputs": [
        {
          "links": [
            3,
            6,
            16
          ],
          "localized_name": "IMAGE",
          "name": "IMAGE",
          "type": "IMAGE"
        },
        {
          "links": null,
          "localized_name": "MASK",
          "name": "MASK",
          "type": "MASK"
        }
      ],
      "pos": [
        -2500,
        100
      ],
      "properties": {
        "Node name for S&R": "LoadImage"
      },
      "size": [
        400,
        470
      ],
      "type": "LoadImage",
      "widgets_values": [
        "8e8d4ef04692bc7f92093dbc8fec140ed4b89148036d863e98f8e83bdba3970b.png",
        "image"
      ]
    },
    {
      "bgcolor": "#653",
      "color": "#432",
      "flags": {},
      "id": 2,
      "inputs": [
        {
          "link": 16,
          "localized_name": "images",
          "name": "images",
          "shape": 7,
          "type": "IMAGE"
        },
        {
          "link": null,
          "localized_name": "files",
          "name": "files",
          "shape": 7,
          "type": "GEMINI_INPUT_FILES"
        },
        {
          "link": 15,
          "localized_name": "prompt",
          "name": "prompt",
          "type": "STRING",
          "widget": {
            "name": "prompt"
          }
        },
        {
          "link": null,
          "localized_name": "model",
          "name": "model",
          "type": "COMBO",
          "widget": {
            "name": "model"
          }
        },
        {
          "link": null,
          "localized_name": "seed",
          "name": "seed",
          "type": "INT",
          "widget": {
            "name": "seed"
          }
        },
        {
          "link": null,
          "localized_name": "aspect_ratio",
          "name": "aspect_ratio",
          "type": "COMBO",
          "widget": {
            "name": "aspect_ratio"
          }
        },
        {
          "link": null,
          "localized_name": "resolution",
          "name": "resolution",
          "type": "COMBO",
          "widget": {
            "name": "resolution"
          }
        },
        {
          "link": null,
          "localized_name": "response_modalities",
          "name": "response_modalities",
          "type": "COMBO",
          "widget": {
            "name": "response_modalities"
          }
        },
        {
          "link": null,
          "localized_name": "system_prompt",
          "name": "system_prompt",
          "shape": 7,
          "type": "STRING",
          "widget": {
            "name": "system_prompt"
          }
        }
      ],
      "mode": 0,
      "order": 4,
      "outputs": [
        {
          "links": [
            2,
            4
          ],
          "localized_name": "IMAGE",
          "name": "IMAGE",
          "type": "IMAGE"
        },
        {
          "links": null,
          "localized_name": "STRING",
          "name": "STRING",
          "type": "STRING"
        }
      ],
      "pos": [
        -800,
        170
      ],
      "properties": {
        "Node name for S&R": "GeminiImage2Node"
      },
      "showAdvanced": false,
      "size": [
        430,
        624.21875
      ],
      "type": "GeminiImage2Node",
      "widgets_values": [
        "Using the provided image as the first frame, generate a clean cinematic final frame for a first-last-frame video workflow.\n\nCreate the moment 5-7 seconds later in the same story world, but make the endpoint visually bolder than a simple continuation. Keep subject identity, recognizable environment anchors, lighting direction, aspect ratio, and physical realism, while deliberately changing camera placement and framing. Default to a dramatic feature-film move: a hard push-in or zoom-in, low or high angle shift, orbit reveal, fly-through past foreground elements, crash zoom, dolly through a doorway/window/vehicle gap, or a close pass that creates strong parallax.\n\nThe last frame should be a substantially different angle or scale from the uploaded image, with clearer depth, larger foreground/background separation, and an obvious destination for the video model to travel toward. Advance the action clearly: vehicles surge forward, storms intensify, doors open, lights sweep, characters turn or move through space, smoke/fire/water/debris streams across the lens, or the camera lands on a new dramatic reveal.\n\nPreserve continuity of the world; do not swap to an unrelated location, change the main subject identity, add unrelated characters, or break plausible geometry. Keep it photorealistic and production-grade. Do not add captions, labels, arrows, annotations, logos, watermarks, random text, or UI.",
        "Nano Banana 2 (Gemini 3.1 Flash Image)",
        265324705690959,
        "randomize",
        "21:9",
        "4K",
        "IMAGE",
        "You are a cinematic transition director and continuity artist for first-last-frame video generation.\n\nYour job is to create a final frame that continues the uploaded first frame into a later cinematic beat while intentionally giving the video model a big camera move to interpolate. Preserve subject identity, environment identity, lighting logic, aspect ratio, and recognizable spatial anchors. Do not preserve the original composition too tightly: by default choose a noticeably different camera position, lens scale, and viewing angle, such as a push-in, fly-through, orbit, low/high-angle reveal, over-the-shoulder pass, or close foreground parallax move.\n\nPrioritize dramatic motion potential over static continuity when they conflict, but keep the result physically plausible and connected to the same scene. The output must be a clean final frame only. No annotations, no text overlays, no storyboard marks, no logos, no UI, no captions."
      ]
    },
    {
      "bgcolor": "#653",
      "color": "#432",
      "flags": {
        "collapsed": false
      },
      "id": 3,
      "inputs": [
        {
          "link": 3,
          "localized_name": "first_frame",
          "name": "first_frame",
          "shape": 7,
          "type": "IMAGE"
        },
        {
          "link": 2,
          "localized_name": "last_frame",
          "name": "last_frame",
          "shape": 7,
          "type": "IMAGE"
        },
        {
          "link": null,
          "localized_name": "model",
          "name": "model",
          "type": "COMFY_DYNAMICCOMBO_V3",
          "widget": {
            "name": "model"
          }
        },
        {
          "link": null,
          "localized_name": "prompt",
          "name": "model.prompt",
          "type": "STRING",
          "widget": {
            "name": "model.prompt"
          }
        },
        {
          "link": null,
          "localized_name": "resolution",
          "name": "model.resolution",
          "type": "COMBO",
          "widget": {
            "name": "model.resolution"
          }
        },
        {
          "link": null,
          "localized_name": "ratio",
          "name": "model.ratio",
          "type": "COMBO",
          "widget": {
            "name": "model.ratio"
          }
        },
        {
          "link": null,
          "localized_name": "duration",
          "name": "model.duration",
          "type": "INT",
          "widget": {
            "name": "model.duration"
          }
        },
        {
          "link": null,
          "localized_name": "generate_audio",
          "name": "model.generate_audio",
          "type": "BOOLEAN",
          "widget": {
            "name": "model.generate_audio"
          }
        },
        {
          "link": null,
          "localized_name": "seed",
          "name": "seed",
          "type": "INT",
          "widget": {
            "name": "seed"
          }
        },
        {
          "link": null,
          "localized_name": "watermark",
          "name": "watermark",
          "type": "BOOLEAN",
          "widget": {
            "name": "watermark"
          }
        },
        {
          "link": null,
          "localized_name": "first_frame_asset_id",
          "name": "first_frame_asset_id",
          "shape": 7,
          "type": "STRING",
          "widget": {
            "name": "first_frame_asset_id"
          }
        },
        {
          "link": null,
          "localized_name": "last_frame_asset_id",
          "name": "last_frame_asset_id",
          "shape": 7,
          "type": "STRING",
          "widget": {
            "name": "last_frame_asset_id"
          }
        }
      ],
      "mode": 0,
      "order": 5,
      "outputs": [
        {
          "links": [
            5
          ],
          "localized_name": "VIDEO",
          "name": "VIDEO",
          "type": "VIDEO"
        }
      ],
      "pos": [
        300,
        250
      ],
      "properties": {
        "Node name for S&R": "ByteDance2FirstLastFrameNode"
      },
      "size": [
        450,
        459.96875
      ],
      "type": "ByteDance2FirstLastFrameNode",
      "widgets_values": [
        "Seedance 2.0",
        "Create a dramatic first-to-last-frame cinematic transition from the uploaded first frame to the generated final frame. Preserve subject identity, scene continuity, lighting direction, and physical realism, but make the camera travel assertively through the space instead of holding the original composition. Use a feature-film move such as a strong push-in/zoom-in, fly-through, orbit reveal, low/high-angle sweep, crash zoom, or dolly past foreground geometry. Emphasize substantial parallax, depth change, scale change, and viewpoint shift so the shot feels physically motivated, not like a crossfade or soft morph. Keep geometry stable, motion blur realistic, and action progression smooth. Do not show text, annotations, logos, UI, artifacts, or sudden unrelated scene changes.",
        "480p",
        "21:9",
        7,
        true,
        443108043,
        "randomize",
        false,
        "",
        ""
      ]
    },
    {
      "flags": {
        "collapsed": false
      },
      "id": 4,
      "inputs": [
        {
          "link": 5,
          "localized_name": "video",
          "name": "video",
          "type": "VIDEO"
        },
        {
          "link": null,
          "localized_name": "filename_prefix",
          "name": "filename_prefix",
          "type": "STRING",
          "widget": {
            "name": "filename_prefix"
          }
        },
        {
          "link": null,
          "localized_name": "format",
          "name": "format",
          "type": "COMBO",
          "widget": {
            "name": "format"
          }
        },
        {
          "link": null,
          "localized_name": "codec",
          "name": "codec",
          "type": "COMBO",
          "widget": {
            "name": "codec"
          }
        }
      ],
      "mode": 0,
      "order": 7,
      "outputs": [],
      "pos": [
        900.0306839584135,
        180
      ],
      "properties": {},
      "size": [
        950,
        619.21875
      ],
      "type": "SaveVideo",
      "widgets_values": [
        "video/cinematic_bridge",
        "mp4",
        "h264"
      ]
    },
    {
      "flags": {},
      "id": 5,
      "inputs": [
        {
          "link": 4,
          "localized_name": "images",
          "name": "images",
          "type": "IMAGE"
        },
        {
          "link": null,
          "localized_name": "filename_prefix",
          "name": "filename_prefix",
          "type": "STRING",
          "widget": {
            "name": "filename_prefix"
          }
        }
      ],
      "mode": 0,
      "order": 6,
      "outputs": [],
      "pos": [
        -290,
        170
      ],
      "properties": {},
      "size": [
        360,
        340.3125
      ],
      "type": "SaveImage",
      "widgets_values": [
        "cinematic_bridge_final_frame"
      ]
    },
    {
      "bgcolor": "#000",
      "color": "#222",
      "flags": {},
      "id": 6,
      "inputs": [],
      "mode": 0,
      "order": 1,
      "outputs": [],
      "pos": [
        -3090,
        30
      ],
      "properties": {},
      "size": [
        490,
        770
      ],
      "title": "Cinematic Bridge Video",
      "type": "MarkdownNote",
      "widgets_values": [
        "Generate a cinematic endpoint and bridge to it with **Cinematic Bridge**.\n\n## How It Works\n1. Upload a clean first frame\n2. Nano Banana 2 creates a dramatic final frame from the same story world\n3. Seedance 2.0 generates a first-last-frame video between them\n4. The workflow saves both the generated final frame and the final video\n\n## Tips\n- Use scenes with clear action potential, foreground objects, and strong depth\n- 21:9 works best for cinematic motion\n- Avoid text, logos, and cluttered compositions\n- The generated final frame should feel like a bold camera destination: pushed in, flown through, orbiting, low/high angle, or revealed through foreground parallax\n\n## That's it.\n\nFirst frame to cinematic transition in ComfyUI with **Cinematic Bridge**."
      ]
    },
    {
      "bgcolor": "#653",
      "color": "#432",
      "flags": {},
      "id": 7,
      "inputs": [
        {
          "link": 6,
          "localized_name": "images",
          "name": "images",
          "shape": 7,
          "type": "IMAGE"
        },
        {
          "link": null,
          "localized_name": "audio",
          "name": "audio",
          "shape": 7,
          "type": "AUDIO"
        },
        {
          "link": null,
          "localized_name": "video",
          "name": "video",
          "shape": 7,
          "type": "VIDEO"
        },
        {
          "link": null,
          "localized_name": "files",
          "name": "files",
          "shape": 7,
          "type": "GEMINI_INPUT_FILES"
        },
        {
          "link": null,
          "localized_name": "prompt",
          "name": "prompt",
          "type": "STRING",
          "widget": {
            "name": "prompt"
          }
        },
        {
          "link": null,
          "localized_name": "model",
          "name": "model",
          "type": "COMBO",
          "widget": {
            "name": "model"
          }
        },
        {
          "link": null,
          "localized_name": "seed",
          "name": "seed",
          "type": "INT",
          "widget": {
            "name": "seed"
          }
        },
        {
          "link": null,
          "localized_name": "system_prompt",
          "name": "system_prompt",
          "shape": 7,
          "type": "STRING",
          "widget": {
            "name": "system_prompt"
          }
        }
      ],
      "mode": 0,
      "order": 2,
      "outputs": [
        {
          "links": [
            13
          ],
          "localized_name": "STRING",
          "name": "STRING",
          "type": "STRING"
        }
      ],
      "pos": [
        -1950,
        100
      ],
      "properties": {
        "Node name for S&R": "GeminiNode"
      },
      "showAdvanced": true,
      "size": [
        400,
        438.90625
      ],
      "type": "GeminiNode",
      "widgets_values": [
        "Using the provided image as the first frame, generate a clean cinematic final frame for a first-last-frame video workflow.\n\nCreate the moment 5-7 seconds later in the same story world, but make the endpoint visually bolder than a simple continuation. Keep subject identity, recognizable environment anchors, lighting direction, aspect ratio, and physical realism, while deliberately changing camera placement and framing. Default to a dramatic feature-film move: a hard push-in or zoom-in, low or high angle shift, orbit reveal, fly-through past foreground elements, crash zoom, dolly through a doorway/window/vehicle gap, or a close pass that creates strong parallax.\n\nThe last frame should be a substantially different angle or scale from the uploaded image, with clearer depth, larger foreground/background separation, and an obvious destination for the video model to travel toward. Advance the action clearly: vehicles surge forward, storms intensify, doors open, lights sweep, characters turn or move through space, smoke/fire/water/debris streams across the lens, or the camera lands on a new dramatic reveal.\n\nPreserve continuity of the world; do not swap to an unrelated location, change the main subject identity, add unrelated characters, or break plausible geometry. Keep it photorealistic and production-grade. Do not add captions, labels, arrows, annotations, logos, watermarks, random text, or UI.",
        "gemini-3-1-flash-lite",
        875942294806287,
        "randomize",
        "You are a cinematic transition director and continuity artist for first-last-frame video generation.\n\nYour job is to create a final frame that continues the uploaded first frame into a later cinematic beat while intentionally giving the video model a big camera move to interpolate. Preserve subject identity, environment identity, lighting logic, aspect ratio, and recognizable spatial anchors. Do not preserve the original composition too tightly: by default choose a noticeably different camera position, lens scale, and viewing angle, such as a push-in, fly-through, orbit, low/high-angle reveal, over-the-shoulder pass, or close foreground parallax move.\n\nPrioritize dramatic motion potential over static continuity when they conflict, but keep the result physically plausible and connected to the same scene. The output must be a clean final frame only. No annotations, no text overlays, no storyboard marks, no logos, no UI, no captions."
      ]
    },
    {
      "flags": {
        "collapsed": false
      },
      "id": 8,
      "inputs": [
        {
          "link": 13,
          "localized_name": "source",
          "name": "source",
          "type": "*"
        }
      ],
      "mode": 0,
      "order": 3,
      "outputs": [
        {
          "links": [
            15
          ],
          "localized_name": "STRING",
          "name": "STRING",
          "type": "STRING"
        }
      ],
      "pos": [
        -1450,
        100
      ],
      "properties": {
        "Node name for S&R": "PreviewAny"
      },
      "size": [
        408.203125,
        367.734375
      ],
      "type": "PreviewAny",
      "widgets_values": [
        null,
        null,
        null
      ]
    }
  ],
  "revision": 0,
  "version": 0.4
}