pixel-room

Officialneta-search/pixel-room
Temporarily maintained by Neta for @lengkeman0802/pixel-room
Use it in Cohub

Paste this into your agent's chat — it fetches the skill and follows it.

Use the skill: pixel-room. Run `npx -y @neta-art/neta-search-cli@latest skills use neta-search/pixel-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.
Use in Neta Studio Open it in Neta Studio and see what people made with it.
Install from a terminal
npx -y @neta-art/neta-search-cli@latest skills use neta-search/pixel-room
Summary

Turn one line into a pixel-art Halloween room from your world

  • One isometric cutaway room illustration per request, 4:3, filled with tiny props and decorations at sprite scale
  • Pulls details from your world: a character's bedroom, a location you built, objects from your lore, the mood you set
  • 32-color pixel art with chunky dithering, one key light, and three small pumpkins hidden in the clutter
  • Works best with worlds that have distinct locations and a clear atmosphere: cozy, abandoned, neon-lit, clinical, haunted
SKILL.md
# Pixel Room

Make **one** Halloween-themed room image from a few choices. No menus, no multi-step
interview, no iteration loops — **zero questions**, one prompt, one image.

## Step 0 — Read the world (before any generation)

Run the context script that ships 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 (premise, locations, clues), the last status line of the latest adventure
save (`now`), and earlier `Pixel 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 the slot needs their details.

Fill the slots from the digest; the user's own words always win:

| Slot | Take it from (first that exists) |
|---|---|
| room type | the place in `now` → a location atom → a roleplay location → default |
| signature prop | one concrete object from `clues` or the chosen atom's body → default |
| world details | 2–3 sprite-scale objects that belong to this place or its resident (no people) |
| vibe | the chosen place's own atmosphere (its light, materials, mood in the atom body) → the world's `tone` → default; see **Vibe presets** |
| Halloween accent | the world's own uncanny element (a strange light, a sealed door), if any |
| Halloween dressing | written by you for this place, every time — see **Writing the Halloween dressing**; never empty, never a default |

Rules:
- Pick a room not already in `pastRooms` unless the user asks for the same one.
- When this conversation already made a room, prefer a vibe different from the last one
  unless the place clearly calls for the same light.
- 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.
- `empty: true` → skip this step and use the defaults.

## Flow

1. **Never ask a question.** Fill the slots from Step 0; use these defaults only for slots
   the world and the user leave empty:
   - Room type: `bedroom`
   - Vibe: `cozy-spooky`
   - Signature prop: `a bubbling cauldron`
   - OC: `empty room`
   If the user already named a room type, vibe or prop, use theirs instead of the default.
2. Build **one** image prompt from the answers (template below).
3. Generate **one** image. Do not re-roll. If the user dislikes it, change **one**
   variable and generate once more.
4. Deliver the image as in **Deliver and close** below.
5. If the output is not crisp pixel art, regenerate **once** with `pixel art, hard pixels, no anti-aliasing, 32-colour palette` prepended. Pass the same `--work-title` again and check the delivered Work's title.

## Art direction — pixel-art isometric room, NOT photoreal

The room must read as a **pixel-art cutaway diorama**: an isometric building slice that
fills the frame, not a small box floating in black.

- 32-colour limited palette — the **count** is fixed, the colours are not: they come from the
  vibe (see **Colour rules**)
- crisp hard pixels, no anti-aliasing, no soft gradients
- chunky checkerboard dithering for shadows and light falloff
- isometric / 2:1 dimetric perspective, **cutaway**: thick wall and floor slabs with visible
  cross-section, the building fills the frame
- **open dollhouse view, zero occlusion**: the roof is lifted off and the front walls are cut
  away, so every room is fully visible. No roof plane, beam, pillar or wall may cross in front
  of furniture, props or the doorway. A thin back roof edge may show behind the building only
- nothing crops, overlays or covers the top edge of the picture
- rich structure: bay window, balcony, alcove, exposed beams, an arch between columns,
  a split-level landing — vary the architecture
- lit by **one key light** with stepped light falloff; what the light is and its colour come
  from the vibe
- small props at sprite scale: bed, rug, shelf, candles, pumpkins, plants, scattered clutter
- **zoom: the building fills about 90% of the frame and every room stays inside it** — only
  the outer wall ends and the floor may run off the left, right and bottom edges; the top
  keeps clear headroom above the building
- any corner the building does not reach is **one flat dark tone**, the darkest colour of the
  vibe's palette; describe it this way in the prompt, never as "no background"
- dense prop dressing; the room should feel lived-in, not a bare test box

Never photoreal. Never 3D render. Never paper cut-out. Never cinematic film still.

## Colour rules — fixed structure, free colours

What makes the series recognisable is the silhouette, the pixel rendering and the three
pumpkins — not one palette. Colour belongs to the place.

- **Pumpkin orange is the only fixed colour.** It appears in every image through the three
  pumpkins, whatever the rest of the palette is.
