Communitygithub.com

benjiyaya/hy-nomas-prompts

Generate structured JSON world prompts for Tencent Hy-Nomas video world model in ComfyUI. Use this skill whenever the user wants to create video prompts for Hy-Nomas, needs help formatting world descriptions as JSON, mentions "Hy-Nomas", "world model", "segment prompts", or wants to generate videos with timed actions, camera control, or chained segments. Also use when converting plain text video ideas into the structured Hy-Nomas JSON format, or when debugging why a Hy-Nomas prompt isn't working. This covers all generation modes: text-to-world, image-to-world, camera-controlled, interactive drive, and multi-segment chained worlds.

What is hy-nomas-prompts?

hy-nomas-prompts is a Claude Code agent skill that generate structured JSON world prompts for Tencent Hy-Nomas video world model in ComfyUI. Use this skill whenever the user wants to create video prompts for Hy-Nomas, needs help formatting world descriptions as JSON, mentions "Hy-Nomas", "world model", "segment prompts", or wants to generate videos with timed actions, camera control, or chained segments. Also use when converting plain text video ideas into the structured Hy-Nomas JSON format, or when debugging why a Hy-Nomas prompt isn't working. This covers all generation modes: text-to-world, image-to-world, camera-controlled, interactive drive, and multi-segment chained worlds.

Works with~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/benjiyaya/hy-nomas-prompts/tree/HEAD

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation


name: hy-nomas-prompts description: Generate structured JSON world prompts for Tencent Hy-Nomas video world model in ComfyUI. Use this skill whenever the user wants to create video prompts for Hy-Nomas, needs help formatting world descriptions as JSON, mentions "Hy-Nomas", "world model", "segment prompts", or wants to generate videos with timed actions, camera control, or chained segments. Also use when converting plain text video ideas into the structured Hy-Nomas JSON format, or when debugging why a Hy-Nomas prompt isn't working. This covers all generation modes: text-to-world, image-to-world, camera-controlled, interactive drive, and multi-segment chained worlds.

Hy-Nomas World Prompt Generator

Generate valid structured JSON world prompts for Tencent's Hy-Nomas video world model running in ComfyUI via ComfyUI-Hy-Nomas.

Why Structured JSON Matters

Hy-Nomas was trained on structured JSON captions, not free-form text. The model uses per-action attention masks derived from the JSON structure — each action's video frames attend only to that action's text. Loose plain-English prompts are mostly ignored after the first segment; the subject just keeps doing what it did. Following this format exactly is what makes follow-up segments work.

Video Generation Types

Identify which type the user needs and generate accordingly:

TypeWhen to UseKey Characteristics
Text-to-WorldNo starting image, pure generationFull visual_description_long in segment 0, subject defined in subject_list
Image-to-WorldUser provides a starting imageSegment 0 describes the image (1s duration, empty contained_actions), segments 1+ continue from it
Camera-ControlledOrbit, follow, or specific camera pathCamera moves via <Camera1> tags OR external Camera Keys/Recording nodes; description_change describes scene from new viewpoint
Interactive DriveReal-time keyboard steeringShort 1s turns, minimal prompt structure, user steers with W/A/S/D
Multi-Segment ChainedLong continuous worlds (10-20s+)Multiple segments with description_change, non-overlapping timed actions

Core JSON Schema

Every world prompt must be a single JSON object with these exact top-level keys:

{
  "perspective_view": "third-person observer",
  "Style": "CG",
  "subject_list": [...],
  "segments": [...]
}

Required Fields Reference

For the complete field-by-field specification including allowed values, formatting rules, and edge cases, read references/prompt-format-spec.md.

Quick Reference

perspective_view (exact strings):

  • "first-person" — Camera IS the subject
  • "second-person" — Camera faces the subject
  • "third-person follow" — Camera behind subject, tracks movement
  • "third-person observer" — External fixed/independent camera

Style (exact strings):

  • "real-world footage"
  • "animation/anime"
  • "CG"
  • "video game"

subject_list: Array with exactly one subject object containing subject_id, display_name, subject_attribute.

segments: Array of segment objects with start_time, end_time, and either visual_description_long (first segment only) or description_change (all subsequent segments).

Critical Rules

These rules come from how the model was trained and how the attention masks work. Violating them causes silent failures.

  1. First segment gets visual_description_long (80-200 words describing the SCENE ONLY, never the subject). All later segments use description_change instead.

  2. description_change always starts with "Compared to the previous segment, " — even when nothing changes: "Compared to the previous segment, the visible scene, background, and other-object layout remain unchanged."

  3. Actions use XML-like tags: <Action1><|Subject1|> does something</Action1>. — numbered sequentially from 1 within each segment, always referencing the subject by <|Subject1|>.

  4. Actions must not overlap in time within a segment. Each action gets its own start_time/end_time window.

  5. Timestamps are "MM:SS.mmm" format: "00:00.000", "00:05.000", "00:07.500". Internally normalized to segment-relative times.

  6. Segment lengths: 2-5 seconds works well. 24 fps, 4 video frames per latent frame.

  7. Camera moves in text use <Camera1>...</Camera1> tags inside description_change or visual_description_long. But Camera Keys/Recording nodes steer far more reliably than text camera descriptions.

  8. For image-to-world: Segment 0 should be ~1 second, describe the image faithfully, have empty contained_actions: []. The subject's appearance in subject_attribute must match the image.

  9. Subject attribute includes perspective boilerplate: For third-person follow: "The camera is placed behind the X, and follows the X throughout the whole video. The camera is tracking the X and the X should be placed in the center of the video." For third-person observer: "The camera films the X from an external position, and the X is visible in the video. The framing of the video from the camera is independent of the X, and does not follow the movement of the X." For first-person: "The first-person operator is embodied by the camera, and has the same first-person viewpoint as the camera throughout the whole video."

Workflow

  1. Identify generation type from user request (text-only? has image? camera control? drive mode?)
  2. Ask clarifying questions if needed: perspective, style, subject description, desired duration, number of segments
  3. Generate the complete JSON following the schema exactly
  4. Validate before presenting:
    • Valid JSON (parseable)
    • All required keys present
    • Timestamps in correct format and non-overlapping
    • First segment has visual_description_long, rest have description_change
    • Actions properly tagged and numbered
    • Subject referenced consistently as <|Subject1|>
  5. Present the JSON in a code block ready to paste into ComfyUI's World Prompt node

Common Pitfalls

  • Naming the subject by name instead of <|Subject1|> in actions → model ignores the action
  • Putting subject description in visual_description_long → scene description should be environment only
  • Missing "Compared to the previous segment, " prefix in description_change → inconsistent world continuity
  • Overlapping action times → undefined behavior in attention masks
  • Using visual_description_long in segment 1+ → stripped by the parser anyway
  • Sudden global scene changes (e.g., "heavy snowstorm") → model maintains world consistency; changes happen gradually within segments

Example Prompts

For complete working examples covering all generation types, read references/examples.md.

Technical Details

  • Text encoder: Qwen2.5-VL-7B (same as Qwen-Image)
  • DiT: 32-channel DCAE-V latent, INT8 distilled weights
  • Sampling: euler / simple / 8 steps / cfg 1
  • Resolution: 1280×704 (720p) or 832×480
  • FPS: 24
  • History: 18 latent frames retained per segment
  • Source: ComfyUI-Hy-Nomas · Tencent Hy-Nomas

Related Skills