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:
| Type | When to Use | Key Characteristics |
|---|---|---|
| Text-to-World | No starting image, pure generation | Full visual_description_long in segment 0, subject defined in subject_list |
| Image-to-World | User provides a starting image | Segment 0 describes the image (1s duration, empty contained_actions), segments 1+ continue from it |
| Camera-Controlled | Orbit, follow, or specific camera path | Camera moves via <Camera1> tags OR external Camera Keys/Recording nodes; description_change describes scene from new viewpoint |
| Interactive Drive | Real-time keyboard steering | Short 1s turns, minimal prompt structure, user steers with W/A/S/D |
| Multi-Segment Chained | Long 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.
-
First segment gets
visual_description_long(80-200 words describing the SCENE ONLY, never the subject). All later segments usedescription_changeinstead. -
description_changealways 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." -
Actions use XML-like tags:
<Action1><|Subject1|> does something</Action1>.— numbered sequentially from 1 within each segment, always referencing the subject by<|Subject1|>. -
Actions must not overlap in time within a segment. Each action gets its own
start_time/end_timewindow. -
Timestamps are
"MM:SS.mmm"format:"00:00.000","00:05.000","00:07.500". Internally normalized to segment-relative times. -
Segment lengths: 2-5 seconds works well. 24 fps, 4 video frames per latent frame.
-
Camera moves in text use
<Camera1>...</Camera1>tags insidedescription_changeorvisual_description_long. But Camera Keys/Recording nodes steer far more reliably than text camera descriptions. -
For image-to-world: Segment 0 should be ~1 second, describe the image faithfully, have empty
contained_actions: []. The subject's appearance insubject_attributemust match the image. -
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
- Identify generation type from user request (text-only? has image? camera control? drive mode?)
- Ask clarifying questions if needed: perspective, style, subject description, desired duration, number of segments
- Generate the complete JSON following the schema exactly
- Validate before presenting:
- Valid JSON (parseable)
- All required keys present
- Timestamps in correct format and non-overlapping
- First segment has
visual_description_long, rest havedescription_change - Actions properly tagged and numbered
- Subject referenced consistently as
<|Subject1|>
- 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_longin 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