본문으로 건너뛰기
cccskills
무료GitHub에 공개한국어 소개

p5js

p5.js로 브라우저에서 실행되는 생성 예술과 조작이나 소리에 반응하는 영상을 만듭니다. 구상부터 구현, 화면 확인, 이미지와 동영상 내보내기까지 진행합니다.

원문원문 설명 보기

p5.js sketches: gen art, shaders, interactive, 3D.

연동 도구Cloudflare
AI 평가80점/ 100설치 방법 보기

이럴 때 유용합니다

  • 규칙과 난수로 예술 작품 제작
  • 마우스 조작에 반응하는 작품 제작
  • 소리에 반응하는 애니메이션 제작
  • 작품을 이미지나 동영상으로 내보내기

한국어 소개

할 수 있는 일

p5.js로 브라우저에서 실행되는 예술 작품과 애니메이션을 제작합니다. 규칙이나 난수로 만드는 생성 예술, 데이터 시각화, 마우스나 소리에 반응하는 표현, 입체 장면을 다룹니다. 구상을 정하고 색상, 움직임, 조작 방식을 설계한 뒤 HTML을 구현해 화면을 확인합니다. PNG, GIF, MP4, SVG 등으로 내보내는 과정도 다룹니다.

이럴 때 유용합니다

입자가 흐르는 배경, 조작에 따라 변하는 작품, 음악에 맞춰 움직이는 영상을 만들 때 활용합니다. 생성의 시작점을 정하는 시드 값으로 같은 작품을 재현할 수 있습니다. 슬라이더로 움직임이나 밀도를 조절하는 화면도 만들 수 있습니다.

사용 예시

  • “차분한 색상으로 입자가 천천히 흐르는 생성 예술 작품을 만들어 주세요.”
  • “음악에 반응하는 애니메이션을 만들고 MP4로 내보내 주세요.”

주의 사항

기본적으로 단일 HTML 파일과 CDN의 p5.js를 사용합니다. 로컬 이미지나 글꼴을 읽으려면 서버가 필요합니다. 자동 고해상도 출력에는 Node.js와 Puppeteer를, MP4에는 ffmpeg를 사용합니다. SVG용 p5.js-svg는 p5.js 1.x가 필요하며, p5.brush는 p5.js 2.x와 WEBGL이 필요합니다.

이 소개문은 공개된 SKILL.md를 바탕으로 AI(OpenAI Codex)가 작성했습니다. 정확한 사양은 아래 원문을 확인하세요.

객관 평가

AI가 SKILL.md의 내용만을 근거로 4가지 관점에서 판정했습니다. 스타 수나 인기도는 판정에 넣지 않았습니다.

지시의 명확성언제 쓰고 무엇을 하는지 알 수 있는가
A양호생성 예술과 소리 반응 등의 용도를 나열하고 입력과 출력을 표로 제시합니다.
절차의 구체성절차·입출력·예시가 구체적으로 적혀 있는가
A양호구상부터 검증까지 여섯 단계와 HTML 구성, 형식별 내보내기 방법을 제시합니다.
안전성전송·삭제·명령 실행 등을 명시하고 있는가
B일부 부족CDN 외부 코드와 마이크 입력을 다루지만 사용 시 확인 절차는 없습니다.
도입의 용이성필요한 도구나 API 키가 적고 적혀 있는가
B일부 부족추가 기능에 필요한 Node.js와 Puppeteer를 나열하지만 설치 절차는 없습니다.

총점은 각 항목을 A=25점, B=15점, C=5점으로 더한 값입니다. 2026년 10월 19일 기준으로 AI(OpenAI Codex)가 판정했습니다. 참고용이므로 설치 전에 원문도 확인해 주세요.

평가가 다르다고 생각되면 재검토를 요청하기

어느 항목이 왜 다르다고 생각하는지 적어 주세요. 로그인은 필요 없습니다. SKILL.md와 대조해 평가를 다시 만들고 이곳에 반영합니다.

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

