Not in the top 1,000 by GitHub stars

AirsupHQ/factory-skill

Describe a factory in one line. Claude builds it as a live 3D simulation you can run. Open source agent skill: real discrete event simulation, tilt-shift miniature.

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

SKILL.md

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 9fde7554e6a3

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 9fde7554e6a30e77ea1008dec08f2ba8d8d37f27

45GitHub stars
16stars in 7 days
1skill in this repository
5commits in 30 days

Heat

5.3
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Oct 25, 2026Nov 4, 202645

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

factory

When your agent uses it

Turn a one line description of a factory ("a line that makes 2,000 e-bike motors a day", "a bakery that bakes 10,000 croissants an hour", "a battery cell gigafactory") into a single self-contained HTML page with a live 3D tilt-shift miniature of that factory, driven by a real discrete event simulation (stations, cycle times, batches, finite buffers, shifts, breakdowns, scrap) with a live HUD for throughput against target, takt, utilization, WIP, lead time and the bottleneck, where clicking a station lets you add a machine or change a cycle time and watch the bottleneck move. Use it whenever someone wants to see, size, explain or pitch a production line, plant, assembly line, process or factory, asks "how many machines do I need", "where is the bottleneck", "can this line make N a day", wants a factory simulation or digital twin demo, or describes a product and a volume, even if they never say "simulation".

What it loads into context

Frontmatter

218 tokens

Always available to the agent

SKILL.md

3,790 tokens

When the skill is activated

Reference documents

6,405 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. The one rule that matters
  2. Workflow
  3. Spec
  4. Kit
  5. The page
  6. Look
  7. Verify like a critic
  8. Files

Scripts executed separately

  • examples/battery-gigafactory/spec.js
  • examples/brewery-canning/spec.js
  • examples/croissant-bakery/spec.js
  • examples/drone-line/spec.js
  • examples/ebike-motors/spec.js
  • examples/satellite-factory/spec.js
  • runtime/app.js
  • runtime/des.js
  • runtime/kit.js
  • runtime/look.js
  • runtime/world.js
  • scripts/build.mjs
  • scripts/capture.mjs
  • scripts/check.mjs
  • scripts/lib.mjs
  • scripts/record.mjs
  • vendor/three.bundle.js

Files

  • .gitattributesasset76 bytes
  • .github/REPO.mddoc643 bytes
  • .github/assets/battery-gigafactory.jpgasset108,424 bytes
  • .github/assets/brewery-canning.jpgasset102,778 bytes
  • .github/assets/croissant-bakery.jpgasset111,641 bytes
  • .github/assets/drone-line.jpgasset113,248 bytes
  • .github/assets/ebike-motors.jpgasset111,092 bytes
  • .github/assets/hero.gifasset6,292,893 bytes
  • .github/assets/satellite-factory.jpgasset106,015 bytes
  • .github/assets/social.jpgasset113,449 bytes
  • .gitignoreasset65 bytes
  • CHANGELOG.mddoc268 bytes
  • CONTRIBUTING.mddoc787 bytes
  • LAUNCH.mddoc2,038 bytes
  • LICENSEasset1,228 bytes
  • README.mddoc9,080 bytes
  • SKILL.mdcore13,945 bytes
  • evals/evals.jsonasset1,506 bytes
  • examples/battery-gigafactory/battery-gigafactory.htmlasset1,060,718 bytes
  • examples/battery-gigafactory/spec.jsruns2,746 bytes
  • examples/brewery-canning/brewery-canning.htmlasset1,060,122 bytes
  • examples/brewery-canning/spec.jsruns2,142 bytes
  • examples/croissant-bakery/croissant-bakery.htmlasset1,060,604 bytes
  • examples/croissant-bakery/spec.jsruns2,629 bytes
  • examples/drone-line/drone-line.htmlasset1,060,210 bytes
  • examples/drone-line/spec.jsruns2,253 bytes
  • examples/ebike-motors/ebike-motors.htmlasset1,061,002 bytes
  • examples/ebike-motors/spec.jsruns3,019 bytes
  • examples/satellite-factory/satellite-factory.htmlasset1,060,072 bytes
  • examples/satellite-factory/spec.jsruns2,100 bytes
  • references/des.mddoc2,441 bytes
  • references/kit.mddoc2,726 bytes
  • references/look.mddoc2,119 bytes
  • references/process.mddoc3,204 bytes
  • runtime/app.jsruns20,089 bytes
  • runtime/des.jsruns20,931 bytes
  • runtime/hud.cssasset10,141 bytes
  • runtime/kit.jsruns79,939 bytes
  • runtime/look.jsruns8,192 bytes
  • runtime/world.jsruns47,683 bytes
  • scripts/build.mjsruns2,237 bytes
  • scripts/capture.mjsruns2,321 bytes
  • scripts/check.mjsruns2,957 bytes
  • scripts/lib.mjsruns776 bytes
  • scripts/record.mjsruns3,735 bytes
  • vendor/LICENSE-three.txtdoc1,081 bytes
  • vendor/three.bundle.jsruns870,440 bytes

