Add separate MiniMax Music 3 advertisement workflow

This commit is contained in:
danrh
2026-08-24 02:48:59 -05:00
parent aaeec80037
commit db71a81524
41 changed files with 26505 additions and 19 deletions
File diff suppressed because it is too large Load Diff
+65
View File
@@ -152,6 +152,71 @@ Replace both saved `LoadImage` choices with your own primary identity image and
The repository copy is the validated V6 graph used by the Desktop and ComfyUI deployments at the time of this changelog. Its migration marker and canonical JSON SHA-256 are regression-tested without depending on those mutable external copies or platform-specific line endings.
## Separate MiniMax-H3 Advertisement production path
Advertisement production is additive and does not replace or migrate V6. The user-editable workflow has a fresh revision-1 graph identity and no shared mutable subgraph UUID with V6:
```text
16_minimax_h3_ref2va_advertisement_music3_v1.json
```
Its governed API-format fixture is:
```text
api/17_minimax_h3_ref2va_advertisement_music3_glowbloom_v1_api.json
```
Its companion manifest records graph hashes, model selections, reference roles, deliverables, adaptation status, and the default honest-QA posture. The earlier `api/16_minimax_h3_ref2va_advertisement_glowbloom_v1_api.json` remains as field-test lineage; new Advertisement work should use the Music 3 fixture rather than treating the earlier graph as the hardened contract.
The saved reference contract is:
```text
<Picture 1> performer hero identity
<Picture 2> same-performer contact sheet
<Picture 3> independent product/package contact sheet
<Picture 4> hash-verified, downscaled copy of the exact retained prior-lane final frame; continuity only
```
Select three images in that order. `DiffusionGemmaAdvertisementReferenceAssetPrep` normalizes them and computes the three SHA-256 values automatically. Picture 3 retains a separate product budget and must not be merged with either performer reference. Picture 4 is reserved by the contract and is populated only by a hash-verified, downscaled copy of the previous H3 lane's exact retained final frame; it is never a source identity.
`ADVERTISEMENT CONTROLS` is the only shared duration, native-shot, performance, aspect, Ref2VA mode, H3 audio/dialogue policy, excerpt-start, generation-model, lane-ceiling, and deliverable authority in Advertisement v1. The release intentionally locks a 30-second 9:16 master with derived tail-selected 15-second and 6-second cutdowns, keeps one shared shot count, drives the splitter aspect, and exposes Natural or Dance performance. Alternate reference layouts, non-relay seam modes, Lyrics without timed evidence, and VO without an input path are hidden instead of offered as broken combinations.
`SOUNDTRACK SOURCE` has three lazy origins:
- **MiniMax Music 3** is the default generated path.
- **Upload song** accepts a user-selected soundtrack without evaluating either generator.
- **Legacy ACE-Step** preserves the earlier generated-music route as a fallback.
The separate soundtrack content policy is `Instrumental`, `Vocal`, or `Auto`. Instrumental Music 3 output is not rejected for lacking a vocal proxy; Vocal mode requires vocal evidence and governed tagged lyrics. The 30-second preset requests 35 seconds from Music 3 so the selector can lock an exact 30-second candidate window. Its verified local model selections are:
```text
models/text_encoders/minimax_music3_text_encoder_pruned_int8_convrot.safetensors
models/diffusion_models/minimax_music3_dit_fp16.safetensors
models/vae/minimax_music3_dav.safetensors
```
The combined editable graph retains the Legacy ACE-Step fallback. ComfyUI may validate linked lazy loader/model choices before executing the selected source, so the saved ACE assets and `qwen_4b_ace15.safetensors` text encoder must still be discoverable even when MiniMax Music 3 is selected. The Music3-only API fixture avoids this fallback dependency.
The exact 99-node API fixture is runtime-proven end to end on an isolated ComfyUI `0.33.1` environment: both 15-second H3 lanes, retained-tail Picture 4 relay, deterministic end card, all diagnostic roots, and exact 30-second/15-second/6-second review media completed without node errors. The master was 720 frames at 480x864/24 fps with exactly 30.000 seconds of stereo audio; the cutdowns were 360 and 144 frames with exact matching audio clocks. A sampled visual contact-sheet review found stable performer/wardrobe and recognizable package continuity. The formal QA status correctly remains blocked because identity, package, copy, and audio sync have not all received evidence-backed human or measured approval.
The API fixture is intentionally MiniMax Music 3-only; Upload song and Legacy ACE-Step exist only in the combined editable UI workflow. Both artifacts also require the native H3 files below:
```text
models/diffusion_models/minimax_h3_ref2va_pruned_int8_convrot.safetensors
models/text_encoders/qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors
models/vae/minimax_h3_video_vae_fp16.safetensors
models/vae/minimax_h3_audio_vae_fp32.safetensors
models/loras/minimax_h3_ref2v_turbo_4step_v0.1_comfyui_bf16.safetensors
```
The Director loader is saved as `models/LLM/diffusiongemma-26B-A4B-it-NVFP4`, relative to the ComfyUI application directory. Edit that field to a full local repo-folder path if the process uses a different working directory or model layout.
H3 receives only the selected soundtrack as its motion guide. The reusable mixer supports separate non-diegetic voice-over only in the final delivery mix and never in H3 conditioning, but Advertisement v1 locks VO to `None` until an actual upload/loader path is connected. Finishing replaces the governed master tail with a deterministic exact-copy end card, then emits actual 15-second and 6-second frame/audio cutdowns alongside the 30-second 9:16 master. Requested 1:1 and 16:9 adaptations remain explicitly unrendered until a semantic reframe renderer exists.
The runtime-proven MiniMax Music 3 candidate passed technical QC but produced a signal-estimated `87.890625` BPM instead of the requested `122`; the selector records this as an advisory rather than pretending the generative tempo is exact. H3 still follows the selected waveform itself. Use Upload song or a stricter candidate lock when the numerical BPM is a hard campaign requirement.
The QA node distinguishes `pass`, `fail`, and `not_measured`; a pass without evidence is downgraded to `not_measured`. Automatic MP4 and soundtrack saves are labeled review drafts rather than delivery approvals. Technical assembly can pass while performer identity, product identity, copy legibility, or audio sync remains unmeasured. Generated in-scene packaging text is not guaranteed, exact copy is governed only on the deterministic end card, and stochastic performer/product drift still requires human or measured review. The fictional GlowBloom inputs and rendered campaign media are not bundled.
## LTX 2.3 Reframe with selectable audio
The provisional, unexported repository prototype is:
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,80 @@
{
"schema": "diffusiongemma.advertisement_runtime_fixture",
"version": 1,
"prompt_id": "d9fe3260-c297-4004-ab6b-bfd85b5a2651",
"completed": true,
"api_graph_sha256": "6296d86a7640ce1babe307f68c3ddab845341e5e1185cb2216924097e9b4f743",
"api_node_count": 137,
"class_counts": {
"BasicGuider": 4,
"BasicScheduler": 1,
"BatchImagesNode": 1,
"CLIPLoader": 1,
"CM_IntToFloat": 1,
"ComfyMathExpression": 3,
"ConditioningZeroOut": 4,
"CreateVideo": 1,
"DiffusionGemmaACECoverConditioning": 4,
"DiffusionGemmaACEReferenceMode": 1,
"DiffusionGemmaAudioAwareMultiShotPlanner": 1,
"DiffusionGemmaAudioCandidateSelector": 1,
"DiffusionGemmaBranchGenerationGate": 1,
"DiffusionGemmaCoTGenerator": 1,
"DiffusionGemmaContextHub": 1,
"DiffusionGemmaGroundingGuardSettings": 1,
"DiffusionGemmaH3ReferenceContext": 1,
"DiffusionGemmaH3ReferencePairPrep": 1,
"DiffusionGemmaH3RelayReferenceGate": 3,
"DiffusionGemmaH3ShotAssembler": 1,
"DiffusionGemmaH3ShotSeedFanout": 1,
"DiffusionGemmaJSONSplitter": 1,
"DiffusionGemmaLTXAudioGuide": 1,
"DiffusionGemmaLTXPerformancePrompt": 1,
"DiffusionGemmaMiniMaxH3TargetProfile": 1,
"DiffusionGemmaModelLoader": 1,
"DiffusionGemmaMultiFormatDeliveryPlanner": 1,
"DiffusionGemmaMusicProductionConcept": 1,
"DiffusionGemmaMusicVideoPerformanceMode": 1,
"DiffusionGemmaProjectMasterContract": 1,
"DiffusionGemmaSongSeedFanout": 1,
"DiffusionGemmaSongSourceRouter": 1,
"DiffusionGemmaSplatStagePlanner": 1,
"DiffusionGemmaTimedLyricsAnalyzer": 1,
"DiffusionGemmaUploadSong": 1,
"DualCLIPLoader": 1,
"EasyCache": 1,
"EmptyAceStep1.5LatentAudio": 1,
"FL_Audio_Separation": 1,
"FL_UnloadAllModels": 4,
"ImageFromBatch": 3,
"ImageScaleToTotalPixels": 3,
"KSampler": 4,
"KSamplerSelect": 1,
"Load Whisper (mtb)": 1,
"LoadImage": 2,
"LoraLoaderModelOnly": 1,
"MiniMaxH3ReferenceToVideo": 4,
"MiniMaxH3SigmaShift": 1,
"ModelSamplingAuraFlow": 1,
"PathchSageAttentionKJ": 1,
"PreviewAny": 16,
"PreviewAudio": 2,
"PrimitiveFloat": 2,
"PrimitiveStringMultiline": 3,
"RandomNoise": 4,
"SamplerCustomAdvanced": 4,
"SaveVideo": 1,
"SeedNode": 2,
"SplatStageBlueprintRouter": 1,
"TextEncodeAceStepAudio1.5": 4,
"TrimAudioDuration": 5,
"UNETLoader": 2,
"VAEDecode": 4,
"VAEDecodeAudio": 4,
"VAELoader": 3,
"easy cleanGpuUsed": 2
},
"known_good_ui_path": "C:/ComfyUI/app/custom_nodes/ComfyUI-DiffusionGemmaPromptBuilder/examples/15_minimax_h3_ref2va_music_video_v6.json",
"known_good_ui_sha256": "594f6aef94531f87b74659e1e8004cccdff00716d0cfe263cee6bf2149545c83",
"source": "local_comfyui_history"
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,66 @@
{
"schema": "diffusiongemma.advertisement_music3_runtime_fixture",
"version": 1,
"source_api": "examples/api/16_minimax_h3_ref2va_advertisement_glowbloom_v1_api.json",
"source_api_canonical_sha256": "6296d86a7640ce1babe307f68c3ddab845341e5e1185cb2216924097e9b4f743",
"known_good_v6": "examples/15_minimax_h3_ref2va_music_video_v6.json",
"known_good_v6_sha256": "594f6aef94531f87b74659e1e8004cccdff00716d0cfe263cee6bf2149545c83",
"known_good_v6_is_never_overwritten": true,
"api_graph_canonical_sha256": "d6f8d8de431f233c00a1172afca39815b8bd8bd619b633e8e5162db310fffc82",
"api_graph_file_sha256": "d491c2c897a66dce1eace9487445003c224a3492dc60d2c0868fe8787567a9be",
"node_count": 99,
"models": {
"director": {
"checkpoint_directory": "models/LLM/diffusiongemma-26B-A4B-it-NVFP4"
},
"minimax_h3": {
"diffusion_model": "models/diffusion_models/minimax_h3_ref2va_pruned_int8_convrot.safetensors",
"text_encoder": "models/text_encoders/qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors",
"video_vae": "models/vae/minimax_h3_video_vae_fp16.safetensors",
"audio_vae": "models/vae/minimax_h3_audio_vae_fp32.safetensors",
"turbo_lora": "models/loras/minimax_h3_ref2v_turbo_4step_v0.1_comfyui_bf16.safetensors"
},
"minimax_music3": {
"diffusion_model": "models/diffusion_models/minimax_music3_dit_fp16.safetensors",
"text_encoder": "models/text_encoders/minimax_music3_text_encoder_pruned_int8_convrot.safetensors",
"vae": "models/vae/minimax_music3_dav.safetensors"
}
},
"assets": {
"performer_hero": {
"relative_input_path": "diffusiongemma_campaigns/glowbloom_20260823/glowbloom_hero_identity.png",
"sha256": "98ced6b029fe36888b4ada491f5cbd7cb9efd4724001da064f3713b3da4798e4"
},
"performer_sheet": {
"relative_input_path": "diffusiongemma_campaigns/glowbloom_20260823/glowbloom_performer_contact_sheet_v1.png",
"sha256": "cf13e146624290c1932727fb1a54e38bbe275a866b60ed649d1ca0ee4fd1939b"
},
"product_sheet": {
"relative_input_path": "diffusiongemma_campaigns/glowbloom_20260823/glowbloom_product_contact_sheet_v1.png",
"sha256": "ed534b55bc417c1610051f7d91fa807360bf67757e7aa41a96bcc655d4e5db8e"
}
},
"audio_source_default": "MiniMax Music 3",
"api_audio_sources": [
"MiniMax Music 3"
],
"companion_ui_only_audio_sources": [
"Upload song",
"Legacy ACE-Step"
],
"h3_reference_policy": {
"picture_1": "performer hero",
"picture_2": "same-performer contact sheet",
"picture_3": "independent product/package contact sheet",
"picture_4": "hash-verified, downscaled copy of the exact retained prior-lane final frame; continuity only"
},
"deliverables": [
"30s 9:16 review draft",
"15s 9:16 review draft",
"6s 9:16 review draft"
],
"adaptations": "status-only until a semantic reframe renderer is connected; never falsely marked rendered",
"qa_default": "not_measured for visual identity, copy legibility, and audio sync until a human or measured checker supplies evidence",
"save_policy": "Saved media are review drafts; QA pass with evidence is required before delivery approval.",
"manifest_sha256": "0c1b6f9d994f6eabf24f31bf35fd151267140df7ea136505ab8ca06916efaca4"
}