- A palette is: **one dark ground tone** (also the flat corners) + **two or three hues of the
  place** + pumpkin orange, inside the 32-colour limit.
- **One key light** sets the mood: candle, lantern, moonlight, neon sign, screen glow, a
  rift, lab strip light — whatever belongs to the place. Small secondary glows are fine;
  only one dominates.
- Pick a vibe preset below, or compose a palette by these rules when none fits the place.

## Vibe presets

| vibe | palette (ground + place hues) | key light |
|---|---|---|
| cozy-spooky | charcoal ground, burnt orange, dusty purple, bone white | warm candlelight from the left |
| cursed-luxury | deep ink ground, bottle green, antique gold | overhead chandelier with crystal glints |
| abandoned | blue-black ground, cold grey, bone white, dust beige | single shaft of cold moonlight |
| cartoon-cute | warm brown-black ground, amber, cream, candy pink | soft lantern light, muted blacks, low key |
| neon-arcade | near-black ground, hot pink, electric teal, violet | neon signs and glowing screens |
| sterile-lab | slate ground, clinical white, steel grey, sickly green | cold overhead strip lights |
| eldritch-glow | deep violet ground, midnight blue, ghost cyan | a glowing crack, portal or rift |

The user's own words about colour or light always win over a preset.

## Prompt template (English, fill the brackets)

> Pixel-art isometric cutaway of a [room type] decorated for Halloween, [vibe] mood,
> [signature prop] as the focal point, [world details], [Halloween accent], [Halloween dressing], exactly three small
> carved pumpkins, 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 frame, width greater than height, the building fills about 90% of it with every room inside
> the frame, 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 pumpkin-orange
> accents, no text, no watermark, no people.

Keep the prompt under 160 words. Do not stack more than one focal prop. Drop an empty slot
rather than padding it — except `[Halloween dressing]`, which is always written. When the OC
is a character, replace `no people` with that character.

## Writing the Halloween dressing

The template only says *where* the Halloween dressing goes; *what* it is, you write fresh for
each room. There is no fixed list to copy. The pumpkins alone do not make a room feel like
Halloween, and once the colours are free, a cold or neon room will not either — the dressing
has to carry it.

How to write it:

- **Ask how this place would do Halloween.** Who lives or works here, what do they have to
  hand, how much do they care? A scientist decorates with lab junk, a bureaucracy with
  regulation-issue decorations, a teenager with whatever she bought last minute, an abandoned
  place with what someone left behind years ago. Turn the place's own objects into decorations
  rather than importing generic ones.
- **Name 3–5 concrete decorations**, each a specific visible thing at sprite scale (what it
  is, what it is made of, where it hangs or sits) — not a mood word like "spooky decor".
- **Spread them over the room**: something hanging from above, something on the walls or
  windows, something on tables and shelves, something on the floor. A room whose decorations
  all sit in one corner reads as empty.
- **Let at least one of them give off its own light**, so the holiday still shows inside a
  room whose key light is cold.
- **Say how full the room is** in one clause of your own, in the prompt itself — how cluttered
  the surfaces are, what is piled or scattered where. The image model only sees the prompt;
  "dense prop dressing" in Art direction does nothing unless you write it out.
- **No decoration that carries words** (banners, signs, labels): the image has no text.
- **Don't repeat yourself.** When this conversation already made a room, use a different set
  of decorations, not the same ones recoloured.

## Output contract

- One image, always 4:3 landscape, set through the image model's declared ratio/size
  parameter.
- No text inside the image. No watermark.
- Deliver as an image work with the title `Pixel Room · <room type>`.

## Cost guard

One generation call per turn, plus at most the one pixel-art retry in Flow step 5. No
self-check scripts beyond the Step 0 context reader, no second model pass, no A/B variants unless the user asks.
Target: **≤ 1 image per request**.

## Deliver and close

1. On its own line, hand the Work over through the `interaction-components` skill as a link
   card with target `{ "type": "work", "workId": "<id>" }`. A Markdown image does not
   replace the card.
2. One line on what the room holds from this world, then close as in **Next steps**.

## Next steps

Close through `next-steps` with ways to take this room further. Read the digest and the
conversation for what would make it unmistakably this world's, and spread the options across
these directions rather than several in one:

- **Room** — another place from this world.
- **Hour** — another vibe preset, or a moment from the world's own story.
- **Prop** — another object from the world as the focal point.
- **Resident** — one of the world's characters in the room (the OC variable).
- **Inside** — going beyond a still: a POV video or a roleplay that starts in this room.

Each option changes exactly one variable and names the world's own places, people and
objects. When the creator takes one, keep the art direction and the template skeleton and
let their ask override only that variable.

## Do not

- Do not add jump scares, gore, blood, or weapons.
- Do not draw children inside the room when the vibe is abandoned/cursed.
- Keep pumpkins as props: exactly three in frame, never the subject of the image.