No excerpt is shown for this license. Read the source on GitHub.

View the complete source on GitHub

Skills included

  • factory

Repository facts

License
No license detected
Created
Oct 12, 2026
Last pushed
Oct 12, 2026
Forks
9
Open issues
0
Project activity
Active

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 4, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 205 notes
  • examples/battery-gigafactory/battery-gigafactory.html:1 Analysis incomplete: file exceeds text byte budget
  • examples/battery-gigafactory/battery-gigafactory.html:122 Analysis incomplete: physical or joined line exceeds character limit
  • examples/battery-gigafactory/battery-gigafactory.html:120 Analysis incomplete: physical or joined line exceeds character limit
  • examples/battery-gigafactory/battery-gigafactory.html:121 Analysis incomplete: physical or joined line exceeds character limit
  • examples/battery-gigafactory/battery-gigafactory.html:126 Analysis incomplete: physical or joined line exceeds character limit
  • examples/battery-gigafactory/battery-gigafactory.html:124 Analysis incomplete: physical or joined line exceeds character limit
  • examples/battery-gigafactory/battery-gigafactory.html:125 Analysis incomplete: physical or joined line exceeds character limit
  • examples/battery-gigafactory/battery-gigafactory.html:3792 Analysis incomplete: physical or joined line exceeds character limit
  • examples/battery-gigafactory/battery-gigafactory.html:3790 Analysis incomplete: physical or joined line exceeds character limit
  • examples/battery-gigafactory/battery-gigafactory.html:4081 Analysis incomplete: physical or joined line exceeds character limit
  • examples/battery-gigafactory/battery-gigafactory.html:4080 Analysis incomplete: physical or joined line exceeds character limit
  • examples/battery-gigafactory/battery-gigafactory.html:4127 Analysis incomplete: physical or joined line exceeds character limit
  • examples/battery-gigafactory/battery-gigafactory.html:4125 Analysis incomplete: physical or joined line exceeds character limit
  • examples/battery-gigafactory/battery-gigafactory.html:4126 Analysis incomplete: physical or joined line exceeds character limit
  • examples/battery-gigafactory/battery-gigafactory.html:4162 Analysis incomplete: physical or joined line exceeds character limit
  • examples/battery-gigafactory/battery-gigafactory.html:4160 Analysis incomplete: physical or joined line exceeds character limit
  • examples/battery-gigafactory/battery-gigafactory.html:4161 Analysis incomplete: physical or joined line exceeds character limit
  • examples/battery-gigafactory/battery-gigafactory.html:4178 Analysis incomplete: physical or joined line exceeds character limit
  • examples/battery-gigafactory/battery-gigafactory.html:4176 Analysis incomplete: physical or joined line exceeds character limit
  • examples/battery-gigafactory/battery-gigafactory.html:4177 Analysis incomplete: physical or joined line exceeds character limit
Show all 100 signals by file

.github/REPO.md

  • Network accessline 8
    **Website:** https://www.airsup.ai/lab/factory-skill

LAUNCH.md

  • Network accessline 18
    cd "~/Documents/Airsup Main/factory-skill" git remote add origin https://github.com/AirsupHQ/factory-skill.git
  • Network accessline 19
    git remote add origin https://github.com/AirsupHQ/factory-skill.git
  • Network accessline 26
    - `npx skills add AirsupHQ/factory-skill -g -a claude-code` installs it (needs Node 22.20 or later for   the skills CLI); then `/factory a bakery that bakes 10,000 croissants an hour` in Claude Code. - `git clone https://github.com/AirsupHQ
  • Network accessline 27
    the skills CLI); then `/factory a bakery that bakes 10,000 croissants an hour` in Claude Code. - `git clone https://github.com/AirsupHQ/factory-skill.git ~/.claude/skills/factory` works too. - Open `examples/ebike-motors/ebike-motors.html` 
  • Network accessline 28
    - `git clone https://github.com/AirsupHQ/factory-skill.git ~/.claude/skills/factory` works too.
  • Network accessline 33
    Settings, Pages, Deploy from branch `main`, folder `/ (root)`. The examples are then live at `https://pytro001.github.io/factory-skill/examples/ebike-motors/ebike-motors.html`. Not needed: the
  • Network accessline 34
    `https://pytro001.github.io/factory-skill/examples/ebike-motors/ebike-motors.html`. Not needed: the

