Install
$ agentstack add skill-summerengine-summer-engine-agent-skybox-panorama ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
skybox-panorama — 360° Sky for WorldEnvironment
This skill generates a single equirectangular panoramic image (2:1 aspect, e.g. 2048×1024 or 4096×2048) suitable for Godot's PanoramaSkyMaterial. Wires it into a Sky resource on a WorldEnvironment node so the sky is visible from every camera angle in your 3D scene.
The single biggest failure mode is non-equirectangular output. Diffusion models default to flat 2D scenes; if you don't explicitly demand "equirectangular projection," the result looks fine in a thumbnail but distorts brutally when wrapped onto a sphere — horizon bows, zenith pinches, the sun stretches into a smear. This skill encodes the prompt suffix and the import discipline that produces a usable sky on the first or second try.
When to use
- "Generate a fantasy sky for the level."
- "I need a sci-fi nebula skybox."
- "Make a sunset panorama for the desert scene."
- "Stormy night sky for the haunted level."
- The 3D scene needs a visible sky (not just a flat color background).
When NOT to use
- The user wants a 2D parallax background → that's a separate
Sprite2Djob, not a panorama. - The user wants a HDRI for environment lighting (not just visual sky) → AI panoramas are LDR by default. For real IBL/HDR, use Polyhaven HDRIs (free CC0). Mention this to the user if lighting realism matters.
- The user wants a 3D-modeled sky-dome with geometry (clouds-as-meshes) → out of scope; use a
Spheremesh + custom shader. - The scene is 2D → no sky needed.
Steps
1. Search for an existing sky
summer_search_assets(query=" sky panorama", filter={ kind: "image" })
Polyhaven (polyhaven.com/hdris) hosts hundreds of free CC0 HDRIs that beat AI generation for realism and provide IBL data. For realistic exterior scenes, prefer Polyhaven; for stylized / fantasy / sci-fi, AI generation wins.
2. Build the prompt — sky description + equirectangular suffix
Pattern:
, 360 degree panoramic equirectangular projection, seamless horizontal wrap, no visible seam at left and right edges, distortion-correct for sphere mapping, no foreground objects, no ground horizon line, sky and clouds and atmosphere only
Load-bearing phrases:
360 degree panoramic equirectangular projection— primes the model for the right format.seamless horizontal wrap, no visible seam at left and right edges— the left and right edges of the image meet when wrapped. If they don't match, you see a vertical seam in the sky.no foreground objects, no ground horizon line— skies show only sky. If you include a horizon, it warps weirdly when sphere-mapped and kills the illusion that the sky is at infinite distance.distortion-correct for sphere mapping— reminds the model that the top/bottom of the image map to the zenith/nadir.
3. Generate at 2:1 aspect
summer_generate_image(
prompt="dramatic fantasy sky, golden hour, large purple-orange clouds, distant mountains silhouetted at very bottom, soft god-rays, 360 degree panoramic equirectangular projection, seamless horizontal wrap, no visible seam, no foreground objects, sky only",
model="nano-banana-2",
style="realistic",
options={
aspectRatio: "2:1",
image_size: "landscape_16_9",
negative_prompt: "vertical seam, ground objects, horizon-level details, distorted, warped, characters, buildings"
}
)
aspectRatio: "2:1" is critical. Equirectangular MUST be 2:1 (width = 2× height). If the model returns 16:9 or 4:3, the wrap will be wrong.
4. Verify the seam and projection
Before wiring, inspect:
- Left edge ↔ right edge: mentally place them side-by-side. They should match continuously. If there's a cloud cut in half on the left and a different cloud on the right, regenerate with stronger emphasis on
seamless horizontal wrap. - Top stretching: the top 10% of the image stretches enormously when mapped to the zenith. If there are tight features (a sun, a cloud edge) high up, they'll smear. Generations with diffuse, soft top regions wrap better than crisp ones.
- Bottom: same applies to the nadir. Most skies don't show much bottom anyway since the camera sits below the horizon — but avoid generating tight features at the very bottom.
If the image fails seam check, regenerate. Some models support seed for variation while keeping prompt — bump the seed.
5. Import to project
summer_import_from_url(url="", path="res://art/sky/fantasy_sunset.png")
In the import dock:
Repeat: Disabled(panoramas don't tile — they wrap once via the material).Filter: Linear with mipmaps(smoother as the camera turns).Mipmaps: Enabled.Compress: VRAM Compressedfor ship.
6. Wire into WorldEnvironment (3 lines)
summer_add_node(parentPath="/root/Game", type="WorldEnvironment", name="WorldEnvironment")
summer_set_resource_property(
nodePath="/root/Game/WorldEnvironment",
resourceProperty="environment:background_mode",
value=2 # BG_SKY
)
summer_set_resource_property(
nodePath="/root/Game/WorldEnvironment",
resourceProperty="environment:sky:sky_material",
value=""
)
Then, if the user wants the sky to also light the scene (image-based lighting):
summer_set_resource_property(
nodePath="/root/Game/WorldEnvironment",
resourceProperty="environment:ambient_light_source",
value=3 # AMBIENT_SOURCE_SKY
)
Note: AI-generated panoramas are LDR (8-bit per channel). For physically-correct IBL with bright suns, the lighting is muted compared to true HDRI. Mention this to the user if they expect strong IBL.
7. Verify in scene
summer_inspect_node(path="/root/Game/WorldEnvironment")
Then summer_play and look around. Sun in the right place? Seam invisible? Top/bottom okay?
Prompt patterns
| Goal | Prompt that works | Why | |---|---|---| | Fantasy sunset | dramatic fantasy sky at golden hour, large purple and orange clouds, soft god-rays, distant mountain silhouettes at very bottom only, 360 degree panoramic equirectangular projection, seamless horizontal wrap, no visible seam, no foreground, sky only | Soft top, distant horizon = clean wrap | | Sci-fi space nebula | vast space nebula, deep blue and magenta gas clouds, scattered bright stars, distant galaxy disc, 360 degree panoramic equirectangular projection, seamless horizontal wrap, no visible seam, no foreground objects, no ground | Space skies wrap easily; no horizon issues | | Stormy night | dark stormy night sky, heavy rolling clouds, distant lightning flashes, full moon partly obscured, 360 degree panoramic equirectangular, seamless wrap, no foreground | Diffuse cloud structure tolerates wrapping well | | Clear blue day | bright clear blue sky with scattered cumulus clouds, midday sun upper left, 360 degree panoramic equirectangular projection, seamless horizontal wrap, no visible seam, no ground | Tight sun feature warps; place sun off-center | | Alien planet sky | alien planet sky, two suns one large red one small white, swirling green-purple atmosphere, distant ringed planet at horizon, 360 panoramic equirectangular, seamless wrap, no foreground | Multi-sun setups wrap if features stay diffuse | | Underwater (caustic dome) | underwater scene seen from below, sun rays piercing water surface, deep blue gradient downward to black, 360 panoramic equirectangular, seamless wrap | Treat ocean surface as the "sky"; works for underwater levels | | Stylized painterly sky | Studio Ghibli painterly sky, soft cumulus clouds at sunset, warm pastel palette, 360 panoramic equirectangular, seamless wrap, no foreground (style: "none") | Style preset would fight painterly |
Bad prompts (and why)
| Bad | Failure mode | |---|---| | beautiful sky | No equirectangular suffix. Returns flat 16:9 photograph. Wrap looks broken. | | sky with mountains and trees and a castle | Foreground objects. Horizon-level details warp catastrophically when sphere-mapped. | | 360 sky (without 2:1 aspect) | Aspect mismatch. Wrap is misaligned. | | panoramic sky in 4k | "4k" implies 3840×2160 (16:9), not 2:1. Specify aspect. | | sky with the sun in the center top | Sun at zenith stretches into a smear. Place sun off-axis. |
Anti-patterns
- Including foreground or horizon. Mountains, trees, buildings at horizon level warp weirdly when sphere-mapped (the "swimming horizon" effect). Skies show ONLY sky. If the level needs distant mountains, model them as low-poly meshes in the scene, not in the sky texture.
- Not specifying 2:1 aspect. A 16:9 panorama wrapped equirectangular has obvious horizontal compression. Always
aspectRatio: "2:1". - Tight features at zenith/nadir. Anything in the top or bottom 10% of the image gets pinched. Bias toward soft, diffuse features there.
- Expecting HDR / IBL quality. AI panoramas are 8-bit. If the user needs realistic environment lighting from the sky, point them at Polyhaven HDRIs (CC0). AI is for visual sky, not for lighting.
- Forgetting
Repeat: Disabledon import. Panoramas wrap once via the material; ifRepeatis on, you can get duplicate-tile artifacts at the seam. - Visible vertical seam on the wrap. If left/right edges don't match, regenerate with seed bump or fix the seam in Photoshop/GIMP via the offset trick (offset by 50% horizontally → heal the new visible seam → offset back).
Edge cases
- Animated sky (clouds drift). AI gives one frame. Animate via shader (UV scroll on the panorama texture) or layer two panoramas with
ProceduralSkyMaterialfor the base + a transparent cloud layer. - Day/night cycle. Generate two panoramas (day + night). Cross-fade the
sky_materialvia shader blend or by swappingpanoramaover a tween. Two LDR panoramas + a blend = serviceable cycle. - First-person VR. AI panoramas at 2048×1024 are too low-res for VR (visible pixels). Generate at 4096×2048 if the model supports it; otherwise use Polyhaven HDRIs at 8K.
- Indoor scene. Skyboxes are wasted indoors — use
BG_COLORor a flat black background. Don't generate a sky for a windowless dungeon. - Visible vertical seam after generation. Fix in Photoshop/GIMP:
Filter → Other → Offsetby 50% horizontally → the seam moves to the center → heal with content-aware fill or clone stamp → offset back to 0. Or regenerate with seed bump andseamless horizontal wrap, no visible seam at left and right edgesrepeated twice in the prompt.
Fallback (no MCP)
Print the call:
summer_generate_image(
prompt=" 360 degree panoramic equirectangular projection, seamless horizontal wrap, no visible seam, no foreground objects, sky only",
model="nano-banana-2",
style="realistic",
options={ aspectRatio: "2:1", negative_prompt: "vertical seam, foreground, distorted, warped, characters, buildings" }
)
User runs via Summer dashboard, then summer_import_from_url to res://art/sky/.png, sets Repeat: Disabled, and wires the WorldEnvironment manually.
If MCP is offline entirely: Polyhaven (polyhaven.com/hdris) has hundreds of free CC0 HDRIs ready to drop into PanoramaSkyMaterial. Often a better choice than AI for realistic exteriors anyway.
Handoff
After the sky is wired:
- Add atmospheric fog matching the sky's mood →
summer:scene-composition(fog is on the same Environment resource). - Add a directional
DirectionalLight3Dmatching the sun position in the panorama →summer:3d-lightingfor sun + shadows. - Day/night cycle → re-invoke this skill for the night sky, then write a small tween between the two
panoramaproperties. - Tileable ground texture for the level floor →
summer:2d-assets/tileable-texture.
See also
summer:3d-lighting— sun, ambient, fog wired alongside the sky.summer:2d-assets/tileable-texture— ground/floor counterpart.summer:scene-composition— WorldEnvironment placement and configuration.summer:asset-pipeline/asset-strategy— meta-router.references/mcp-tools-reference.md—summer_generate_imageschema.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: SummerEngine
- Source: SummerEngine/summer-engine-agent
- License: MIT
- Homepage: https://summerengine.com/
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.