ComfyUI Node
APNext H3 Presentation Writer
Turns source material (findings, data, code, a changelog) into a presented video: a presenter walks through it scene by scene, charts and on-screen numbers taken VERBATIM from the material. No audio input - the script, visuals and pacing are all generated. `scenes`, `durations` and `lengths` are matching lists for a downstream H3 video node; join the clips with H3 Scenes Join.
APNext H3 Presentation Writer
- llm
- image_1
- image_2
- image_3
- image_4
- image_5
- image_6
- image_7
- image_8
- image_9
- scenes
- durations
- lengths
- scenes_text
- synopsis
- script
- cast
- scene_count
- total_seconds
- session_id
- info
- image_1
- image_2
- image_3
- image_4
- image_5
- image_6
- image_7
- image_8
- image_9
◄source_material►
◄direction►
◄presentation_formatAuto►
◄scene_count6►
◄duration_modeVary 5-15s (let Claude pace each scene)►
◄scene_duration12.0►
◄visual_aidsAuto (a graphic wherever it helps)►
◄continuity_modeIndependent clips (hard cuts, T2V openers)►
◄visual_styleLive-action, 35mm cinematic film aesthetic►
◄dialogue_languageEnglish►
◄wildness10►
◄modelsonnet►
◄researchfalse►
◄directortrue►
◄use_subscriptiontrue►
◄timeout_seconds1200►
◄seed-1►
◄cast_1—►
◄cast_2—►
◄cast_3—►
◄cast_4—►
◄extra_cast►
◄custom_dialogue_language►
◄custom_visual_style►
◄wardrobe►
◄locations►
◄enforce_wardrobetrue►
◄extra_instructions►
◄image_notes►
◄include_soundscapetrue►
◄include_non_diegetic_musicfalse►
◄resume_session_id►
◄working_dir►
◄context_1—►
◄context_2—►
◄context_3—►
◄context_4—►
◄context_5—►
◄context_6—►
◄context_7—►
◄context_8—►
◄reference_image_useCharacters only (ignore picture backgrounds)►
◄scene_briefs—►
◄save_scenestrue►
◄scenes_per_call4►
Categorycomfyui_dagthomas/H3
Inputs (55)
| Name | Type | Default | Description |
|---|---|---|---|
| source_material | STRING | The content to present - findings, benchmark numbers, a paper abstract, a changelog, data tables, code, release notes. This is the GROUND TRUTH: every number, name and claim spoken or shown on screen comes verbatim from here, and nothing is invented. | |
| direction | STRING | The presentation concept: who presents, where, the tone (enthusiastic keynote, calm lecture, playful explainer), the look, who the audience is. Free text; empty = the model stages it to fit the material. | |
| presentation_format | COMBO | Auto | How the talk is staged and where the charts live (stage screen, whiteboard, studio insets, screencast). Auto picks what fits the material; the direction text can override any of it. |
| scene_count | INT | 61–24 | How many scenes/clips the presentation is told in. Scene 01 hooks and names the topic, the middle scenes cover one point each, the last scene lands the takeaway. |
| duration_mode | COMBO | Vary 5-15s (let Claude pace each scene) | 2 options: Fixed (every scene = scene_duration), Vary 5-15s (let Claude pace each scene) |
| scene_duration | FLOAT | 12.05–15 | Seconds per scene in Fixed mode, and the fallback when the model omits a duration in Vary mode. |
| visual_aids | COMBO | Auto (a graphic wherever it helps) | How often a chart, graph, diagram, table or code panel is on screen. Every graphic shows real values from the source material with short verbatim labels. |
| continuity_mode | COMBO | Independent clips (hard cuts, T2V openers) | Independent clips: each scene is its own clip with hard cuts. Continuous chain: scenes are written for C2V / motion-context chaining - scene N+1 opens on scene N's last frame, one continuous take. |
| visual_style | COMBO | Live-action, 35mm cinematic film aesthetic | Opens every [Shot 1]; kept identical across the whole presentation. |
| dialogue_language | COMBO | English | The language the presenter speaks (the <d>[...] tag). |
| wildness | INT | 100–100 | How wild the STAGING may get: 0 = sober and literal, ~50 = weird and imaginary elements creep in, 100 = totally unhinged. Only the level is sent to the model - no specific surreal elements are injected - and the facts, chart values and on-screen text stay verbatim from the source material at every level. |
| model | COMBO | sonnet | Who writes the prompt. sonnet / opus / haiku / fable / default are Claude Code aliases (`default` = whatever the CLI is configured for). `codex` is the OpenAI Codex CLI with its configured model (shown when installed; `codex:<model-id>` in an H3 LLM Backend picks a specific one). ollama: / lmstudio: / local: entries are whatever your local servers were serving when the page loaded; pick one to run fully offline. Anything not listed goes in model_override. |
| research | BOOLEAN | false | Let the agent CLI (Claude Code or Codex) search the web for real references before writing - the actual location, wardrobe, lighting and physics. Slower, and it reaches the internet. |
| director | BOOLEAN | true | Load the H3 director skills (data/h3/skills): the core writing rules, the format this node emits, and style/motion craft, each with a reference library of gold examples and style anchors that Claude Code reads on demand. Costs a few extra seconds and tokens per run. |
| use_subscription | BOOLEAN | true | Hide the API key from the CLI so it uses your login and subscription seat (ANTHROPIC_API_KEY for Claude Code, OPENAI_API_KEY for Codex). Turn off to bill the API key instead. |
| timeout_seconds | INT | 120060–7200 | How long to wait PER CALL before the node gives up on the CLI (this is the node's own watchdog, not a Claude limit). Single H3 prompts take 25-60s; a multi-scene chunk with director/research on can take 10-20 minutes. The multi-scene writers retry a timed-out chunk at half size automatically. |
| seed | INT | -1-1–18446744073709550000 | Controls caching. -1 re-runs every queue; any fixed value reuses the cached result. |
| cast_1opt | STRING | A cast line or block from an H3 Characters node (its `cast` output): the presenter, a co-host, an interviewee. | |
| cast_2opt | STRING | A cast line or block from an H3 Characters node (its `cast` output): the presenter, a co-host, an interviewee. | |
| cast_3opt | STRING | A cast line or block from an H3 Characters node (its `cast` output): the presenter, a co-host, an interviewee. | |
| cast_4opt | STRING | A cast line or block from an H3 Characters node (its `cast` output): the presenter, a co-host, an interviewee. | |
| extra_castopt | STRING | Presenter(s) typed by hand, one per line, e.g. `Presenter: a woman in her 40s with grey-streaked hair and rectangular glasses`. Merged with the cast sockets. Empty = the model invents a presenter that fits the material. | |
| custom_dialogue_languageopt | STRING | — | |
| custom_visual_styleopt | STRING | Any visual style not in the dropdown; overrides the dropdown when filled in. | |
| wardrobeopt | STRING | Wardrobe lock, one line per character, e.g. `Sheldon: brown corduroy jacket, green Flash T-shirt, khaki trousers, small silver ring in the left nostril`. Used word-for-word in every shot. Empty = Claude fixes one outfit per character itself (in the synopsis) and repeats it in every shot. | |
| locationsopt | STRING | Location lock, one line per recurring place, e.g. `Sheldon's living room: beige three-seat sofa facing a wall-mounted TV on the LEFT, tall bookshelf of comics behind it, bay window with white blinds on the RIGHT, warm tungsten floor lamp in the far corner`. Used word-for-word in every scene set there, so the room looks the same in every scene. Empty = the model fixes each recurring place itself (in the synopsis) and repeats it. | |
| enforce_wardrobeopt | BOOLEAN | true | After writing, check that every shot a character is in restates all of that character's wardrobe anchors verbatim, and that every scene set in a locked location restates that location's anchors. If anything is dropped or changed, the model gets one repair turn in the same session. Off = trust the first answer. |
| extra_instructionsopt | STRING | — | |
| image_notesopt | STRING | Per-picture notes, one per line: `Image 1: the presenter`, `Image 2: the lecture hall, use as the location`. With reference_image_use = Characters only (the default), a note like that is the ONLY way a picture may be read as a location or prop. | |
| include_soundscapeopt | BOOLEAN | true | Room tone, audience reactions, marker squeaks, keyboard clicks. Off = `N/A`. |
| include_non_diegetic_musicopt | BOOLEAN | false | A light music bed under the talk. Off (the default) keeps the voice clean, which reads as more credible for data-heavy material. |
| resume_session_idopt | STRING | Continue an earlier run by feeding it that node's session_id. The whole conversation, images included, is still in context. A session sticks to its backend: Claude Code ids resume with Claude Code, `codex-` ids with Codex, `local-` ids with the same local model. | |
| working_diropt | STRING | A folder Claude Code may read while writing - a script, a shot list, lookbook notes. Empty uses a throwaway scratch folder, which is the safe default. | |
| llmopt | APNEXT_LLM | Optional. Connect an APNext H3 LLM Backend node to write with Ollama, LM Studio, another OpenAI-compatible server or an API model instead of Claude Code. Overrides the model dropdown while connected. | |
| context_1opt | STRING | Steering input from another APNext node (Time, Scene, Poses, Plots, Feelings, Cinematic, Science, Geography, Architecture, Fashion, ...). The node detects which kind it is and tells Claude how to use it. Sockets grow as you connect them. | |
| context_2opt | STRING | Steering input from another APNext node (Time, Scene, Poses, Plots, Feelings, Cinematic, Science, Geography, Architecture, Fashion, ...). The node detects which kind it is and tells Claude how to use it. Sockets grow as you connect them. | |
| context_3opt | STRING | Steering input from another APNext node (Time, Scene, Poses, Plots, Feelings, Cinematic, Science, Geography, Architecture, Fashion, ...). The node detects which kind it is and tells Claude how to use it. Sockets grow as you connect them. | |
| context_4opt | STRING | Steering input from another APNext node (Time, Scene, Poses, Plots, Feelings, Cinematic, Science, Geography, Architecture, Fashion, ...). The node detects which kind it is and tells Claude how to use it. Sockets grow as you connect them. | |
| context_5opt | STRING | Steering input from another APNext node (Time, Scene, Poses, Plots, Feelings, Cinematic, Science, Geography, Architecture, Fashion, ...). The node detects which kind it is and tells Claude how to use it. Sockets grow as you connect them. | |
| context_6opt | STRING | Steering input from another APNext node (Time, Scene, Poses, Plots, Feelings, Cinematic, Science, Geography, Architecture, Fashion, ...). The node detects which kind it is and tells Claude how to use it. Sockets grow as you connect them. | |
| context_7opt | STRING | Steering input from another APNext node (Time, Scene, Poses, Plots, Feelings, Cinematic, Science, Geography, Architecture, Fashion, ...). The node detects which kind it is and tells Claude how to use it. Sockets grow as you connect them. | |
| context_8opt | STRING | Steering input from another APNext node (Time, Scene, Poses, Plots, Feelings, Cinematic, Science, Geography, Architecture, Fashion, ...). The node detects which kind it is and tells Claude how to use it. Sockets grow as you connect them. | |
| image_1opt | IMAGE | Reference image 1: <Picture 1> in the prompt. Connect the same image to image_1 on the MiniMax H3 Reference to Video node, or use this node's image_1 output. | |
| image_2opt | IMAGE | Reference image 2: <Picture 2> in the prompt. Connect the same image to image_2 on the MiniMax H3 Reference to Video node, or use this node's image_2 output. | |
| image_3opt | IMAGE | Reference image 3: <Picture 3> in the prompt. Connect the same image to image_3 on the MiniMax H3 Reference to Video node, or use this node's image_3 output. | |
| image_4opt | IMAGE | Reference image 4: <Picture 4> in the prompt. Connect the same image to image_4 on the MiniMax H3 Reference to Video node, or use this node's image_4 output. | |
| image_5opt | IMAGE | Reference image 5: <Picture 5> in the prompt. Connect the same image to image_5 on the MiniMax H3 Reference to Video node, or use this node's image_5 output. | |
| image_6opt | IMAGE | Reference image 6: <Picture 6> in the prompt. Connect the same image to image_6 on the MiniMax H3 Reference to Video node, or use this node's image_6 output. | |
| image_7opt | IMAGE | Reference image 7: <Picture 7> in the prompt. Connect the same image to image_7 on the MiniMax H3 Reference to Video node, or use this node's image_7 output. | |
| image_8opt | IMAGE | Reference image 8: <Picture 8> in the prompt. Connect the same image to image_8 on the MiniMax H3 Reference to Video node, or use this node's image_8 output. | |
| image_9opt | IMAGE | Reference image 9: <Picture 9> in the prompt. Connect the same image to image_9 on the MiniMax H3 Reference to Video node, or use this node's image_9 output. | |
| reference_image_useopt | COMBO | Characters only (ignore picture backgrounds) | How the reference pictures may be read. Characters only: every picture is a character/performer reference - identity (and wardrobe) carries over, the photo's background, setting and lighting are ignored, and no scene or location is ever derived from them; a picture note can still declare a specific image a location or prop. Auto: the model decides what each picture shows (a backdrop can become the scene). |
| scene_briefsopt | STRING | Manually planned scenes from chained H3 Scene Brief nodes: each brief (what happens, where, which cast members and pictures) becomes the binding plan for its scene. Pinned numbers take that scene; unpinned briefs fill in order; scenes without a brief stay the model's to invent. | |
| save_scenesopt | BOOLEAN | true | Store every successful run as a JSON bundle in output/apnext_scenes/ (scenes, synopsis, durations, cast). Reload it any time with APNext H3 Scenes Load - re-render without paying for the LLM again. |
| scenes_per_callopt | INT | 41–8 | How many scenes to ask the model for per call. Smaller chunks finish well inside timeout_seconds and fail smaller (a timed-out chunk is retried at half size automatically); larger chunks are slightly cheaper per scene. |
Outputs (20)
| Name | Type | Description |
|---|---|---|
| scenes | STRING | — |
| durations | FLOAT | — |
| lengths | INT | — |
| scenes_text | STRING | — |
| synopsis | STRING | — |
| script | STRING | — |
| cast | STRING | — |
| scene_count | INT | — |
| total_seconds | FLOAT | — |
| session_id | STRING | — |
| info | STRING | — |
| image_1 | IMAGE | — |
| image_2 | IMAGE | — |
| image_3 | IMAGE | — |
| image_4 | IMAGE | — |
| image_5 | IMAGE | — |
| image_6 | IMAGE | — |
| image_7 | IMAGE | — |
| image_8 | IMAGE | — |
| image_9 | IMAGE | — |