Basic Cohub abilities. Most agents already have these mounted; listed here for reference.
Platform Published by the Neta team.
Official Made by the Neta team.
Verified Reviewed by the Neta team.
Community Shared by a Cohub user. Not reviewed — read SKILL.md before you use it.
holiday-room
Verified@netahandiness649/holiday-room
Use it in Cohub
Paste this into your agent's chat — it fetches the skill and follows it.
Use the skill: holiday-room. Run `npx -y @neta-art/neta-search-cli@latest skills use @netahandiness649/holiday-room --via site` and follow what it prints. Read its complete output, redirecting it to a temporary file first if necessary, and resolve relative paths from the skill directory it prints.
npx -y @neta-art/neta-search-cli@latest skills use @netahandiness649/holiday-room
Summary
Turn a holiday or season into a pixel-art isometric room, dressed with that occasion's own ornaments and drawn from your world.
Pick from ten holidays or four seasons, including Christmas, Lunar New Year, Diwali, Easter, Midsummer, Day of the Dead and Halloween.
Choose the view: a cutaway of the inside, the house front from the street, or a two-storey cutaway.
Get one room, a four-season set of the same room, or a before-and-after pair showing the morning after the party.
One quick questionnaire asks about the holiday, room, light and who is in it, using your world's own rooms and characters.
Works best with a world that already has locations and characters; a resident can live or visit in the room.
SKILL.md
# Holiday Room
Derived from **pixel-room**. Same 32-colour pixel discipline and same cutaway grammar — but the
calendar chooses the ornaments, and the room can be seen from inside, from the street, or across two
floors. One questionnaire round up front, then the chosen output: one image, a pair, or a set of
four.
Reply in the user's language. Text the user sees in the deliverable follows the user's language.
## Step 0 — Read the world (before asking)
Run the context script shipped with this skill, from the world root (`/workspace`):
```bash
node <this-skill-dir>/scripts/read-context.mjs
```
It prints one compact JSON digest: world config and body, location and character names, roleplay
works, the last status line of the latest adventure save, and earlier `Pixel Room` / `Holiday Room`
titles. Read nothing else up front. At most, open **one** location atom and **one** character atom
with `node /mods/neta/neta atom get <id>` when the digest lists them and a slot needs their details.
## Step 1 — One questionnaire round
Ask once, using the Studio questionnaire. Do not interview in prose, and do not ask again later.
- If the creator already named the holiday, the room, the view, the light, the resident or the
output in their message, **skip that question**. If they named all of them, skip the round and
build.
- Derive room and resident options from the digest — real room and character names, never
abstractions. Fall back to room types only when the world has no locations.
- Prefer a room and a holiday that are not in `pastRooms`, unless the creator asks for a repeat.
- Build the resident options from `digest.characters` at run time — never carry this world's (or any
other world's) names inside the published skill. Always end the list with `No one — just the room`;
use the generic "someone who lives here" / "a visitor" pair only when the world has no characters.
- Seven questions: `pills` for the first six, `cards` for the output so its image counts are visible.
The form has no conditional fields, so the season question always shows and is `optional` — it only
applies when the holiday answer is `A season`. The protocol force-enables `Other` and
`Decide for me`; never write `allowOther`, `allowDefer`, `version` or `turnId`.
```bash
node /mods/neta/neta questionnaire ask <<'JSON'
{
"title": "A holiday room — a few choices",
"questions": [
{
"id": "holiday",
"label": "Which holiday are we dressing the room for?",
"variant": "pills",
"options": [
{ "value": "halloween", "label": "Halloween" },
{ "value": "christmas", "label": "Christmas" },
{ "value": "lunar-new-year","label": "Lunar New Year" },
{ "value": "diwali", "label": "Diwali" },
{ "value": "easter", "label": "Easter" },
{ "value": "midsummer", "label": "Midsummer" },
{ "value": "day-of-the-dead","label": "Day of the Dead" },
{ "value": "thanksgiving", "label": "Thanksgiving" },
{ "value": "new-years-eve", "label": "New Year's Eve" },
{ "value": "season", "label": "A season" }
]
},
{
"id": "season",
"label": "If you chose A season, which one?",
"variant": "pills",
"optional": true,
"options": [
{ "value": "spring", "label": "Spring" },
{ "value": "summer", "label": "Summer" },
{ "value": "autumn", "label": "Autumn" },
{ "value": "winter", "label": "Winter" }
]
},
{
"id": "room",
"label": "Which room in this world?",
"variant": "pills",
"options": [
{ "value": "kitchen", "label": "The kitchen" },
{ "value": "workshop", "label": "The workshop" },
{ "value": "library", "label": "The library" },
{ "value": "attic", "label": "The attic" }
]
},
{
"id": "view",
"label": "Where are we looking from?",
"variant": "pills",
"options": [
{ "value": "inside", "label": "Inside — cutaway" },
{ "value": "outside", "label": "Outside — the front" },
{ "value": "two-floors", "label": "Two floors — cutaway" }
]
},
{
"id": "light",
"label": "What light should it have?",
"variant": "pills",
"options": [
{ "value": "candle", "label": "Candle & hearth" },
{ "value": "moon", "label": "Cold moonlight" },
{ "value": "festival","label": "Festival lights" },
{ "value": "sun", "label": "Low golden sun" }
]
},
{
"id": "resident",
"label": "Who is in the room?",
"variant": "pills",
"options": [
{ "value": "lives", "label": "Someone who lives here" },
{ "value": "visitor", "label": "A visitor passing through" },
{ "value": "empty", "label": "No one — just the room" }
]
},
{
"id": "output",
"label": "One room, or a set?",
"variant": "cards",
"options": [
{ "value": "single", "label": "One room", "description": "A single image" },
{ "value": "seasons", "label": "Four seasons", "description": "The same room four times — 4 images" },
{ "value": "before-after", "label": "Before & after", "description": "The same room twice — 2 images" }
]
}
]
}
JSON
```
The example is portable on purpose: its room options are plain room types and its resident options
are deliberately generic. At run time, **build the resident list from the digest** — up to three
characters, each with a one-line, world-grounded label (for example `Fuath, asleep on her pallet`),
then `No one — just the room`. If the world has no characters, keep the two generic options or drop
the question. If it has no locations, keep plain room types. The form force-adds `Other` and
`Decide for me`; never write them into the spec.
After the answers, say the choices in one line and build. Make the small calls yourself
(focal prop, exact decorations) and do not report them as questions.
## Step 2 — Fill the slots
| Slot | Take it from (first that exists) |
|---|---|
| holiday | the answer → the creator's own words → `halloween`; when `season`, read the season answer |
| season | the season answer → `autumn`; the season kit replaces the holiday kit |
| room type | the answer → a location atom → a roleplay location → `bedroom` |
| view | the answer → `inside` |
| light / vibe | the answer mapped below → the room's own atmosphere → the holiday preset |
| resident | the answer → a character named in the digest → `empty room` |
| output | the answer → `single`; `seasons` ignores the holiday answer and uses all four season kits |
| scale | the creator's words → human scale; "giant" / "tiny" become one clause in the prompt |
| signature prop | one concrete object from the room atom or the resident's body → the occasion kit's focal prop |
| world details | 2–3 sprite-scale objects that belong to this room or its resident (no people) |
| ornaments | the occasion's kit below, rewritten in this room's own materials |
| clutter | one clause you write for this room: what is piled, scattered or crowded where |
Rules:
- Write every slot as a plain English visual description, not a proper name.
- Never invent facts the digest does not hold; leave a slot to its default instead.
- The occasion preset is a **kit of ingredients**, not a script. Rewrite the dressing for who lives
here and what they would actually have to hand — a barracks decorates with kit and ration tins, a
merchant with stock, a child with paper and glue.
- A resident is optional and always singular. For a set, the resident appears in every image in the
same pose and place unless the creator says otherwise.
### Light mapping
| answer | key light | mood words | ground tone |
|---|---|---|---|
| candle | warm candlelight from the left, stepped falloff | warm, lived-in, low key | charcoal / umber |
| moon | one shaft of cold moonlight | quiet, abandoned, blue | blue-black |
| festival | coloured lantern and string-light glow | bright, celebratory, saturated | near-black |
| sun | low golden afternoon sun through the window | soft, dusty, generous | warm brown-black |
The occasion still owns the palette hues; the light owns the ground tone and the falloff.
## Step 3 — The occasion kit
The full kits live in `references/occasions.md`. Read that file before filling the slots; the table
below is only the index. Each kit gives a palette, a key light, a **signature trio** (exactly three in
frame), a focal prop, five ornaments to spread across the room, and what to avoid. The dressing
sentence there is a starting point — rewrite it for the actual room, never paste it.
| Occasion | Palette | Signature trio | Focal prop |
|---|---|---|---|
| Halloween | charcoal, burnt orange, dusty purple, bone | 3 carved pumpkins | cauldron or a trophy |
| Christmas | deep pine, brick red, cream, brass | 3 wrapped parcels | decorated fir or garland |
| Lunar New Year | lacquer red, gold, jade, cream | 3 red envelopes | plum blossom in a vase |
| Diwali | deep indigo, marigold, magenta, gold | 3 stacks of sweets | marigold garland |
| Easter | pale sage, butter yellow, blossom pink, cream | 3 painted eggs | basket of eggs |
| Midsummer | dusk blue, buttercup, fern, white | 3 floating candles | flower garland |
| Day of the Dead | midnight purple, marigold, hot pink, bone | 3 sugar skulls | ofrenda shelf |
| New Year's Eve | near-black, champagne, midnight blue, silver | 3 coupes | paper star |
| Thanksgiving | umber, pumpkin, wheat gold, sage | 3 small gourds | pie |
| Seasons | see the four season kits | 3 seedlings / jars / apples / preserves | blossom, wildflowers, apples, kettle |
## Step 4 — Composition blocks
Pick the block that matches `view`. All three share the same palette, pixel and lighting rules.
### Inside — cutaway (default)
- isometric / 2:1 dimetric cutaway: roof lifted off, front walls removed, every room fully visible
- thick wall and floor slabs with visible cross-section; nothing may cross in front of furniture or
the doorway; a thin back roof edge may show behind the building only
- rich structure: bay window, balcony, alcove, exposed beams, an arch between columns, a split-level
landing
- building fills about 90% of the frame; side walls and floor run off the left, right and bottom
edges; clear headroom at the top
- flat corners in the palette's darkest tone
### Outside — the front
- isometric exterior, **roof on, walls closed, no cutaway**: front facade and one side visible
- the building fills about 85% of the frame; a strip of ground, path and fence runs off the left,
right and bottom edges; flat dark corners instead of sky
- light comes from the windows, the door lamp and the decorations; the key light is one of them
- put the occasion on the facade: a wreath or garland on the door, lights at the windows, the
signature trio on the step, sill and gatepost
- keep a lived-in threshold: a boot scraper, a broom, a crate, a mat, a watering can
- no roof removal, no visible interior except through the windows
### Two floors — cutaway
- the same cutaway grammar, two storeys: lower floor is the chosen room, upper floor is the room
above it (a location from the world that is not the chosen room → a loft, storeroom or bedroom)
- a staircase or ladder connects them; both floors stay fully visible and never overlap
- keep the upper floor quieter than the lower one — one or two props, not a second full scene
- building fills about 90% of the frame; walls and floor run off the left, right and bottom edges
## Step 5 — Build the prompt
Fill one skeleton, English, under 160 words. Do not stack a second focal prop. Drop an empty slot
rather than padding it — except the ornaments and the clutter clause, which are always written.
**Inside**
> Pixel-art isometric cutaway of a [room type] dressed for [occasion], [light/mood words],
> [signature prop] as the focal point, [world details], [3–5 ornaments], exactly three [signature
> trio], no fourth, [clutter clause], [scale clause], 32-colour limited palette, crisp hard pixels
> with no anti-aliasing, chunky checkerboard dithering, thick wall and floor slabs with visible
> cross-section, landscape 4:3, width greater than height, the building fills about 90% of the frame
> with every room inside, side walls and floor run off the left, right and bottom edges, flat [ground
> tone] corners, [key light] with stepped falloff, [palette hues] palette with [occasion accent], no
> text, no watermark, no people.
**Outside**
> Pixel-art isometric exterior of a [room type] front dressed for [occasion], [light/mood words],
> [signature prop or facade garland] as the focal point, roof on, walls closed, no cutaway, [world
> details], [3–5 facade ornaments], exactly three [signature trio] on step, sill and gatepost, no
> fourth, [threshold clutter], [scale clause], 32-colour limited palette, crisp hard pixels with no
> anti-aliasing, chunky dithering, landscape 4:3, width greater than height, the building fills about
> 85% of the frame with a path and fence running off the left, right and bottom edges, flat [ground
> tone] corners instead of sky, [key light] from windows and door with stepped falloff, [palette
> hues] palette with [occasion accent], no text, no watermark, no people.
**Two floors**
> Pixel-art isometric cutaway of a two-storey [building], [occasion]-dressed lower floor as a [room
> type], quieter upper floor as a [upper room], a [staircase or ladder] between them, [light/mood
> words], [signature prop] as the focal point downstairs, [world details], [3–5 ornaments], exactly
> three [signature trio], no fourth, [clutter clause], [scale clause], 32-colour limited palette,
> crisp hard pixels with no anti-aliasing, chunky dithering, roof off and front walls removed, both
> floors fully visible and non-overlapping, thick floor slabs with visible cross-section, landscape
> 4:3, width greater than height, building fills about 90% of the frame, walls and floor run off the
> left, right and bottom edges, flat [ground tone] corners, [key light] with stepped falloff,
> [palette hues] palette with [occasion accent], no text, no watermark, no people.
When a resident is chosen, replace `no people` with that character's name and a short appearance
clause (two sentences at most), and pass their image as a reference:
```bash
node /mods/neta/neta find images "<Character Name>"
node /mods/neta/neta generate image --prompt "..." --work-title "Holiday Room · <Occasion> <Room>" \
--image "<the cover or reference image path>" --param aspect_ratio=4:3
```
Scale: if the creator asked for a giant or tiny room, add one clause — `furniture and doorway built
for a dragon four times human scale` or `a fingertip-scale room, the bed the size of a matchbox` —
and keep everything else identical.
## Step 6 — Sets
The `output` answer sets how many images this request makes. A set is one request, not several:
generate the images in order, keep the camera and furniture fixed, and change only the variables the
set calls for.
### Four seasons — 4 images
- The same room, camera, furniture and resident in all four; only the season kit changes (palette,
light, ornaments, window weather, floor clutter).
- Generate **Spring** first. For the other three, pass the spring image as `--image` and say
"identical composition, camera, furniture and framing; change only the season".
- Titles: `Holiday Room · Four Seasons <Room>` plus `· Spring`, `· Summer`, `· Autumn`, `· Winter`.
- Place all four in one frame, in season order.
### Before & after — 2 images
- The same room, camera and decorations; the second is the morning after the same occasion.
- **Before**: decorated, lit, full, the signature trio in place.
- **After**: the same objects used — garland slipping, candles out, chairs moved, crumbs, confetti,
straw or petals on the floor, one window open, flatter morning light. Do not add new decorations.
- Generate the before image first, then pass it as `--image` for the after: "identical composition,
camera and furniture; change only the state".
- Titles: `Holiday Room · Before & After <Room>` plus `· Before` and `· After`.
## Output contract
- Always 4:3 landscape, set through `--param aspect_ratio=4:3`; no text in the image, no watermark.
- One image by default; 2 for a before-and-after pair; 4 for a four-season set. State the count in
one line before a set, then generate exactly that many.
- At most one extra retry per image, only when the pixels are not crisp.
- Titles:
- single: `Holiday Room · <Occasion> <Room>` (e.g. `Holiday Room · Christmas Kitchen`)
- exterior: `Holiday Room · <Occasion> <Room> Front`
- two floors: `Holiday Room · <Occasion> <Room> Two Floors`
- sets: as given in Step 6
## Deliver and close
1. On its own line, hand the Work over through **interaction-components** as a link card with target
`{ "type": "work", "workId": "<id>" }`. For a pair or set, link the first image and name the rest
in the line; place them all in one frame.
2. One line on what the room holds from this world, then close through **next-steps** — spread the
options across another occasion, another room, an exterior, a set, a resident, or a POV video that
opens there.
## Do not
- Do not add gore, blood, jump scares, or weapons.
- Do not draw children in a `moon` or abandoned room.
- Do not put words, banners, signs or labels in the image.
- Do not treat a holiday as a costume: use its own objects, materials and colours, and avoid the
caricatures listed in its kit.
- Do not hardcode a resident list from another world; build it from the digest on every run.
- Do not change world settings — visualStyle, genre, tone, era, or any other world config.
- Do not delete existing files, materials, or Works.
- Do not reuse last time's ornament set unchanged; change at least the hanging, wall and floor
pieces.
- Keep the signature trio a prop, never the subject of the image.
- Do not add a cutaway to an exterior, or a roof to an interior cutaway.
- Do not add extra variants beyond the chosen output.
## Known limits
- **Counts drift.** Write `exactly three [trio]` literally **and close it with `no fourth`**; a run
that stated the count still came back with four parcels.
- **Ratio drifts.** `4:3` alone can come out portrait; keep `landscape 4:3, width greater than
height`.
- **Holidays bleed.** Christmas prompts grow pumpkins, Halloween prompts grow gifts. Name the
occasion's own objects and add `no [other holiday] decorations` when the first pass mixes them.
- **Interiors are unstable.** Two runs move the bed and window. For a series, pass the first image as
a reference and repeat `identical composition, camera, furniture and framing`.
- **Exteriors get cut open.** The model's habit is the dollhouse view; say `roof on, walls closed, no
cutaway` and `no visible interior except through the windows` in the same prompt.
- **Two floors collapse into one.** Name both floors, the connecting staircase, and
`both floors fully visible and non-overlapping`.
- **A subtle resident gets simplified.** "A sleeping catdragon just visible behind the glass" came
back as a small black cat. If the resident matters, name them and describe their size and colours,
or show them fully in the room.
- **A character reference can hijack the room.** Passing a photoreal character reference for the
resident produced a head-and-shoulders portrait instead of the room. For pixel rooms, describe the
resident in words; if a reference is unavoidable, put the room first and add `full room scene, not
a portrait`.
- **The cot multiplies.** "A narrow cot opposite" came back as four single beds, twice. Write `one
single cot, no other beds` whenever the room must hold exactly one.
- **Turnips are not pumpkins.** If a kit needs a root vegetable, spell out `pale purple-and-white
turnips with carved faces`, or the model substitutes orange pumpkins.
- **Sets cost four.** A four-season set is four generations; never start one without the creator
having chosen it.