skills/visual-feedback/SKILL.md
Capture screenshots of the running Decentraland preview to verify scene changes visually. Covers camera movement, interaction actions, and visual debugging. Use when the preview is running and you need to check what the scene looks like, debug visual issues, or verify layout. Do NOT use for code changes (make changes first, then screenshot).
npx skillsauth add dcl-regenesislabs/opendcl visual-feedbackInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
The screenshot tool lets you capture what the Decentraland preview looks like right now. The browser stays open between calls — only the first screenshot takes ~15s (launch + enter scene). After that, screenshots are instant.
Prerequisites: The preview server must be running (/preview). The tool auto-detects the preview URL.
Do NOT use screenshots to explore or navigate the scene. Make all code changes first, then take 1-2 screenshots to verify.
Take a screenshot of the current view:
Use the screenshot tool with no actions to capture the current scene view.
The tool returns the image directly — you'll see it and can describe what's visible.
The scene camera always faces north in headless mode. Movement is relative to compass direction, not camera:
| Action | Direction | Key |
|--------|-----------|-----|
| moveForward | North (toward top of screen) | W |
| moveBack | South (toward bottom) | S |
| moveRight | East (toward right) | D |
| moveLeft | West (toward left) | A |
Movement speed is ~6 meters/second. Default holdMs is 300ms (~1.8 meters).
Use look actions to rotate the camera view (arrow key holds):
| Action | Effect |
|--------|--------|
| lookLeft | Rotate camera left |
| lookRight | Rotate camera right |
| lookUp | Tilt camera up |
| lookDown | Tilt camera down |
Default rotation hold is 300ms. Use holdMs for more or less rotation.
screenshot with actions:
1. click (x: 640, y: 400) — click center of viewport
→ captures the result (e.g., object selected, door opened)
Coordinates are in pixels (viewport is 1280×720).
screenshot with actions:
1. key (key: "1") — toggle editor camera
2. wait (ms: 500) — let camera settle
→ captures the overhead editor view
src/index.ts)wait: 2000 to let hot-reload settleKeep it to 1-2 screenshots per task. Each screenshot consumes significant tokens.
WARNING: If you see empty/gray space, "No scene", or no content — you've walked outside the scene boundaries. STOP moving. Keep movements small (holdMs: 300).
| Problem | Solution |
|---------|----------|
| Screenshot shows welcome screen | The scene hasn't loaded yet — increase wait time |
| Black/empty screenshot | Preview server may have crashed — check /tasks |
| Objects not visible | They may be behind the camera (south of avatar) — use moveBack or lookLeft/lookRight to find them |
| Scene looks different after code change | Hot reload takes ~1-2s — add a wait action of 2000ms |
| "No preview server running" | Start it with /preview first |
| Empty/gray space, no scene content | You've left the scene boundaries — stop moving |
| Z-fighting (flickering surfaces) | Two surfaces at the same position | Move one surface slightly (0.01m) away from the other |
| Missing textures (pink/magenta) | Texture file not found or wrong path | Verify file exists in project and path matches code |
| Objects appear wrong scale | Scale values off or model exported at wrong scale | Check Transform.scale values; 1,1,1 is original model size |
| Lighting looks flat | No LightSource components in scene | Add point or spot lights — see lighting-environment skill |
| Custom lights look too dim or invisible | Intensity value too low | Point/spot lights typically need intensity: 8000–32000 candela. Values below ~1000 are usually invisible |
When evaluating a screenshot, check these common issues:
holdMs: 300 (default) to avoid walking out of the scene.development
Cross-cutting runtime APIs for Decentraland SDK7 scenes. Use when the user needs async operations (executeTask), HTTP requests (fetch, signedFetch), WebSocket connections, timers, realm/scene detection, restricted actions (movePlayerTo, teleportTo, triggerEmote, openExternalUrl), portable experiences, or the testing framework. Do NOT use for UI (see build-ui), multiplayer sync (see multiplayer-sync), or avatar/player data (see player-avatar).
development
Apply physics forces to the player in Decentraland scenes. Impulses (one-shot pushes), knockback (push away from a point with falloff), continuous forces (wind tunnels, anti-gravity, lift, levitation, hover), timed forces, and repulsion fields. Use when the user wants launch pads, knockback on hit, wind zones, gravity fields, jumps, lifting/floating the player, pushing the player up/sideways/back, hover effects, or any scene-applied force on the player. THIS is also the right skill when an agent's first instinct is to mutate `Transform` on `engine.PlayerEntity` to move/lift/push the player — that does NOT work (the player Transform is engine-controlled and read-only); use the Physics API instead. Do NOT use for player movement speed (see player-avatar AvatarLocomotionSettings) or platform movement (see animations-tweens).
data-ai
Player and avatar system in Decentraland. Read player position/profile, customize appearance (AvatarBase), trigger emotes (triggerEmote/triggerSceneEmote), read equipped wearables (AvatarEquippedData), attach objects to players (AvatarAttach), create NPC avatars (AvatarShape), avatar modifier areas, and locomotion settings. Use when the user wants player data, emotes, wearables, NPC avatars, avatar attachments, or movement speed changes. Do NOT use for wallet/blockchain interactions (see nft-blockchain).
development
Emit particles (fire, smoke, sparks, snow, magic, fireworks) from an entity in a Decentraland SDK7 scene with the ParticleSystem component. Covers emitter shapes (Point, Sphere, Cone, Box), continuous rate vs Burst emission, lifetime/size/color/velocity ranges, gravity and additionalForce, blend modes (ALPHA/ADD/MULTIPLY), billboard and faceTravelDirection, sprite-sheet texture animation, simulation space (local vs world), playback state, and per-scene particle budget. Use when the user asks for particles, sparks, fire, smoke, dust, fog, fireworks, magic effects, snowfall, rain, embers, trails, or atmospheric effects. Do NOT use for procedural entity motion (see animations-tweens), GLTF model effects (see add-3d-models), or 2D UI effects (see build-ui).