포함된 파일(17)

  • SKILL.md26.9 KB
  • README.md3.2 KB
  • references/animation.md10.2 KB
  • references/color-systems.md8.4 KB
  • references/core-api.md9.6 KB
  • references/export-pipeline.md15.2 KB
  • references/interaction.md8.1 KB
  • references/shapes-and-geometry.md7.0 KB
  • references/troubleshooting.md12.7 KB
  • references/typography.md6.6 KB
  • references/visual-effects.md22.9 KB
  • references/webgl-and-3d.md8.7 KB
  • scripts/export-frames.js5.3 KB
  • scripts/render.sh2.9 KB
  • scripts/serve.sh841 B
  • scripts/setup.sh2.4 KB
  • templates/viewer.html10.6 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

p5.js Production Pipeline

When to use

Use when users request: p5.js sketches, creative coding, generative art, interactive visualizations, canvas animations, browser-based visual art, data viz, shader effects, or any p5.js project.

What's inside

Production pipeline for interactive and generative visual art using p5.js. Creates browser-based sketches, generative art, data visualizations, interactive experiences, 3D scenes, audio-reactive visuals, and motion graphics — exported as HTML, PNG, GIF, MP4, or SVG. Covers: 2D/3D rendering, noise and particle systems, flow fields, shaders (GLSL), pixel manipulation, kinetic typography, WebGL scenes, audio analysis, mouse/keyboard interaction, and headless high-res export.

Creative Standard

This is visual art rendered in the browser. The canvas is the medium; the algorithm is the brush.

Before writing a single line of code, articulate the creative concept. What does this piece communicate? What makes the viewer stop scrolling? What separates this from a code tutorial example? The user's prompt is a starting point — interpret it with creative ambition.

First-render excellence is non-negotiable. The output must be visually striking on first load. If it looks like a p5.js tutorial exercise, a default configuration, or "AI-generated creative coding," it is wrong. Rethink before shipping.

Go beyond the reference vocabulary. The noise functions, particle systems, color palettes, and shader effects in the references are a starting vocabulary. For every project, combine, layer, and invent. The catalog is a palette of paints — you write the painting.

Be proactively creative. If the user asks for "a particle system," deliver a particle system with emergent flocking behavior, trailing ghost echoes, palette-shifted depth fog, and a background noise field that breathes. Include at least one visual detail the user didn't ask for but will appreciate.

Dense, layered, considered. Every frame should reward viewing. Never flat white backgrounds. Always compositional hierarchy. Always intentional color. Always micro-detail that only appears on close inspection.

Cohesive aesthetic over feature count. All elements must serve a unified visual language — shared color temperature, consistent stroke weight vocabulary, harmonious motion speeds. A sketch with ten unrelated effects is worse than one with three that belong together.

Modes

ModeInputOutputReference
Generative artSeed / parametersProcedural visual composition (still or animated)references/visual-effects.md
Data visualizationDataset / APIInteractive charts, graphs, custom data displaysreferences/interaction.md
Interactive experienceNone (user drives)Mouse/keyboard/touch-driven sketchreferences/interaction.md
Animation / motion graphicsTimeline / storyboardTimed sequences, kinetic typography, transitionsreferences/animation.md
3D sceneConcept descriptionWebGL geometry, lighting, camera, materialsreferences/webgl-and-3d.md
Image processingImage file(s)Pixel manipulation, filters, mosaic, pointillismreferences/visual-effects.md § Pixel Manipulation
Audio-reactiveAudio file / micSound-driven generative visualsreferences/interaction.md § Audio Input

Stack

Single self-contained HTML file per project. No build step required.

LayerToolPurpose
Corep5.js 1.11.3 (CDN)Canvas rendering, math, transforms, event handling
3Dp5.js WebGL mode3D geometry, camera, lighting, GLSL shaders
Audiop5.sound.js (CDN)FFT analysis, amplitude, mic input, oscillators
ExportBuilt-in saveCanvas() / saveGif() / saveFrames()PNG, GIF, frame sequence output
CaptureCCapture.js (optional)Deterministic framerate video capture (WebM, GIF)
HeadlessPuppeteer + Node.js (optional)Automated high-res rendering, MP4 via ffmpeg
SVGp5.js-svg 1.6.0 (optional)Vector output for print — requires p5.js 1.x
Natural mediap5.brush (optional)Watercolor, charcoal, pen — requires p5.js 2.x + WEBGL
Texturep5.grain (optional)Film grain, texture overlays
FontsGoogle Fonts / loadFont()Custom typography via OTF/TTF/WOFF2