README.md

  • Network accessline 5
    <p align="center">   <a href="https://code.claude.com/docs/en/skills"><img src="https://img.shields.io/badge/Claude_Code-skill-24262a?style=flat-square" alt="Claude Code skill"></a>
  • Network accessline 6
    <a href="https://code.claude.com/docs/en/skills"><img src="https://img.shields.io/badge/Claude_Code-skill-24262a?style=flat-square" alt="Claude Code skill"></a>
  • Network accessline 7
    <a href="https://agentskills.io"><img src="https://img.shields.io/badge/Agent_Skills-compatible-24262a?style=flat-square" alt="Agent Skills compatible"></a>
  • Network accessline 8
    <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-24262a?style=flat-square" alt="MIT license"></a>
  • Network accessline 9
    <a href="#requirements"><img src="https://img.shields.io/badge/dependencies-0-24262a?style=flat-square" alt="No dependencies"></a>
  • Network accessline 10
    <a href="https://www.airsup.ai/lab/factory-skill"><img src="https://img.shields.io/badge/gallery-airsup.ai%2Flab%2Ffactory--skill-e2713a?style=flat-square" alt="Gallery"></a>
  • Network accessline 74
    All six were made by Claude with this skill, from the prompts above. Open any `examples/*/*.html` in a browser, or try them at [airsup.ai/lab/factory-skill](https://www.airsup.ai/lab/factory-skill).
  • Network accessline 76
    [airsup.ai/lab/factory-skill](https://www.airsup.ai/lab/factory-skill).
  • Network accessline 84
    | skills CLI, for you | `npx skills add AirsupHQ/factory-skill -g -a claude-code` | | skills CLI, one project | `npx skills add AirsupHQ/factory-skill` | | git, for you | `git clone https://github.com/AirsupHQ/factory-skill.git ~/.claude/sk
  • Network accessline 85
    | skills CLI, one project | `npx skills add AirsupHQ/factory-skill` | | git, for you | `git clone https://github.com/AirsupHQ/factory-skill.git ~/.claude/skills/factory` | | git, one project | `git clone https://github.com/AirsupHQ/factory-
  • Network accessline 86
    | git, for you | `git clone https://github.com/AirsupHQ/factory-skill.git ~/.claude/skills/factory` |
  • Network accessline 87
    | git, one project | `git clone https://github.com/AirsupHQ/factory-skill.git .claude/skills/factory` |
  • Network accessline 94
    Factory follows the [Agent Skills](https://agentskills.io) format: a folder with a `SKILL.md` at its
  • Network accessline 164
    Made by [airsup](https://www.airsup.ai), manufacturing simulation for hardware teams. Inspired by
  • Network accessline 165
    [Anatomy](https://github.com/wheresryan22/anatomy), the skill that brings machines to life as

examples/battery-gigafactory/battery-gigafactory.html

  • Network accessline 120
    </head> <body> <script>(function(){var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},r={ROT
  • Network accessline 121
    <body> <script>(function(){var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},r={ROTATE:0,PA
  • Network accessline 122
    <script>(function(){var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},r={ROTATE:0,PAN:1,DOL
  • Network accessline 3823
    // GGX VNDF importance sampling (Eric Heitz 2018) 			// "Sampling the GGX Distribution of Visible Normals" 			// https://jcgt.org/published/0007/04/01/
  • Network accessline 3824
    // "Sampling the GGX Distribution of Visible Normals" 			// https://jcgt.org/published/0007/04/01/ 			vec3 importanceSampleGGX_VNDF(vec2 Xi, vec3 V, float roughness) {
  • Network accessline 3825
    // https://jcgt.org/published/0007/04/01/

examples/battery-gigafactory/spec.js

  • Executable scriptline 1
    Executable file

examples/brewery-canning/brewery-canning.html

  • Network accessline 120
    </head> <body> <script>(function(){var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},r={ROT
  • Network accessline 121
    <body> <script>(function(){var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},r={ROTATE:0,PA
  • Network accessline 122
    <script>(function(){var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},r={ROTATE:0,PAN:1,DOL
  • Network accessline 3823
    // GGX VNDF importance sampling (Eric Heitz 2018) 			// "Sampling the GGX Distribution of Visible Normals" 			// https://jcgt.org/published/0007/04/01/
  • Network accessline 3824
    // "Sampling the GGX Distribution of Visible Normals" 			// https://jcgt.org/published/0007/04/01/ 			vec3 importanceSampleGGX_VNDF(vec2 Xi, vec3 V, float roughness) {
  • Network accessline 3825
    // https://jcgt.org/published/0007/04/01/

examples/brewery-canning/spec.js

  • Executable scriptline 1
    Executable file

examples/croissant-bakery/croissant-bakery.html

  • Network accessline 120
    </head> <body> <script>(function(){var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},r={ROT
  • Network accessline 121
    <body> <script>(function(){var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},r={ROTATE:0,PA
  • Network accessline 122
    <script>(function(){var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},r={ROTATE:0,PAN:1,DOL
  • Network accessline 3823
    // GGX VNDF importance sampling (Eric Heitz 2018) 			// "Sampling the GGX Distribution of Visible Normals" 			// https://jcgt.org/published/0007/04/01/
  • Network accessline 3824
    // "Sampling the GGX Distribution of Visible Normals" 			// https://jcgt.org/published/0007/04/01/ 			vec3 importanceSampleGGX_VNDF(vec2 Xi, vec3 V, float roughness) {
  • Network accessline 3825
    // https://jcgt.org/published/0007/04/01/

examples/croissant-bakery/spec.js

  • Executable scriptline 1
    Executable file
  • Network accessline 15
    { id: 'mix', name: 'Spiral dough mixers', machine: 'mixer', ct: 660, cv: 0.05, batch: 24, buffer: 60, mtbf: 20 * 3600, mttr: 20 * 60, stage: 'dough', input: 'flour', note: '60 kg dough per batch: 6 min mix, 5 min load and tip' },     { id: 
  • Network accessline 16
    { id: 'laminate', name: 'Laminator', machine: 'rollers', variant: 'laminator', ct: 11.5, cv: 0.03, buffer: 30, mtbf: 8 * 3600, mttr: 15 * 60, stage: 'sheet', length: 6, web: '#f1dfae', note: 'butter sheet folded in, 27 layers' },     { id: 
  • Network accessline 17
    { id: 'makeup', name: 'Cut + curl make-up line', machine: 'rollers', variant: 'slitter', ct: 11, cv: 0.04, buffer: 12, mtbf: 6 * 3600, mttr: 12 * 60, stage: 'raw', length: 5, web: '#f1dfae', note: 'triangles cut and curled, 40 per tray' },

examples/drone-line/drone-line.html

  • Network accessline 120
    </head> <body> <script>(function(){var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},r={ROT
  • Network accessline 121
    <body> <script>(function(){var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},r={ROTATE:0,PA
  • Network accessline 122
    <script>(function(){var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},r={ROTATE:0,PAN:1,DOL
  • Network accessline 3823
    // GGX VNDF importance sampling (Eric Heitz 2018) 			// "Sampling the GGX Distribution of Visible Normals" 			// https://jcgt.org/published/0007/04/01/
  • Network accessline 3824
    // "Sampling the GGX Distribution of Visible Normals" 			// https://jcgt.org/published/0007/04/01/ 			vec3 importanceSampleGGX_VNDF(vec2 Xi, vec3 V, float roughness) {
  • Network accessline 3825
    // https://jcgt.org/published/0007/04/01/

examples/drone-line/spec.js

  • Executable scriptline 1
    Executable file

examples/ebike-motors/ebike-motors.html

  • Network accessline 120
    </head> <body> <script>(function(){var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},r={ROT
  • Network accessline 121
    <body> <script>(function(){var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},r={ROTATE:0,PA
  • Network accessline 122
    <script>(function(){var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},r={ROTATE:0,PAN:1,DOL
  • Network accessline 3823
    // GGX VNDF importance sampling (Eric Heitz 2018) 			// "Sampling the GGX Distribution of Visible Normals" 			// https://jcgt.org/published/0007/04/01/
  • Network accessline 3824
    // "Sampling the GGX Distribution of Visible Normals" 			// https://jcgt.org/published/0007/04/01/ 			vec3 importanceSampleGGX_VNDF(vec2 Xi, vec3 V, float roughness) {
  • Network accessline 3825
    // https://jcgt.org/published/0007/04/01/

examples/ebike-motors/spec.js

  • Executable scriptline 1
    Executable file

examples/satellite-factory/satellite-factory.html

  • Network accessline 120
    </head> <body> <script>(function(){var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},r={ROT
  • Network accessline 121
    <body> <script>(function(){var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},r={ROTATE:0,PA
  • Network accessline 122
    <script>(function(){var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},r={ROTATE:0,PAN:1,DOL
  • Network accessline 3823
    // GGX VNDF importance sampling (Eric Heitz 2018) 			// "Sampling the GGX Distribution of Visible Normals" 			// https://jcgt.org/published/0007/04/01/
  • Network accessline 3824
    // "Sampling the GGX Distribution of Visible Normals" 			// https://jcgt.org/published/0007/04/01/ 			vec3 importanceSampleGGX_VNDF(vec2 Xi, vec3 V, float roughness) {
  • Network accessline 3825
    // https://jcgt.org/published/0007/04/01/

examples/satellite-factory/spec.js

  • Executable scriptline 1
    Executable file

runtime/app.js

  • Executable scriptline 1
    Executable file

runtime/des.js

  • Executable scriptline 1
    Executable file

runtime/kit.js

  • Executable scriptline 1
    Executable file

runtime/look.js

  • Executable scriptline 1
    Executable file

runtime/world.js

  • Executable scriptline 1
    Executable file

scripts/build.mjs

  • Executable scriptline 1
    #!/usr/bin/env node

scripts/capture.mjs

  • Executable scriptline 1
    #!/usr/bin/env node

scripts/check.mjs

  • Executable scriptline 1
    #!/usr/bin/env node

scripts/lib.mjs

  • Executable scriptline 1
    Executable file

scripts/record.mjs

  • Executable scriptline 1
    #!/usr/bin/env node

vendor/three.bundle.js

  • Network accessline 1
    (function(){var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},r={ROTATE:0,PAN:1,DOLLY_PAN:2
  • Possible obfuscationline 1
    (function(){var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r},n={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},r={ROTATE:0,PAN:1,DOLLY_PAN:2
  • Executable scriptline 1
    Executable file
  • Possible obfuscationline 5
    }`,Qc=class extends ji{constructor(e){super(),this.isShaderMaterial=!0,this.type=`ShaderMaterial`,this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=Xc,this.fragmentShader=Zc,this.linewidth=1,this.wireframe=!1,this.wi
  • Possible obfuscationline 3671
    }`},$={common:{diffuse:{value:new Y(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new K},alphaMap:{value:null},alphaMapTransform:{value:new K},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransfo
  • Network accessline 3702
    // GGX VNDF importance sampling (Eric Heitz 2018) 			// "Sampling the GGX Distribution of Visible Normals" 			// https://jcgt.org/published/0007/04/01/
  • Network accessline 3704
    // https://jcgt.org/published/0007/04/01/
  • Possible obfuscationline 3960
    `},r=new $o(5,5,5),i=new Qc({name:`CubemapFromEquirect`,uniforms:Wc(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});i.uniforms.tEquirect.value=t;let a=new _a(r,i),o=t.minFilter;return t.minFilter=
  • Possible obfuscationline 4006
    }`,depthTest:!1,depthWrite:!1}),u=new _a(c,l),d=new fu(-1,1,1,-1,0,1),f=null,p=null,m=!1,h,g=null,_=[],v=!1;this.setSize=function(e,t){o.setSize(e,t),s.setSize(e,t);for(let n=0;n<_.length;n++){let r=_[n];r.setSize&&r.setSize(e,t)}},this.set
  • Possible obfuscationline 4012
    `+Om(e.getShaderSource(t),r)}return i}function Mm(e,t){let n=Am(t);return[`vec4 ${e}( vec4 value ) {`,`	return ${n[1]}( vec4( value.rgb * ${n[0]}, value.a ) );`,`}`].join( `)}var Nm={1:`Linear`,2:`Reinhard`,3:`Cineon`,4:`ACESFilmic`,6:`AgX`
  • Possible obfuscationline 4016
    `)}function zm(e,t){let n={},r=e.getProgramParameter(t,e.ACTIVE_ATTRIBUTES);for(let i=0;i<r;i++){let r=e.getActiveAttrib(t,i),a=r.name,o=1;r.type===e.FLOAT_MAT2&&(o=2),r.type===e.FLOAT_MAT3&&(o=3),r.type===e.FLOAT_MAT4&&(o=4),n[a]={type:r.t
  • Possible obfuscationline 4033
    `;return e.precision===`highp`?t+= #define HIGH_PRECISION`:e.precision===`mediump`?t+= #define MEDIUM_PRECISION`:e.precision===`lowp`&&(t+= #define LOW_PRECISION`),t}var Zm={1:`SHADOWMAP_TYPE_PCF`,3:`SHADOWMAP_TYPE_VSM`};function Qm(e){retu
  • Possible obfuscationline 4046
    `,g=[p,`#define attribute in`,`#define varying out`,`#define texture2D texture`].join( `)+ `+g,_=[`#define varying in`,n.glslVersion===`300 es`?``:`layout(location = 0) out highp vec4 pc_fragColor;`,n.glslVersion===`300 es`?``:`#define gl_F
  • Possible obfuscationline 4055
    Program Info Log: `+o+ `+e+ `+n)}}else o===``?(s===``||c===``)&&(u=!1):B(`WebGLProgram: Program Info Log:`,o);u&&(t.diagnostics={runnable:l,programLog:o,vertexShader:{log:s,prefix:g},fragmentShader:{log:c,prefix:_}})}i.deleteShader(x),i.del
  • Possible obfuscationline 4057
    `+n)}}else o===``?(s===``||c===``)&&(u=!1):B(`WebGLProgram: Program Info Log:`,o);u&&(t.diagnostics={runnable:l,programLog:o,vertexShader:{log:s,prefix:g},fragmentShader:{log:c,prefix:_}})}i.deleteShader(x),i.deleteShader(S),w=new wm(i,h),T
  • Possible obfuscationline 4084
    }`,Eh=[new G(1,0,0),new G(-1,0,0),new G(0,1,0),new G(0,-1,0),new G(0,0,1),new G(0,0,-1)],Dh=[new G(0,-1,0),new G(0,-1,0),new G(0,0,1),new G(0,0,-1),new G(0,-1,0),new G(0,-1,0)],Oh=new J,kh=new G,Ah=new G;function jh(e,t,n){let r=new Za,i=ne
  • Possible obfuscationline 4108
    }`,Lh=class{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t){if(this.texture===null){let n=new Qo(e.texture);(e.depthNear!==t.depthNear||e.depthFar!==t.depthFar)&&(this.depthNear=e.depthNear,this.dep
  • Possible obfuscationline 4131
    }`},Jh=class{constructor(){this.isPass=!0,this.enabled=!0,this.needsSwap=!0,this.clear=!1,this.renderToScreen=!1}setSize(){}render(){console.error(`THREE.Pass: .render() must be implemented in derived pass.`)}dispose(){}},Yh=new fu(-1,1,1,-
  • Possible obfuscationline 4163
    }`},ig=class e extends Jh{constructor(e,t=1,n,r){super(),this.strength=t,this.radius=n,this.threshold=r,this.resolution=e===void 0?new W(256,256):new W(e.x,e.y),this.clearColor=new Y(0,0,0),this.needsSwap=!1,this.renderTargetsHorizontal=[],
  • Possible obfuscationline 4632
    }`};function dg(e,t,n){let r=fg(e,t,n),i=`vec3[SAMPLES](`;for(let t=0;t<e;t++){let n=r[t];i+=`vec3(${n.x}, ${n.y}, ${n.z})${t<e-1?`,`:`)`}`}return i}function fg(e,t,n){let r=[];for(let i=0;i<e;i++){let a=2*Math.PI*t*i/e,o=(i/(e-1))**n;r.pus
  • Possible obfuscationline 4703
    }`},gg=class extends Jh{constructor(){super(),this.isOutputPass=!0,this.uniforms=Yc.clone(hg.uniforms),this.material=new $c({name:hg.name,uniforms:this.uniforms,vertexShader:hg.vertexShader,fragmentShader:hg.fragmentShader}),this._fsQuad=ne
  • Possible obfuscationline 5089
    }`},bg=class extends Jh{constructor(){super(),this._edgesRT=new Fn(1,1,{depthBuffer:!1,type:E}),this._edgesRT.texture.name=`SMAAPass.edges`,this._weightsRT=new Fn(1,1,{depthBuffer:!1,type:E}),this._weightsRT.texture.name=`SMAAPass.weights`;

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Signal confidence: 64 facts

and 14 more

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.