happycapy-ai/happycapy-skills/360-panorama-viewer
Claude Code and agent skill by happycapy-ai/happycapy-skills
- community
Checking that the SKILL.md file is still in the repository.
Build a fully self-contained 360° equirectangular panorama viewer as a single HTML file. The viewer uses Three.js to render immersive spherical panoramas with drag-to-look, zoom, auto-rotate, and a scene-switcher sidebar. All panorama images are embedded as base64 JPEG — no server needed. Use this skill whenever the user asks to create a 360 viewer, VR panorama app, immersive scene gallery, equirectangular image viewer, or wants to combine multiple AI-generated panoramas into an interactive webpage. Also trigger when the user says things like "make a 360 viewer", "VR world gallery", "360度全景", "全景查看器", "make scenes I can look around in", etc.
Install
npx vskill@latest install happycapy-ai/happycapy-skills/360-panorama-viewerSKILL.md
360° Panorama Viewer Skill
This skill creates a polished, self-contained 360° panorama viewer HTML file.
What it produces
A single .html file (~3–6 MB depending on scene count) that:
- Renders equirectangular panoramas as spherical 360° environments using Three.js
- Supports dragging to look around, scroll to zoom, auto-rotate toggle, fullscreen
- Shows a thumbnail sidebar to switch between multiple scenes
- Works offline — no CDN dependencies, all assets embedded
Skill assets
| Asset | Purpose | |
|---|---|---|
assets/viewer_template.html | Complete viewer HTML with Three.js inlined; panorama data injected at build time | |
scripts/build_viewer.py | Loads images, applies seam fix, base64-encodes, injects into template |
Workflow
Step 1 — Gather scene specs from the user
Ask (or infer from context) for each scene:
- Description of what the panorama should show
- Title for the HUD (emoji + name, e.g.
🍄 Mario World) - Thumbnail label (≤12 chars shown on the sidebar chip)
Typical count: 3–6 scenes. You can also accept user-provided image files directly (skip generation).
Step 2 — Generate panorama images
For each scene, generate a 360° equirectangular panorama image.
Model choice:
- Preferred:
google/gemini-3.1-flash-image-previewvia AI Gateway — reliable 2:1 output, no safety rejections for fictional themes - Alternative:
gpt-image-2via AI Gateway at size1536x1024— higher quality but may reject branded IP (Mario, Zelda, etc.)
Generation code (Gemini route):
Prompt formula for good equirectangular panoramas:
Example prompts:
- Mario:
360 degree equirectangular panorama of a colorful cartoon mushroom kingdom platformer world. Bright blue sky, rolling green hills, red mushroom houses, floating brick blocks, gold coins, stone castle. Vibrant cartoon illustration, 2:1 aspect ratio, seamless tiling. - Underwater city:
360 degree equirectangular panorama of a futuristic underwater city. Bioluminescent buildings, schools of fish, coral reefs, deep ocean light shafts. Cinematic, 2:1 aspect ratio, seamless tiling.
Save each generated image to a temp path (e.g. tmp/scene_N_raw.png).
Step 3 — Build the viewer
Run the build script, passing all scenes as a JSON array:
The script will:
- Resize each image to 1774×887 (standard 2:1)
- Apply a pure-roll seam fix — finds the horizontal offset that minimises left/right edge difference, then
np.rolls the image. No blending. This ensures the 360° seam is as clean as possible without distorting colors. - Base64-encode as JPEG quality 90
- Inject into the template and write the output HTML
Step 4 — Deliver
Output the file to outputs/360_viewer.html (or user-specified path) and attach it as a static HTML deliverable.
Replacing a single scene in an existing viewer
If the user already has a viewer and wants to swap out one scene (e.g. regenerate Mario), do NOT rerun all scenes — just re-encode the new image and replace its b64 field in the HTML:
Seam fix — why pure roll, not blending
Equirectangular panoramas wrap horizontally: x=0 and x=w-1 represent the same physical meridian. AI-generated images rarely place the seam at a natural boundary (e.g. open sky), so the default seam is often visible.
Pure roll: shift the whole image left/right to find the position where the 5-pixel columns at both edges are most similar (lowest mean absolute difference). np.roll() is a circular shift — no pixels are added or removed, no colors are changed. This is lossless and never creates artifacts.
Never use blending/color correction at the seam: it creates a visible "smeared" band where pixel values are artificially averaged, which looks worse than the original seam.
Viewer features reference
The template includes these controls, all functional out of the box:
- Drag — look around (mouse or touch)
- Scroll / pinch — zoom (FOV 30°–120°, default 75°)
- Auto Rotate button — gentle continuous pan
- Reset button — return to
initialLonof current scene - Fullscreen button
- FOV slider — right-side vertical range input
- Thumbnail sidebar — left-side scene switcher with active highlight
Scene initialLon is the starting horizontal angle (0–360). Use it to face an interesting part of the panorama on load (e.g. 90 = face right, 180 = face backwards).
Tips for better panoramas
- Ask for 2:1 aspect ratio explicitly in every prompt — this is the equirectangular standard
- Mention "seamless tiling" and "left and right edges must connect" in the prompt
- For fictional/branded themes (Mario, Zelda), describe the visual style without using trademarked names if GPT-Image-2 rejects them: "colorful cartoon platformer mushroom kingdom style" instead of "Mario"
- Gemini rarely rejects prompts and consistently produces good 2:1 panoramas — prefer it for speed
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/360-panorama-viewer/SKILL.md
Popularity
- Repository stars
- 137
- Repository forks
- 30
- 7-day trend score
- 25
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/happycapy-ai/happycapy-skills/360-panorama-viewer)