Version Note

p5.js 1.x (1.11.3) is the default — stable, well-documented, broadest library compatibility. Use this unless a project requires 2.x features.

p5.js 2.x (2.2+) adds: async setup() replacing preload(), OKLCH/OKLAB color modes, splineVertex(), shader .modify() API, variable fonts, textToContours(), pointer events. Required for p5.brush. See references/core-api.md § p5.js 2.0.

Pipeline

Every project follows the same 6-stage path:

CONCEPT → DESIGN → CODE → PREVIEW → EXPORT → VERIFY
  1. CONCEPT — Articulate the creative vision: mood, color world, motion vocabulary, what makes this unique
  2. DESIGN — Choose mode, canvas size, interaction model, color system, export format. Map concept to technical decisions
  3. CODE — Write single HTML file with inline p5.js. Structure: globals → preload() → setup() → draw() → helpers → classes → event handlers
  4. PREVIEW — Open in browser, verify visual quality. Test at target resolution. Check performance
  5. EXPORT — Capture output: saveCanvas() for PNG, saveGif() for GIF, saveFrames() + ffmpeg for MP4, Puppeteer for headless batch
  6. VERIFY — Does the output match the concept? Is it visually striking at the intended display size? Would you frame it?

Creative Direction

Aesthetic Dimensions

DimensionOptionsReference
Color systemHSB/HSL, RGB, named palettes, procedural harmony, gradient interpolationreferences/color-systems.md
Noise vocabularyPerlin noise, simplex, fractal (octaved), domain warping, curl noisereferences/visual-effects.md § Noise
Particle systemsPhysics-based, flocking, trail-drawing, attractor-driven, flow-field followingreferences/visual-effects.md § Particles
Shape languageGeometric primitives, custom vertices, bezier curves, SVG pathsreferences/shapes-and-geometry.md
Motion styleEased, spring-based, noise-driven, physics sim, lerped, steppedreferences/animation.md
TypographySystem fonts, loaded OTF, textToPoints() particle text, kineticreferences/typography.md
Shader effectsGLSL fragment/vertex, filter shaders, post-processing, feedback loopsreferences/webgl-and-3d.md § Shaders
CompositionGrid, radial, golden ratio, rule of thirds, organic scatter, tiledreferences/core-api.md § Composition
Interaction modelMouse follow, click spawn, drag, keyboard state, scroll-driven, mic inputreferences/interaction.md
Blend modesBLEND, ADD, MULTIPLY, SCREEN, DIFFERENCE, EXCLUSION, OVERLAYreferences/color-systems.md § Blend Modes
LayeringcreateGraphics() offscreen buffers, alpha compositing, maskingreferences/core-api.md § Offscreen Buffers
TexturePerlin surface, stippling, hatching, halftone, pixel sortingreferences/visual-effects.md § Texture Generation

Per-Project Variation Rules

Never use default configurations. For every project:

  • Custom color palette — never raw fill(255, 0, 0). Always a designed palette with 3-7 colors
  • Custom stroke weight vocabulary — thin accents (0.5), medium structure (1-2), bold emphasis (3-5)
  • Background treatment — never plain background(0) or background(255). Always textured, gradient, or layered
  • Motion variety — different speeds for different elements. Primary at 1x, secondary at 0.3x, ambient at 0.1x
  • At least one invented element — a custom particle behavior, a novel noise application, a unique interaction response

Project-Specific Invention

For every project, invent at least one of:

  • A custom color palette matching the mood (not a preset)
  • A novel noise field combination (e.g., curl noise + domain warp + feedback)
  • A unique particle behavior (custom forces, custom trails, custom spawning)
  • An interaction mechanic the user didn't request but that elevates the piece
  • A compositional technique that creates visual hierarchy

Parameter Design Philosophy

Parameters should emerge from the algorithm, not from a generic menu. Ask: "What properties of this system should be tunable?"

