Agent skill

Renderer

by dzhng in dzhng/skills

Architecture rules for GPU rendering with TypeGPU/WebGPU — games, data visualisation, canvases, any app that draws with the GPU.

MITAuto-check passedGame Development

Install Renderer

skills CLI
$ npx skills add dzhng/skills --skill renderer -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install dzhng/skills renderer --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/dzhng/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/graphics/renderer .claude/skills/renderer && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
renderer
GitHub stars
1k
Token cost
~2.7k tokens
SKILL.md length
1,524 words
Files
1
Skills in repo
27
Repo updated
First seen
Licence
MIT

At a glance

Architecture rules for GPU rendering with TypeGPU/WebGPU — games, data visualisation, canvases, any app that draws with the GPU.

  • Changing passes
  • SKILL.md covers Architecture, Resources, Depth, blending and targets and TypeGPU and WebGPU gotchas, plus 6 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md
  • Frame orchestration

What it does

Renderer is an agent skill from dzhng/skills. Architecture rules for GPU rendering with TypeGPU/WebGPU — games, data visualisation, canvases, any app that draws with the GPU. Use when adding or changing passes, shaders, buffers, textures, pipelines, frame orchestration, GPU resource lifetimes, or checks that judge rendered output.

Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Game Development, covering Data visualization and Shaders. It works with Blender. The repository describes itself as: Reusable AI agent skills for software factories: explore ideas, write specs, implement, review, and run autonomous research. Works with Claude Code, Codex, and other… The licence is MIT.

When your agent uses it

  • Changing passes
  • Frame orchestration
  • GPU resource lifetimes
  • Checks that judge rendered output

Example prompts

  • “/renderer”

Requirements

  • Python 3

What it can do on your machine

Read from SKILL.md and the folder at commit d513228. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Renderer loads about 2.7k tokens when it runs. Until then it costs about 74 tokens; SKILL.md has 1,524 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~74
When it runs · the whole SKILL.md, loaded when a task matches
~2.7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from dzhng/skills at commit d513228, republished under its MIT licence (© dzhng). 1,524 words, ~2,652 tokens.

