[
    {
        "id": "10ff5e12f01476a4",
        "type": "tab",
        "label": "Videos Example",
        "disabled": false,
        "info": "Videos example.\n\nThis flow shows the current OpenAI video surface in the same direct Node-RED style as the rest of the project:\n- create a video job from a prompt\n- create a reusable character from an uploaded clip\n- fetch a saved character\n- edit, extend, or remix a completed video\n- download a rendered asset such as the thumbnail or main video\n\nSome inject nodes include placeholder ids or file paths. Replace those with real values before running them against the API.",
        "env": []
    },
    {
        "id": "9f6f8594b3dcbf9f",
        "type": "comment",
        "z": "10ff5e12f01476a4",
        "name": "Configure the red-marked nodes, then replace the placeholder ids and file paths where needed.",
        "info": "Before running:\n- import the flow, then configure each red-marked `OpenAI API` node with your own `Service Host`\n- this example stores request data in `msg.ai` because each `OpenAI API` node is configured to `ai`\n- if your node uses the default property, move the same fields under `msg.payload`\n\nWhat this flow covers:\n- Sora video creation from a prompt\n- character creation from an uploaded video clip\n- character retrieval by id\n- edit, extend, and remix flows for completed videos\n- downloadable assets through `downloadVideoContent`",
        "x": 470,
        "y": 120,
        "wires": []
    },
    {
        "id": "0d4567126bfb0be9",
        "type": "inject",
        "z": "10ff5e12f01476a4",
        "name": "Create Video",
        "props": [
            {
                "p": "ai.prompt",
                "v": "A calm sunrise over a coastal city, filmed like a quiet documentary opening shot.",
                "vt": "str"
            },
            {
                "p": "ai.model",
                "v": "sora-2",
                "vt": "str"
            },
            {
                "p": "ai.seconds",
                "v": "8",
                "vt": "str"
            },
            {
                "p": "ai.size",
                "v": "1280x720",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "x": 180,
        "y": 220,
        "wires": [
            [
                "7f343de47d4a5e77"
            ]
        ]
    },
    {
        "id": "7f343de47d4a5e77",
        "type": "OpenAI API",
        "z": "10ff5e12f01476a4",
        "name": "Create Video",
        "property": "ai",
        "propertyType": "msg",
        "service": "",
        "method": "createVideo",
        "x": 430,
        "y": 220,
        "wires": [
            [
                "d0dd9462465a1fb9"
            ]
        ]
    },
    {
        "id": "8a31b2fbda8ad50f",
        "type": "inject",
        "z": "10ff5e12f01476a4",
        "name": "Create Video Character",
        "props": [
            {
                "p": "ai.name",
                "v": "Lead Runner",
                "vt": "str"
            },
            {
                "p": "ai.video",
                "v": "/path/to/character-source.mp4",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "x": 190,
        "y": 300,
        "wires": [
            [
                "4f690ee43af6b79f"
            ]
        ]
    },
    {
        "id": "4f690ee43af6b79f",
        "type": "OpenAI API",
        "z": "10ff5e12f01476a4",
        "name": "Create Video Character",
        "property": "ai",
        "propertyType": "msg",
        "service": "",
        "method": "createVideoCharacter",
        "x": 450,
        "y": 300,
        "wires": [
            [
                "d0dd9462465a1fb9"
            ]
        ]
    },
    {
        "id": "f37548d372420f56",
        "type": "inject",
        "z": "10ff5e12f01476a4",
        "name": "Get Video Character",
        "props": [
            {
                "p": "ai.character_id",
                "v": "char_replace_me",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "x": 180,
        "y": 380,
        "wires": [
            [
                "d8e480cae6cf1f3b"
            ]
        ]
    },
    {
        "id": "d8e480cae6cf1f3b",
        "type": "OpenAI API",
        "z": "10ff5e12f01476a4",
        "name": "Get Video Character",
        "property": "ai",
        "propertyType": "msg",
        "service": "",
        "method": "getVideoCharacter",
        "x": 440,
        "y": 380,
        "wires": [
            [
                "d0dd9462465a1fb9"
            ]
        ]
    },
    {
        "id": "005ecdd640c0aa56",
        "type": "inject",
        "z": "10ff5e12f01476a4",
        "name": "Edit Video",
        "props": [
            {
                "p": "ai.prompt",
                "v": "Keep the shot steady and give it a neon dusk color treatment.",
                "vt": "str"
            },
            {
                "p": "ai.video.id",
                "v": "video_replace_me",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "x": 150,
        "y": 460,
        "wires": [
            [
                "2331b602ef6f5277"
            ]
        ]
    },
    {
        "id": "2331b602ef6f5277",
        "type": "OpenAI API",
        "z": "10ff5e12f01476a4",
        "name": "Edit Video",
        "property": "ai",
        "propertyType": "msg",
        "service": "",
        "method": "editVideo",
        "x": 410,
        "y": 460,
        "wires": [
            [
                "d0dd9462465a1fb9"
            ]
        ]
    },
    {
        "id": "2cafe14afce4e744",
        "type": "inject",
        "z": "10ff5e12f01476a4",
        "name": "Extend Video",
        "props": [
            {
                "p": "ai.prompt",
                "v": "Continue the shot and let the city lights gradually come alive.",
                "vt": "str"
            },
            {
                "p": "ai.seconds",
                "v": "16",
                "vt": "str"
            },
            {
                "p": "ai.video.id",
                "v": "video_replace_me",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "x": 160,
        "y": 540,
        "wires": [
            [
                "5737bba9d132fa7d"
            ]
        ]
    },
    {
        "id": "5737bba9d132fa7d",
        "type": "OpenAI API",
        "z": "10ff5e12f01476a4",
        "name": "Extend Video",
        "property": "ai",
        "propertyType": "msg",
        "service": "",
        "method": "extendVideo",
        "x": 420,
        "y": 540,
        "wires": [
            [
                "d0dd9462465a1fb9"
            ]
        ]
    },
    {
        "id": "e4766ca3fb430312",
        "type": "inject",
        "z": "10ff5e12f01476a4",
        "name": "Remix Video",
        "props": [
            {
                "p": "ai.video_id",
                "v": "video_replace_me",
                "vt": "str"
            },
            {
                "p": "ai.prompt",
                "v": "Keep the structure, but make it feel warmer and more cinematic.",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "x": 160,
        "y": 620,
        "wires": [
            [
                "af2929abf2cf0fd8"
            ]
        ]
    },
    {
        "id": "af2929abf2cf0fd8",
        "type": "OpenAI API",
        "z": "10ff5e12f01476a4",
        "name": "Remix Video",
        "property": "ai",
        "propertyType": "msg",
        "service": "",
        "method": "remixVideo",
        "x": 420,
        "y": 620,
        "wires": [
            [
                "d0dd9462465a1fb9"
            ]
        ]
    },
    {
        "id": "da3d4e3ceef46c52",
        "type": "inject",
        "z": "10ff5e12f01476a4",
        "name": "Download Thumbnail",
        "props": [
            {
                "p": "ai.video_id",
                "v": "video_replace_me",
                "vt": "str"
            },
            {
                "p": "ai.variant",
                "v": "thumbnail",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "x": 180,
        "y": 700,
        "wires": [
            [
                "0f6f375ec4fc2f20"
            ]
        ]
    },
    {
        "id": "0f6f375ec4fc2f20",
        "type": "OpenAI API",
        "z": "10ff5e12f01476a4",
        "name": "Download Video Content",
        "property": "ai",
        "propertyType": "msg",
        "service": "",
        "method": "downloadVideoContent",
        "x": 450,
        "y": 700,
        "wires": [
            [
                "d0dd9462465a1fb9"
            ]
        ]
    },
    {
        "id": "d0dd9462465a1fb9",
        "type": "debug",
        "z": "10ff5e12f01476a4",
        "name": "Videos Output",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 730,
        "y": 340,
        "wires": []
    }
]