Good parameters expose the algorithm's character:

  • Quantities — how many particles, branches, cells (controls density)
  • Scales — noise frequency, element size, spacing (controls texture)
  • Rates — speed, growth rate, decay (controls energy)
  • Thresholds — when does behavior change? (controls drama)
  • Ratios — proportions, balance between forces (controls harmony)

Bad parameters are generic controls unrelated to the algorithm:

  • "color1", "color2", "size" — meaningless without context
  • Toggle switches for unrelated effects
  • Parameters that only change cosmetics, not behavior

Every parameter should change how the algorithm thinks, not just how it looks. A "turbulence" parameter that changes noise octaves is good. A "particle size" slider that only changes ellipse() radius is shallow.

Workflow

Step 1: Creative Vision

Before any code, articulate:

  • Mood / atmosphere: What should the viewer feel? Contemplative? Energized? Unsettled? Playful?
  • Visual story: What happens over time (or on interaction)? Build? Decay? Transform? Oscillate?
  • Color world: Warm/cool? Monochrome? Complementary? What's the dominant hue? The accent?
  • Shape language: Organic curves? Sharp geometry? Dots? Lines? Mixed?
  • Motion vocabulary: Slow drift? Explosive burst? Breathing pulse? Mechanical precision?
  • What makes THIS different: What is the one thing that makes this sketch unique?

Map the user's prompt to aesthetic choices. "Relaxing generative background" demands different everything from "glitch data visualization."

Step 2: Technical Design

  • Mode — which of the 7 modes from the table above
  • Canvas size — landscape 1920x1080, portrait 1080x1920, square 1080x1080, or responsive windowWidth/windowHeight
  • Renderer — P2D (default) or WEBGL (for 3D, shaders, advanced blend modes)
  • Frame rate — 60fps (interactive), 30fps (ambient animation), or noLoop() (static generative)
  • Export target — browser display, PNG still, GIF loop, MP4 video, SVG vector
  • Interaction model — passive (no input), mouse-driven, keyboard-driven, audio-reactive, scroll-driven
  • Viewer UI — for interactive generative art, start from templates/viewer.html which provides seed navigation, parameter sliders, and download. For simple sketches or video export, use bare HTML

Step 3: Code the Sketch

For interactive generative art (seed exploration, parameter tuning): start from templates/viewer.html. Read the template first, keep the fixed sections (seed nav, actions), replace the algorithm and parameter controls. This gives the user seed prev/next/random/jump, parameter sliders with live update, and PNG download — all wired up.

For animations, video export, or simple sketches: use bare HTML:

Single HTML file. Structure:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Project Name</title>
  <script>p5.disableFriendlyErrors = true;</script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.11.3/p5.min.js"></script>
  <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.11.3/addons/p5.sound.min.js"></script> -->
  <!-- <script src="https://unpkg.com/p5.js-svg@1.6.0"></script> -->  <!-- SVG export -->
  <!-- <script src="https://cdn.jsdelivr.net/npm/ccapture.js-npmfixed/build/CCapture.all.min.js"></script> -->  <!-- video capture -->
  <style>
    html, body { margin: 0; padding: 0; overflow: hidden; }
    canvas { display: block; }
  </style>
</head>
<body>
<script>
// === Configuration ===
const CONFIG = {
  seed: 42,
  // ... project-specific params
};

// === Color Palette ===
const PALETTE = {
  bg: '#0a0a0f',
  primary: '#e8d5b7',
  // ...
};

// === Global State ===
let particles = [];

// === Preload (fonts, images, data) ===
function preload() {
  // font = loadFont('...');
}

// === Setup ===
function setup() {
  createCanvas(1920, 1080);
  randomSeed(CONFIG.seed);
  noiseSeed(CONFIG.seed);
  colorMode(HSB, 360, 100, 100, 100);
  // Initialize state...
}

// === Draw Loop ===
function draw() {
  // Render frame...
}

// === Helper Functions ===
// ...

// === Classes ===
class Particle {
  // ...
}

// === Event Handlers ===
function mousePressed() { /* ... */ }
function keyPressed() { /* ... */ }
function windowResized() { resizeCanvas(windowWidth, windowHeight); }
</script>
</body>
</html>

