{"id": "6f3c1c2a-7b9e-4c3a-9d2e-gmanski-minimax3", "revision": 0, "last_node_id": 5, "last_link_id": 3, "nodes": [{"id": 1, "type": "MarkdownNote", "pos": [-1200, -320], "size": [520, 620], "flags": {}, "order": 0, "mode": 0, "inputs": [], "outputs": [], "properties": {"Node name for S&R": "MarkdownNote"}, "widgets_values": ["## Register a Character (Gmanski)\n\n**Run this once per character**, not per song or video. It registers a name, look, voice, and (optionally) a reference photo in the pod-local character library — then you reuse it across as many songs/videos as you want.\n\n### Steps\n1. Click **Load Image** below and upload a photo of your character (a real photo, an illustration, whatever you'll want MiniMax H3 to keep consistent). Optional — skip it if this character only needs a trained LoRA (the `face_lora_*` fields) instead.\n2. Fill in **name**, **look** (a fixed visual description), and **Vocal Details** (fixed voice-description prose).\n3. Queue. The **character_id** box below will show a short id like `a1b2c3d4e5f6` — **copy it**.\n4. Paste that id into the **Character ID** field on `MiniMax Music 3`, `Kids Music Video`, or `Kids Music Video H3` (Gmanski) to reuse this exact character there.\n\n### Updating a character later\nPaste the existing `character_id` into this node's own **character_id** field (bottom of the node) before queueing again — that updates the same record instead of creating a new one. Leave it blank to create a new character.\n\n### What each face field is for\n- **image** (upload) or **reference_image_path** (a path already on the volume): used by MiniMax H3 reference-to-video templates. No LoRA training needed — H3 preserves identity straight from the photo.\n- **face_lora_name**: the character's **Z-Image** LoRA (Z-Image Turbo, the slideshow templates).\n- **face_lora_krea2**: the character's **Krea 2** LoRA (Gmanski Krea 2, IntoRealism, Bulk Img2Img Character) — trained with the ai-toolkit worker's `krea2` / `krea2_turbo` architecture.\n- **face_lora_flux**: the character's **Flux 1** LoRA (Flux 1 Realistic).\n\nOne character, one field per model family: a LoRA trained for one model does not load into another, so each template reads only its own field. All are optional — leave blank what you don't have.\n"], "title": "Read me: Register a Character (Gmanski)", "color": "#432", "bgcolor": "#653"}, {"id": 2, "type": "LoadImage", "pos": [-600, -320], "size": [320, 314], "flags": {}, "order": 1, "mode": 0, "inputs": [], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [1]}, {"name": "MASK", "type": "MASK", "links": []}], "properties": {"Node name for S&R": "LoadImage"}, "widgets_values": ["example.png", "image"], "title": "Character reference photo (click to upload)"}, {"id": 3, "type": "GmanskiCharacterSave", "pos": [-200, -320], "size": [460, 760], "flags": {}, "order": 2, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 1}, {"name": "name", "type": "STRING", "link": null, "widget": {"name": "name"}}, {"name": "age_band", "type": "COMBO", "link": null, "widget": {"name": "age_band"}}, {"name": "look", "type": "STRING", "link": null, "widget": {"name": "look"}}, {"name": "vocal_details", "type": "STRING", "link": null, "widget": {"name": "vocal_details"}}, {"name": "vocal_config", "type": "COMBO", "link": null, "widget": {"name": "vocal_config"}}, {"name": "language_default", "type": "COMBO", "link": null, "widget": {"name": "language_default"}}, {"name": "face_lora_name", "type": "STRING", "link": null, "widget": {"name": "face_lora_name"}}, {"name": "face_lora_krea2", "type": "STRING", "link": null, "widget": {"name": "face_lora_krea2"}}, {"name": "face_lora_flux", "type": "STRING", "link": null, "widget": {"name": "face_lora_flux"}}, {"name": "reference_image_path", "type": "STRING", "link": null, "widget": {"name": "reference_image_path"}}, {"name": "trigger_word", "type": "STRING", "link": null, "widget": {"name": "trigger_word"}}, {"name": "notes", "type": "STRING", "link": null, "widget": {"name": "notes"}}, {"name": "character_id", "type": "STRING", "link": null, "widget": {"name": "character_id"}}, {"name": "library_path", "type": "STRING", "link": null, "widget": {"name": "library_path"}}], "outputs": [{"name": "character_id", "type": "STRING", "links": [2]}, {"name": "debug", "type": "STRING", "links": [3]}], "properties": {"Node name for S&R": "GmanskiCharacterSave"}, "widgets_values": ["", "general", "", "", "female vocals", "English", "", "", "", "", "", "", "", "/workspace/gmanski/characters.json"], "title": "Save Character (Gmanski)"}, {"id": 4, "type": "ShowText|pysssss", "pos": [320, -320], "size": [420, 150], "flags": {}, "order": 3, "mode": 0, "inputs": [{"name": "text", "type": "STRING", "link": 2}], "outputs": [{"name": "STRING", "type": "STRING", "links": []}], "properties": {"Node name for S&R": "ShowText|pysssss"}, "widgets_values": [], "title": "character_id — copy this into your video template"}, {"id": 5, "type": "ShowText|pysssss", "pos": [320, -140], "size": [420, 380], "flags": {}, "order": 4, "mode": 0, "inputs": [{"name": "text", "type": "STRING", "link": 3}], "outputs": [{"name": "STRING", "type": "STRING", "links": []}], "properties": {"Node name for S&R": "ShowText|pysssss"}, "widgets_values": [], "title": "Full record (debug)"}], "links": [[1, 2, 0, 3, 0, "IMAGE"], [2, 3, 0, 4, 0, "STRING"], [3, 3, 1, 5, 0, "STRING"]], "groups": [], "config": {}, "extra": {"ds": {"scale": 0.62, "offset": [1480, 420]}, "gmanski_template": "register-a-character", "generator": "scripts/build_minimax_music_workflow.py", "source": "https://gmanski.com/workflows/register-a-character"}, "version": 0.4}