Specification
Skill ID
pika-labs/pika-plugins/voxel-it
Publisher
pika-labs
Repository
pika-plugins
Installs
0
Files
1
Synced
Sep 23, 2026
How to use it

Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.

pika-labs/pika-plugins/voxel-itInstalls these files
  • SKILL.md

What this skill tells the agent

voxel-it

Tools below are Pika MCP tools, named bare — call each under whatever prefix your session exposes for the Pika MCP.

One skill, one engine: turn a photo into a Minecraft screenshot where the human stays photoreal and the rest of the frame becomes voxel blocks, unified by a cinematic color grade. A Step 0 router reads the photo and picks one of three modes — deciding what gets voxelized (the featured object, the background, or everything except the person) and whether to float Minecraft "loot tags" naming the hero objects. This one skill absorbs both the old Minecraft-Food trend (object-only) and the old Minecraft-World trend (object+background).

The conversion engine is the @rohxit7 viral recipe, verbatim (Instagram, 194K likes, #minecraft #prompt #chatgpt). The object-only prompt and loot-tag clause are salvaged from the retired Minecraft-Food trend (@aibyjoe "Minecraft Food").

The effect, precisely:

  1. Keep photorealistic & untouched — the PERSON (face, skin, hair, clothing, pose, proportions). No stylization, no blockifying — in every mode.
  2. Convert to Minecraft — the parts the chosen mode targets (some subset of: terrain, structures, plants, objects, furniture, vehicles, food, drinks, sky, background): clean cubic/voxel geometry, crisp 16×16-style textures, modern-Minecraft-screenshot quality (premium SEUS/BSL shaders — realistic light, soft shadows, AO, volumetric light, sharp edges).
  3. Spatial fidelity (strict): exact camera, framing, composition; every element in its original position and size; nothing added/removed/rearranged.
  4. Cinematic color grade (the unifier): analyze the source mood and grade the whole frame to match, cohesive across real human + voxel world so it's one image, not a pasted cutout.
  5. (Conditional) Loot tags — object-only mode only; see Step 0.
Identity note: maskless single full-canvas edit (per the recipe), so the face is regenerated and can drift slightly. Accepted for color cohesion. For a byte-perfect face, see the advanced mask note at the bottom.

Step 0 — Router: pick the MODE

Read the photo and commit to exactly ONE mode. State the decision as a single line — `MODE: object-only` / `MODE: background-only` / `MODE: object+background` — then apply the matching prompt block in Step 3. The engine, color grade, and quality bar are identical across modes; the only delta is what voxelizes and whether loot tags float.

The three modes:

  • object-only — voxelize ONLY the held/featured object (food / drink / product) and its own tableware. Keep the PERSON and the BACKGROUND fully photorealistic. Float a Minecraft loot-tag label above each hero object. (This is the old Minecraft-Food look.)
  • background-only — voxelize the BACKGROUND / environment into Minecraft blocks. Keep the PERSON photorealistic; if an incidental object is present, keep it photoreal too. No loot tags. (A person standing in a place, now in a voxel world — but anything they're holding stays real.)
  • object+background — voxelize EVERYTHING except the person (the object AND the background). Loot tags optional. (The old full-voxelize Minecraft-World default.)

Decision tree (default detection):

Does the user EXPLICITLY ask to voxelize everything?
  ("voxelize everything" / "object and background" / "full voxel world")
    → MODE: object+background
Else, is a human FACE or BODY present?
    ├─ Person present + a held/featured object (food/product) is the subject?
    │     → MODE: object-only        (float loot tags on the object)
    └─ Person present, NO featured object (people-in-a-place shot)?
          → MODE: background-only     (the default for face-in-a-scene shots)
No person present?
    ├─ Pure object shot (a meal, a product, a flat-lay, a desk of gear)?
    │     → MODE: object-only
    └─ Landscape / scene with no featured object?
          → MODE: background-only
Genuinely ambiguous (can't tell if the object or the scene is the point)?
    → ask the user ONE line: "voxelize just the object, just the background,
      or everything but you?"

The routing intent: a face with no featured object defaults to background-only (put the person in a voxel world, keep them and anything incidental real). A featured object → object-only (voxelize the hero item, tag it, keep person + scene real). object+background only on an explicit request.

Inputs

  • <source> — any photo (path, URL, or chat-pasted image). Works on object shots, person+object shots, and wide scenes alike.

Empty-args menu

  1. "Drop the photo (path, URL, or paste it). I'll auto-pick the mode — object-only (voxelize just the food/product you're featuring, with Minecraft loot tags), background-only (voxelize the scene around you, keep you and anything you're holding real), or object+background (voxelize everything but you). Tell me if you want to force a specific mode."

(No provider question — always gpt-image-2; see Engine.)

Engine — always gpt-image-2

gpt-image-2, quality="high", output_format="png". It's the strong editor the recipe needs and commits the world to blocks. Do not use nano-banana-pro — it under-voxelizes (preserves subjects as photoreal even when told to block-ify), so the world barely changes (audited over a 6-scene batch).

Timeout gotcha: at quality="high" a synchronous call often exceeds the ~260s tool budget and the client times out. Always call with background:true and poll task_status(task_id) in a tight loop until completed.

Workflow

Working dir: <project>/voxel-it/<run-id>/ — each run its own folder.

Step 1 — Get the source as a Pika-CDN URL

  • HTTPS URL? Use it directly.
  • Local file? Upload (Step 2). Convert HEIC: sips -s format jpeg in.HEIC --out out.jpg — this strips the EXIF orientation flag, so the JPEG can land on its side. View it; only if it's sideways, rotate upright with sips -r 90 or sips -r 270 (whichever way it's tilted), then view again to confirm. The model bakes the reference pixels as-is, so it must be upright before upload.
  • Chat-pasted image? Not reliably on disk. If the user names a file (e.g. a Desktop screenshot — macOS uses a narrow no-break space U+202F before AM/PM, so match via a glob), copy it. Otherwise extract from the session transcript:
  cd ~/.claude/projects/<project-slug>/
  SRC=$(ls -t *.jsonl | head -1)   # newest = current session
  python3 - "$SRC" "<run-dir>" <<'PY'
  import json, base64, sys, os, hashlib
  src, out = sys.argv[1], sys.argv[2]; imgs=[]
  for line in open(src):
      try: o=json.loads(line)
      except: continue
      m=o.get("message") if isinstance(o,dict) else None
      role=(m or {}).get("role") if isinstance(m,dict) else o.get("role")
      if role!="user": continue
      c=(m or o).get("content")
      if not isinstance(c,list): continue
      for p in c:
          if isinstance(p,dict) and p.get("type")=="image" and isinstance(p.get("source"),dict):
              s=p["source"]
              if s.get("data") and s.get("media_type","").startswith("image/"):
                  imgs.append((s["media_type"], s["data"]))
  # save the last N pasted images (newest turn). Adjust [-1:] to [-N:] for batches.
  for i,(mt,data) in enumerate(imgs[-1:], 1):
      b=base64.b64decode(data); ext={"image/webp":"webp","image/jpeg":"jpg","image/png":"png"}.get(mt,"jpg")
      p=os.path.join(out,f"source_{i}.{ext}"); open(p,"wb").write(b)
      print(p, len(b), "sha256", hashlib.sha256(b).hexdigest())
  PY

Always read the saved file back (view it) before spending a generation.

Step 2 — Upload to Pika CDN

upload_asset({filename, mime_type, size_bytes, sha256}) → PUT the bytes to presigned_url with the exact content_type from the

Use this skill in a project

Open any RiverX project, search the Skills panel for pika-labs/pika-plugins/voxel-it, and install it in one click.

Use this skill