Key implementation patterns:

  • Seeded randomness: Always randomSeed() + noiseSeed() for reproducibility
  • Color mode: Use colorMode(HSB, 360, 100, 100, 100) for intuitive color control
  • State separation: CONFIG for parameters, PALETTE for colors, globals for mutable state
  • Class-based entities: Particles, agents, shapes as classes with update() + display() methods
  • Offscreen buffers: createGraphics() for layered composition, trails, masks

Step 4: Preview & Iterate

  • Open HTML file directly in browser — no server needed for basic sketches
  • For loadImage()/loadFont() from local files: use scripts/serve.sh or python -m http.server
  • Chrome DevTools Performance tab to verify 60fps
  • Test at target export resolution, not just the window size
  • Adjust parameters until the visual matches the concept from Step 1

Step 5: Export

FormatMethodCommand
PNGsaveCanvas('output', 'png') in keyPressed()Press 's' to save
High-res PNGPuppeteer headless capturenode scripts/export-frames.js sketch.html --width 3840 --height 2160 --frames 1
GIFsaveGif('output', 5) — captures N secondsPress 'g' to save
Frame sequencesaveFrames('frame', 'png', 10, 30) — 10s at 30fpsThen ffmpeg -i frame-%04d.png -c:v libx264 output.mp4
MP4Puppeteer frame capture + ffmpegbash scripts/render.sh sketch.html output.mp4 --duration 30 --fps 30
SVGcreateCanvas(w, h, SVG) with p5.js-svgsave('output.svg')

Step 6: Quality Verification

  • Does it match the vision? Compare output to the creative concept. If it looks generic, go back to Step 1
  • Resolution check: Is it sharp at the target display size? No aliasing artifacts?
  • Performance check: Does it hold 60fps in browser? (30fps minimum for animations)
  • Color check: Do the colors work together? Test on both light and dark monitors
  • Edge cases: What happens at canvas edges? On resize? After running for 10 minutes?

Critical Implementation Notes

Performance — Disable FES First

The Friendly Error System (FES) adds up to 10x overhead. Disable it in every production sketch:

p5.disableFriendlyErrors = true;  // BEFORE setup()

function setup() {
  pixelDensity(1);  // prevent 2x-4x overdraw on retina
  createCanvas(1920, 1080);
}

In hot loops (particles, pixel ops), use Math.* instead of p5 wrappers — measurably faster:

// In draw() or update() hot paths:
let a = Math.sin(t);          // not sin(t)
let r = Math.sqrt(dx*dx+dy*dy); // not dist() — or better: skip sqrt, compare magSq
let v = Math.random();        // not random() — when seed not needed
let m = Math.min(a, b);       // not min(a, b)

Never console.log() inside draw(). Never manipulate DOM in draw(). See references/troubleshooting.md § Performance.

Seeded Randomness — Always

Every generative sketch must be reproducible. Same seed, same output.

function setup() {
  randomSeed(CONFIG.seed);
  noiseSeed(CONFIG.seed);
  // All random() and noise() calls now deterministic
}

Never use Math.random() for generative content — only for performance-critical non-visual code. Always random() for visual elements. If you need a random seed: CONFIG.seed = floor(random(99999)).

Generative Art Platform Support (fxhash / Art Blocks)

For generative art platforms, replace p5's PRNG with the platform's deterministic random:

// fxhash convention
const SEED = $fx.hash;              // unique per mint
const rng = $fx.rand;               // deterministic PRNG
$fx.features({ palette: 'warm', complexity: 'high' });

// In setup():
randomSeed(SEED);   // for p5's noise()
noiseSeed(SEED);

// Replace random() with rng() for platform determinism
let x = rng() * width;  // instead of random(width)

See references/export-pipeline.md § Platform Export.

Color Mode — Use HSB

HSB (Hue, Saturation, Brightness) is dramatically easier to work with than RGB for generative art:

colorMode(HSB, 360, 100, 100, 100);
// Now: fill(hue, sat, bri, alpha)
// Rotate hue: fill((baseHue + offset) % 360, 80, 90)
// Desaturate: fill(hue, sat * 0.3, bri)
// Darken: fill(hue, sat, bri * 0.5)