Download SKILL.mdSave it as .claude/skills/renderer/SKILL.md (or your agent's skills folder).
name
renderer
description
Architecture rules for GPU rendering with TypeGPU/WebGPU — games, data visualisation, canvases, any app that draws with the GPU. Use when adding or changing passes, shaders, buffers, textures, pipelines, frame orchestration, GPU resource lifetimes, or checks that judge rendered output.

GPU renderer

The stack is TypeGPU on WebGPU: typed schemas, bind group layouts and pipelines, with WGSL where it's clearer. Don't add a second rendering library.

For 3D models and textures, use Blender if it's available. Prefer a Blender MCP server when one is installed; otherwise run headless (blender -b --python script.py). Keep the scripts in the repo, so every asset is reproducible from code rather than hand-edited.

Architecture

  • The renderer draws what it's handed. The app builds plain frame inputs from its own state (a game observation, a query result, a document), and the renderer consumes them through one interface. It never reaches into app or domain state.
  • One frame function orchestrates. A single function encodes every pass in order. Read it before adding anything, and add your pass there, not beside it.
  • Pick the phase by semantics:
    • compute for preparation (culling, layout, instance building);
    • a depth prepass for opaque geometry, then the lit colour pass;
    • translucent content after the opaque;
    • screen-space passes on resolved targets;
    • overlays and UI last.
  • One owner per concept: device and capabilities, camera and projection, the depth convention, frame targets, the resource registry, the time source. A second copy (a private projection, or a struct hand-mirrored in WGSL) is a bug waiting to happen. Refactor to the shared owner.
  • Tunable numbers live in data (config or fixtures), validated where they're loaded. Don't scatter them as constants in passes.
  • Update each resource at its own frequency: every frame, on view change, on data change (upload deltas only), or once. Allocate nothing per frame on hot paths.
  • Do CPU-side math with the pmndrs math package (npm math, whose API.md lists every export): vectors, matrices, quaternions, frustum and shape culling, noise, seeded randomness.
    • Its functions take the output as their first argument and return it, so preallocated scratch keeps hot paths allocation-free.
    • Pack its results into preallocated Float32Arrays for upload.
    • Don't hand-roll a second vector or matrix library.
  • Picking and hit tests use the app's own shapes and the same camera function the GPU packing uses, never a readback of drawn pixels.

Resources

  • Every buffer and texture goes through one registry, with scopes for size-dependent targets and slots for replaceable resources. Nothing is allocated outside it: in TypeGPU, root.destroy() does not free what the root created.
  • Handle async rebuilds (resize, pipeline swaps). Build into a new scope and swap it in whole. Free a build that's overtaken or finishes after dispose. Make every public call safe after dispose.
  • Serialize the whole replacement transaction when upload and derived-resource baking share mutable GPU buffers. Serializing upload alone still lets an older readback install stale results; retain caller errors without poisoning later requests.
  • Add a test that counts and bytes return to baseline after resize, rebuild and repeated reset.

Depth, blending and targets

  • Depth is an access contract (read, read-write, prepassed), and the convention is engine-wide. Prefer reverse-Z on depth32float (clear 0, compare greater). Compare direction, clear value and format change together or not at all.

  • Opaque geometry never alpha-blends. Translucent passes read depth and never write it.

  • A line drawn in pieces joins by construction. Additive pieces overlap and fade over the overlap, so the joins sum to one; blended pieces are cut square, since two over-composited fades never sum to one. Blended layers of one thing draw in layer order, not in the order their pieces were made.

  • Dynamic light is data every material reads through one shading function. Effects offer a bounded per-frame list of short-lived point lights; the shared shade call sums them for every lit layer. A glow sprite brightens air, never the surfaces round it, and a per-layer lighting hack drifts from the others.

  • Overlays and UI are composited after post-processing, unlit and ungraded. Anything that belongs in the world is drawn in the world.

  • The depth prepass and the colour pass share one vertex stage with an @invariant position, so their depth matches bit for bit.

  • Use 4× MSAA (the count WebGPU guarantees). Interpolate at the centroid any varying that a later screen-space test depends on.

  • Composite each annotation as one group. Its backing paints below its foreground strokes; selection priority moves the whole group. Fix occlusion through paint order, not by erasing intended backing coverage. Bound effect tails separately from stacking.

  • Bound final rendered geometry, including every independent multiplier and drawn LOD. Give shader variation bounds, CPU validation and culling one owner. View-dependent width expansion must not silently expand height; source dimensions alone cannot prove a final size cap.

TypeGPU and WebGPU gotchas

  • Use one TypeGPU module instance in GPU probes. Mixing a bundler-optimized import with a direct package URL (or a different cache query) duplicates internal symbols: imported shader functions can silently disappear from resolution and WGSL reports an unresolved call. Match the pass's actual module URL before changing shader code.
  • Pin only the shared camera bind group ($idx(0)). TypeGPU numbers the rest.
  • A pipeline with no fragment stage is valid. Use it for depth-only passes rather than writing frag_depth, which disables early-Z.
  • WGSL let is immutable. Reassigning one invalidates the pipeline while the app looks healthy.
  • WGSL reserves words it doesn't use yet (cast, meta, …); an identifier named after one fails the module at parse time.
  • Pad uniform structs to 16 B. Keep a byte-size constant beside each schema and test the packer against it.
  • Default bind limits are small (8 storage buffers per stage). Count before adding one.
  • Apple GPUs:
    • A tile a pass drew nothing into skips its resolve, so a loaded target can show an old frame there. Make the background pass resolve too.
    • Timestamp queries are only meaningful as a whole-frame total.
  • Keep matrices float32 on the CPU as well, so CPU picking and GPU drawing agree exactly.
  • Treat any validation warning or console error as a failed render.
Show full SKILL.md (561 more words)Show less

Verification

  • Use one injectable clock for animation. Never use performance.now(), Date or unseeded randomness inside a pass. A held clock gives deterministic captures.
  • Test packing and CPU mirrors of shader math in unit tests. Then render the narrowest real scene in a browser running on the real GPU (not a software fallback), and look at the image.
  • Stats aren't pixels. Pair counts with a pixel or crop check that proves the subject was drawn and framed. Match a streak to its published endpoint, not colour alone when classes share a style. Follow fast motion for consecutive-frame crops so leaving a static camera does not masquerade as fading.
  • Derive checks from contracts, not copied constants. Change a pixel threshold only with a written reason.
  • Measure GPU cost with the feature toggled on and off, interleaved on one machine, not as two separate runs. Other load on the machine swamps small differences.

Width changes at tactical zoom

When a world-space width change barely moves the screenshot, trace the full width path through screen-space minimums, core/glow layers and postprocessing before tuning again. Compare native tactical and close views with the same camera and event. For moving subpixel features, inspect consecutive frames in the crowded gameplay view as well as isolated crops; a thin still can conceal flicker or disappear against terrain.

Repeating motion needs a full cycle

For cadence or synchronization claims, capture startup and multiple complete work/rest cycles, including their longest pauses. Pair native motion frames with source-event timestamps per actor; overlapping visible trails do not prove simultaneous launches, and a short staggered opening does not prove sustained independence. Test random timing across several seeds and report measured gaps rather than promising uninterrupted activity.

Native generation identity owns overlapping scenery

Spatial membership cannot identify which authored forest generated a trunk. Overlapping shapes can duplicate trees or assign another source's canopy. Export immutable original source associations from native generation, retain lossless prop IDs in the consumer, and place each source trunk once. Exact rectangle export ordinal also needs an explicit authored-ID mapping when other shapes are interleaved. Prove this through public exports and production placement, including empty sources and ordinary props outside the generated ranges.

Membership, numeric sampling and rendered acceptance are separate claims. Preserve the first failed production readback and its compiled source; a matching membership flag does not resolve a failed distance oracle. At a stopping point, preserve an unactivated candidate and restore the runtime baseline instead of widening its bar.

Resource checks need consistent view history

A paused fast-forward can finish delivering data before the UI draws that publication. Await its drawn tick and presentation clock before moving the camera. Otherwise a retained buffer may see an extra detail tier on one reset and look like a leak. Attribute differences with actual allocation creation/destruction records before changing capacity policy or weakening byte assertions.

Corpse identity does not freeze its anchor

A falling or resting body's authority can change its support after a building collapses. Refresh the published position for the same corpse identity without restarting its death clip, changing its facing, or making a faded corpse return. A static anchor change must invalidate the corpse publication version; moving only the cached object leaves GPU instances at the old height. Enemy anchors come from the side's last observed corpse state, so rendering cannot infer an unseen collapse from the current physical world.

© dzhng, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/graphics/renderer of dzhng/skills.

Open the folder on GitHubat commit d513228

Compare with similar skills

Renderer next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Renderer compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Renderer this skilldzhng/skills1k—~2.7kAutomated safety check: PassMIT
Materialsarjun988/blender-skills275—~955Automated safety check: PassMIT
Scenario Zbrush Automationscenario-labs/skills913—~4.7kAutomated safety check: PassMIT
Scenario Blender Sculptingscenario-labs/skills913—~5.2kAutomated safety check: PassMIT
Globe Glnirholas/three.ws2271 repos~410Automated safety check: PassApache-2.0
MatplotlibzLanqing/codex-claude-academic-skills4.6k18 repos~2.9kAutomated safety check: PassMIT

Similar skills

  • Materials

    arjun988/blender-skills

    Blender PBR and stylized material creation for metal, wood, concrete, fabric, glass, dirt, rust, and procedural shaders.

    275 GitHub stars~955 tokensUpdated 2 mo ago
    Game DevelopmentAuto-check passed
  • Scenario Zbrush Automation

    scenario-labs/skills

    A skill your agent uses when automating ZBrush 2026: batch processing a folder of OBJ or ZTL files, a ZBrush Python script or ZScript, recording a macro to learn a palette path, the ZBrush -script…

    913 GitHub stars~4.7k tokensUpdated yesterday
    Data & AnalyticsAuto-check passed
  • Scenario Blender Sculpting

    scenario-labs/skills

    A skill your agent uses when sculpting in Blender through Python: sculpt a head, face or bust, a stylized or cartoon character, a creature or a realistic portrait; block out from primitives; cut…

    913 GitHub stars~5.2k tokensUpdated yesterday
    Data & AnalyticsAuto-check passed
  • Globe Gl

    nirholas/three.ws

    A skill your agent uses when implementing globe.gl (Globe.GL) for 3D globe data visualization with WebGL/ThreeJS, including setup, data layers (points, arcs, polygons, labels), and integration…

    227 GitHub starsUsed in 1 repo~410 tokens
    Game DevelopmentAuto-check passed
  • Matplotlib

    zLanqing/codex-claude-academic-skills

    Low-level plotting library for full customization. An agent skill from zLanqing/codex-claude-academic-skills.

    4.6k GitHub starsUsed in 18 repos~2.9k tokens
    Data & AnalyticsAuto-check passed
  • Chart Visualization

    bytedance/deer-flow

    Picks a suitable chart type from 26 options for your data, maps the data to that chart's parameters and generates a chart image through a JavaScript script.

    83k GitHub starsUsed in 2 repos~840 tokens
    Data & AnalyticsAuto-check passed

More from dzhng/skills

All 27 skills in this repo
  • Compare screenshots against the intended design, distinguishing approved references from historical baselines.

    1k GitHub stars~2.6k tokensUpdated 2 days ago
    Auto-check passed
  • Claude

    dzhng/skills

    Use Claude Code as an independent claude -p subagent when the user explicitly asks for Claude, wants a second-agent opinion from Claude, or asks to delegate a well-scoped task to Claude.

    1k GitHub stars~1.3k tokensUpdated 2 days ago
    Auto-check passed
  • Refactor Clean

    dzhng/skills

    Refactor cleanly instead of layering sediment. An agent skill from dzhng/skills.

    1k GitHub stars~3.1k tokensUpdated 2 days ago
    Auto-check passed
  • Write Skills

    dzhng/skills

    Create or revise agent skills. An agent skill from dzhng/skills.

    1k GitHub stars~2.7k tokensUpdated 2 days ago
    Auto-check passed
  • Codex

    dzhng/skills

    Use the local Codex CLI as an independent second agent. An agent skill from dzhng/skills.

    1k GitHub stars~2.4k tokensUpdated 2 days ago
    Auto-check: warnings
  • Run [implement-spec](../implement-spec/SKILL.md) with Codex doing the implementation passes while you orchestrate, integrate, and review.

    1k GitHub starsUsed in 1 repo~543 tokens
    Auto-check passed

Works with

Questions about Renderer

What does Renderer do?

Architecture rules for GPU rendering with TypeGPU/WebGPU — games, data visualisation, canvases, any app that draws with the GPU. Renderer is an agent skill from dzhng/skills. Architecture rules for GPU rendering with TypeGPU/WebGPU — games, data visualisation, canvases, any app that draws with the GPU.

When should I use Renderer?

Renderer fits situations like: changing passes; frame orchestration; GPU resource lifetimes; checks that judge rendered output.

How do I install Renderer in Claude Code?

Run `npx skills add dzhng/skills --skill renderer -a claude-code`. Or copy the skill folder (skills/graphics/renderer in dzhng/skills) into .claude/skills/renderer in your project. Claude Code loads it when a task matches its description.

How do I install Renderer in Codex?

Run `npx skills add dzhng/skills --skill renderer -a codex`. Or copy the skill folder (skills/graphics/renderer in dzhng/skills) into .agents/skills/renderer in your project. Codex loads it when a task matches its description.

Can I use Renderer in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add dzhng/skills --skill renderer -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/renderer, .gemini/skills/renderer, .github/skills/renderer and .opencode/skills/renderer in your project.

What does Renderer need to run?

SKILL.md names no scripts, command-line tools or credentials: Renderer is instructions for the agent only. Our summary lists: Python 3.

Does Renderer access the network?

SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.

Is Renderer safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Renderer use?

Renderer is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Renderer use?

About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Renderer?

Skills that share tags, products or a category with Renderer: Materials (arjun988/blender-skills, 275 stars), Scenario Zbrush Automation (scenario-labs/skills, 913 stars), Scenario Blender Sculpting (scenario-labs/skills, 913 stars) and Globe Gl (nirholas/three.ws, 227 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Renderer?

dzhng (a GitHub user) maintains it in dzhng/skills, which has 1,016 GitHub stars. The repository holds 27 skills in this directory. The repository was last updated on October 5, 2026.

Source: dzhng/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.