{
  "1": {
    "class_type": "AppNZPromptComposer",
    "_meta": { "title": "Separate character content from visual style" },
    "inputs": {
      "subject": "friendly robot field reporter, centered portrait, visible shoulders, mouth unobstructed",
      "composition": "front-facing medium close-up, simple background",
      "style": "polished cinematic 3D character design",
      "lighting": "soft key light and cool rim light",
      "palette": "graphite, silver, cyan accents",
      "negative": "text, watermark, face covering, profile view, duplicate subject"
    }
  },
  "2": {
    "class_type": "AppNZImageGen",
    "inputs": { "prompt": ["1", 0], "model": "z-image-turbo", "size": "1024x1024" }
  },
  "3": {
    "class_type": "AppNZTTS",
    "inputs": {
      "text": "Welcome to the field lab. Today we are turning one portrait and one voice into a reusable talking character pipeline.",
      "model": "appnz-tts",
      "voice": "default"
    }
  },
  "4": {
    "class_type": "AppNZLiveAvatar",
    "_meta": { "title": "Animate portrait from generated speech" },
    "inputs": {
      "image": ["2", 0],
      "audio": ["3", 1],
      "cog_id": "liveavatar",
      "prompt": "Natural speech, confident presenter gestures, locked camera, stable identity and lighting.",
      "quality": "standard",
      "num_clips": 1,
      "steps": 4,
      "seed": 42
    }
  }
}