Never hardcode raw RGB values. Define a palette object, derive variations procedurally. See references/color-systems.md.

Noise — Multi-Octave, Not Raw

Raw noise(x, y) looks like smooth blobs. Layer octaves for natural texture:

function fbm(x, y, octaves = 4) {
  let val = 0, amp = 1, freq = 1, sum = 0;
  for (let i = 0; i < octaves; i++) {
    val += noise(x * freq, y * freq) * amp;
    sum += amp;
    amp *= 0.5;
    freq *= 2;
  }
  return val / sum;
}

For flowing organic forms, use domain warping: feed noise output back as noise input coordinates. See references/visual-effects.md.

createGraphics() for Layers — Not Optional

Flat single-pass rendering looks flat. Use offscreen buffers for composition:

let bgLayer, fgLayer, trailLayer;
function setup() {
  createCanvas(1920, 1080);
  bgLayer = createGraphics(width, height);
  fgLayer = createGraphics(width, height);
  trailLayer = createGraphics(width, height);
}
function draw() {
  renderBackground(bgLayer);
  renderTrails(trailLayer);   // persistent, fading
  renderForeground(fgLayer);  // cleared each frame
  image(bgLayer, 0, 0);
  image(trailLayer, 0, 0);
  image(fgLayer, 0, 0);
}

Performance — Vectorize Where Possible

p5.js draw calls are expensive. For thousands of particles:

// SLOW: individual shapes
for (let p of particles) {
  ellipse(p.x, p.y, p.size);
}

// FAST: single shape with beginShape()
beginShape(POINTS);
for (let p of particles) {
  vertex(p.x, p.y);
}
endShape();

// FASTEST: pixel buffer for massive counts
loadPixels();
for (let p of particles) {
  let idx = 4 * (floor(p.y) * width + floor(p.x));
  pixels[idx] = r; pixels[idx+1] = g; pixels[idx+2] = b; pixels[idx+3] = 255;
}
updatePixels();

See references/troubleshooting.md § Performance.

Instance Mode for Multiple Sketches

Global mode pollutes window. For production, use instance mode:

const sketch = (p) => {
  p.setup = function() {
    p.createCanvas(800, 800);
  };
  p.draw = function() {
    p.background(0);
    p.ellipse(p.mouseX, p.mouseY, 50);
  };
};
new p5(sketch, 'canvas-container');

Required when embedding multiple sketches on one page or integrating with frameworks.

WebGL Mode Gotchas

  • createCanvas(w, h, WEBGL) — origin is center, not top-left
  • Y-axis is inverted (positive Y goes up in WEBGL, down in P2D)
  • translate(-width/2, -height/2) to get P2D-like coordinates
  • push()/pop() around every transform — matrix stack overflows silently
  • texture() before rect()/plane() — not after
  • Custom shaders: createShader(vert, frag) — test on multiple browsers

Export — Key Bindings Convention

Every sketch should include these in keyPressed():

function keyPressed() {
  if (key === 's' || key === 'S') saveCanvas('output', 'png');
  if (key === 'g' || key === 'G') saveGif('output', 5);
  if (key === 'r' || key === 'R') { randomSeed(millis()); noiseSeed(millis()); }
  if (key === ' ') CONFIG.paused = !CONFIG.paused;
}

Headless Video Export — Use noLoop()

For headless rendering via Puppeteer, the sketch must use noLoop() in setup. Without it, p5's draw loop runs freely while screenshots are slow — the sketch races ahead and you get skipped/duplicate frames.

function setup() {
  createCanvas(1920, 1080);
  pixelDensity(1);
  noLoop();                    // capture script controls frame advance
  window._p5Ready = true;      // signal readiness to capture script
}

The bundled scripts/export-frames.js detects _p5Ready and calls redraw() once per capture for exact 1:1 frame correspondence. See references/export-pipeline.md § Deterministic Capture.

For multi-scene videos, use the per-clip architecture: one HTML per scene, render independently, stitch with ffmpeg -f concat. See references/export-pipeline.md § Per-Clip Architecture.

Agent Workflow

