Turn any 2D image into a world you can look around in.
Give Codex an image, describe how you want the world to feel, and get back an interactive 360 preview.
Start with any scene. Then ITERATE with plain-English edits: add UFOs, turn a lake pink, or change the mood.
No 3D modeling. No scene setup. Just image in, world out, preview live.
Method 1: ask your agent to install it.
Install this skill:
https://github.com/ojassurana/SceneMakerAI
Method 2: use the skills CLI with npx.
npx skills add ojassurana/SceneMakerAI --skill scenemakerai| Desert Mesa | Moraine Lake |
|---|---|
|
|
PromptMake a 3D world for this image. Add 2 big ufos in the appropriate places.
|
PromptMake a 3D world for this image. Make it a pink lake instead.
|
![]() |
![]() |
- Turns one image into an interactive 360-style world.
- Lets you describe edits in plain language.
- Supports follow-up iterations after the first preview.
- Automatically hosts a local preview URL.
- Refreshes the preview with cache-busted URLs so edits show up promptly.
- It does not create walkable 3D geometry.
- It does not output cubemap faces.
- It does not treat generated unseen areas as factual reconstruction.
SceneMakerAI generates one 2:1 spherical equirectangular environment-map image and previews it with Pannellum. It is still a flat image file, but it is authored to wrap inside a 360 viewer sphere, not to behave like a normal wide scenic banner.
The final image is saved under the agent's current working directory:
outputs/scenemakerai/<run-id>/panorama.png
SKILL.md
agents/openai.yaml
references/prompting.md
scripts/prepare_pano_canvas.py
scripts/create_pannellum_viewer.py
SKILL.md is the main Codex skill file. The scripts handle deterministic canvas preparation and Pannellum viewer generation.
Ask Codex to use the skill with an image:
Use SceneMakerAI for this image. Add a few helium airships around the skyline.
The expected final response includes:
- the saved panorama path
- the local Pannellum preview URL
The viewer helper copies the panorama into the viewer with a content-hashed filename and returns a cache-busted URL, for example:
http://localhost:8000/?v=714c78f44b70
This avoids stale browser or Pannellum cache after edits.