When building p5.js sketches:

  1. Write the HTML file — single self-contained file, all code inline
  2. Open in browser — open sketch.html (macOS) or xdg-open sketch.html (Linux)
  3. Local assets (fonts, images) require a server: python -m http.server 8080 in the project directory, then open http://localhost:8080/sketch.html
  4. Export PNG/GIF — add keyPressed() shortcuts as shown above, tell the user which key to press
  5. Headless export — node scripts/export-frames.js sketch.html --frames 300 for automated frame capture (sketch must use noLoop() + _p5Ready)
  6. MP4 rendering — bash scripts/render.sh sketch.html output.mp4 --duration 30
  7. Iterative refinement — edit the HTML file, user refreshes browser to see changes
  8. Load references on demand — use skill_view(name="p5js", file_path="references/...") to load specific reference files as needed during implementation

Performance Targets

MetricTarget
Frame rate (interactive)60fps sustained
Frame rate (animated export)30fps minimum
Particle count (P2D shapes)5,000-10,000 at 60fps
Particle count (pixel buffer)50,000-100,000 at 60fps
Canvas resolutionUp to 3840x2160 (export), 1920x1080 (interactive)
File size (HTML)< 100KB (excluding CDN libraries)
Load time< 2s to first frame

References

FileContents
references/core-api.mdCanvas setup, coordinate system, draw loop, push()/pop(), offscreen buffers, composition patterns, pixelDensity(), responsive design
references/shapes-and-geometry.md2D primitives, beginShape()/endShape(), Bezier/Catmull-Rom curves, vertex() systems, custom shapes, p5.Vector, signed distance fields, SVG path conversion
references/visual-effects.mdNoise (Perlin, fractal, domain warp, curl), flow fields, particle systems (physics, flocking, trails), pixel manipulation, texture generation (stipple, hatch, halftone), feedback loops, reaction-diffusion
references/animation.mdFrame-based animation, easing functions, lerp()/map(), spring physics, state machines, timeline sequencing, millis()-based timing, transition patterns
references/typography.mdtext(), loadFont(), textToPoints(), kinetic typography, text masks, font metrics, responsive text sizing
references/color-systems.mdcolorMode(), HSB/HSL/RGB, lerpColor(), paletteLerp(), procedural palettes, color harmony, blendMode(), gradient rendering, curated palette library
references/webgl-and-3d.mdWEBGL renderer, 3D primitives, camera, lighting, materials, custom geometry, GLSL shaders (createShader(), createFilterShader()), framebuffers, post-processing
references/interaction.mdMouse events, keyboard state, touch input, DOM elements, createSlider()/createButton(), audio input (p5.sound FFT/amplitude), scroll-driven animation, responsive events
references/export-pipeline.mdsaveCanvas(), saveGif(), saveFrames(), deterministic headless capture, ffmpeg frame-to-video, CCapture.js, SVG export, per-clip architecture, platform export (fxhash), video gotchas
references/troubleshooting.mdPerformance profiling, per-pixel budgets, common mistakes, browser compatibility, WebGL debugging, font loading issues, pixel density traps, memory leaks, CORS
templates/viewer.htmlInteractive viewer template: seed navigation (prev/next/random/jump), parameter sliders, download PNG, responsive canvas. Start from this for explorable generative art

Creative Divergence (use only when user requests experimental/creative/unique output)

If the user asks for creative, experimental, surprising, or unconventional output, select the strategy that best fits and reason through its steps BEFORE generating code.

  • Conceptual Blending — when the user names two things to combine or wants hybrid aesthetics
  • SCAMPER — when the user wants a twist on a known generative art pattern
  • Distance Association — when the user gives a single concept and wants exploration ("make something about time")

Conceptual Blending

  1. Name two distinct visual systems (e.g., particle physics + handwriting)
  2. Map correspondences (particles = ink drops, forces = pen pressure, fields = letterforms)
  3. Blend selectively — keep mappings that produce interesting emergent visuals
  4. Code the blend as a unified system, not two systems side-by-side

SCAMPER Transformation

Take a known generative pattern (flow field, particle system, L-system, cellular automata) and systematically transform it:

  • Substitute: replace circles with text characters, lines with gradients
  • Combine: merge two patterns (flow field + voronoi)
  • Adapt: apply a 2D pattern to a 3D projection
  • Modify: exaggerate scale, warp the coordinate space
  • Purpose: use a physics sim for typography, a sorting algorithm for color
  • Eliminate: remove the grid, remove color, remove symmetry
  • Reverse: run the simulation backward, invert the parameter space

Distance Association

  1. Anchor on the user's concept (e.g., "loneliness")
  2. Generate associations at three distances:
    • Close (obvious): empty room, single figure, silence
    • Medium (interesting): one fish in a school swimming the wrong way, a phone with no notifications, the gap between subway cars
    • Far (abstract): prime numbers, asymptotic curves, the color of 3am
  3. Develop the medium-distance associations — they're specific enough to visualize but unexpected enough to be interesting

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

1password

무료요약 있음AI 평가 100점

1Password에 저장한 비밀번호와 API 키를 명령과 설정 템플릿에 사용합니다. CLI 설치와 인증부터 비밀 값 조회 및 환경 변수 전달까지 안내합니다.

  • 1Password CLI 설치와 설정
  • 저장된 API 키로 명령 실행
  • 설정 템플릿에 비밀 값 삽입
NousResearch/hermes-agent25.5만2026년 10월 19일 업데이트

3-statement-model

무료요약 있음AI 평가 90점

손익계산서·재무상태표·현금흐름표를 수식으로 연결한 Excel 모델을 만듭니다. 실적과 예측 가정을 입력하고 시나리오를 비교하며 세 재무제표의 일관성을 단계별로 확인합니다.

  • 재무 템플릿에 실적 입력
  • 세 재무제표가 연동되는 예측 작성
  • 기본·상향·하향 시나리오 비교
NousResearch/hermes-agent25.5만2026년 10월 19일 업데이트

accelerate

무료요약 있음AI 평가 80점

기존 PyTorch 학습 코드를 적은 수정으로 여러 GPU나 컴퓨터에 맞게 구성합니다. 혼합 정밀도, 메모리 절약 설정과 학습 실행 방법을 안내합니다.

  • 단일 GPU 학습을 여러 GPU로 옮깁니다
  • 혼합 정밀도 학습을 설정합니다
  • DeepSpeed나 FSDP로 메모리를 절약합니다
NousResearch/hermes-agent25.5만2026년 10월 19일 업데이트

actual-setup

무료요약 있음AI 평가 100점

Hermes에서 Actual Computer로 자신의 기기에 AI 모델을 실행하도록 연결을 설정합니다. 중계 서비스와 로컬 연결, 모델 선택, 응답 확인 및 오류 점검을 다룹니다.

  • Actual 키로 Hermes를 연결합니다
  • 자신의 기기에서 모델을 실행합니다
  • 로컬 모델을 찾아 내려받고 불러옵니다
NousResearch/hermes-agent25.5만2026년 10월 19일 업데이트

adversarial-ux-test

무료요약 있음AI 평가 80점

기술에 익숙하지 않고 쉽게 불만을 느끼는 사용자로 앱을 시험합니다. 혼란스러운 조작과 이탈 원인을 찾고, 개선 과제와 개인적 불만을 나눠 수정안을 정리합니다.

  • 출시나 시연 전에 사용성을 확인합니다
  • 신규 사용자의 경험을 점검합니다
  • 가입과 결제 과정의 어려움을 찾습니다
NousResearch/hermes-agent25.5만2026년 10월 19일 업데이트

agent-merge-conflict-arbiter

무료요약 있음AI 평가 100점

두 에이전트가 각각 수정한 브랜치의 Git 충돌을 양쪽 변경 내용과 의도에 따라 중립적으로 해결합니다. 충돌별 판단 이유를 기록하고 빌드나 테스트로 통합 결과를 확인합니다.

  • 두 에이전트의 브랜치 충돌 해결
  • 병렬 worktree의 변경 내용 통합
  • 충돌하는 설계 판단의 이유 확인
NousResearch/hermes-agent25.5만2026년 10월 19일 업데이트

NousResearch의 스킬 모두 보기

이 스킬의 문제 신고