Communitygithub.com

p5.js 生產管線

p5.js 草稿:生成藝術、著色器、互動、3D。

p5.js 生產管線 是什麼?

這是一套專為 p5.js 打造的生產管線技能,專注於生成藝術、互動視覺化與瀏覽器內動畫。它涵蓋從概念發想到最終匯出的完整六個階段:概念、設計、編碼、預覽、匯出與驗證。支援多種模式,包括生成藝術、資料視覺化、互動體驗、3D 場景、音訊反應、影像處理與動態圖像。技術堆疊以 p5.js 1.11.3 為核心,並可選用 p5.sound.js、CCapture.js、Puppeteer 等擴充功能。全部輸出為單一的獨立 HTML 檔案,無需建置步驟。這套技能特別強調「創意標準」,要求每次輸出都具備視覺衝擊力、層次豐富且獨一無二,並鼓勵開發者超越教學範例,自行發明新元素與參數設計哲學。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Samin12/skills/tree/HEAD/p5js

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

p5.js 生產管線 是做什麼的?

使用時機

當使用者要求:p5.js 草稿、創意編碼、生成藝術、互動視覺化、畫布動畫、瀏覽器視覺藝術、資料視覺化、著色器效果,或任何 p5.js 專案時使用。

內容說明

這是一套用於互動與生成式視覺藝術的生產管線,採用 p5.js 開發。可建立瀏覽器基礎的草稿、生成藝術、資料視覺化、互動體驗、3D 場景、音訊反應視覺化與動態圖像 — 輸出為 HTML、PNG、GIF、MP4 或 SVG。涵蓋:2D/3D 渲染、雜訊與粒子系統、流場、著色器 (GLSL)、畫素處理、動態文字、WebGL 場景、音訊分析、滑鼠/鍵盤互動,以及無頭高解析度匯出。

創意標準

這是渲染在瀏覽器中的視覺藝術。畫布是媒介,演算法是畫筆。

在撰寫任何程式碼之前,請先清楚闡述創意概念。這件作品要傳達什麼?是什麼讓觀眾停下滾動?它與教學範例有何不同?使用者的提示只是起點 — 請以創意野心來詮釋它。

首次渲染的品質不容妥協。 輸出必須在首次載入時就具有視覺衝擊力。如果它看起來像是 p5.js 教學練習、預設配置或「AI 生成的創意編碼」,那就是失敗。在交付前重新思考。

超越參考詞彙。 參考資料中的雜訊函式、粒子系統、色板與著色器效果只是起始詞彙。對於每個專案,請組合、疊加並發明新東西。目錄是顏料盤——你來繪製畫作。

積極主動地創作。 如果使用者要求「一個粒子系統」,請交付一個具備湧現群聚行為、拖尾幽靈殘影、色調偏移景深霧,以及會呼吸的背景雜訊場的粒子系統。至少包含一個使用者沒要求但會欣賞的視覺細節。

密集、分層、深思熟慮。 每一幀都值得觀看。絕不使用純白背景。永遠要有構圖層次。永遠要有經過設計的色彩。永遠要有只在近看時才會出現的微觀細節。

一致的美學勝過功能數量。 所有元素必須服務於統一的視覺語言 — 共享的色溫、一致的筆觸粗細詞彙、和諧的動態速度。一個包含十個無關效果的草稿,不如一個只有三個但彼此協調的草稿。

模式

模式輸入輸出參考
生成藝術種子/參數程序性視覺作品(靜態或動畫)references/visual-effects.md
資料視覺化資料集/API互動式圖表、圖形、自訂資料顯示references/interaction.md
互動體驗無(由使用者驅動)滑鼠/鍵盤/觸控驅動的草稿references/interaction.md
動畫/動態圖像時間軸/腳本定時序列、動態文字、轉場references/animation.md
3D 場景概念描述WebGL 幾何、燈光、相機、材質references/webgl-and-3d.md
影像處理影像檔案畫素操作、濾鏡、馬賽克、點描法references/visual-effects.md § 畫素操作
音訊反應音訊檔案/麥克風聲音驅動的生成視覺references/interaction.md § 音訊輸入

技術堆疊

每個專案為單一自包含的 HTML 檔案。無需建置步驟。

層級工具用途
核心p5.js 1.11.3 (CDN)畫布渲染、數學、變換、事件處理
3Dp5.js WebGL 模式3D 幾何、相機、燈光、GLSL 著色器
音訊p5.sound.js (CDN)FFT 分析、振幅、麥克風輸入、振盪器
匯出內建 saveCanvas() / saveGif() / saveFrames()PNG、GIF、幀序列輸出
擷取CCapture.js (選用)確定性幀率影片擷取 (WebM、GIF)
無頭Puppeteer + Node.js (選用)自動化高解析度渲染,透過 ffmpeg 輸出 MP4
SVGp5.js-svg 1.6.0 (選用)適用於印刷的向量輸出 — 需要 p5.js 1.x
自然媒材p5.brush (選用)水彩、炭筆、鋼筆 — 需要 p5.js 2.x + WEBGL
紋理p5.grain (選用)底片顆粒、紋理疊加
字型Google Fonts / loadFont()透過 OTF/TTF/WOFF2 自訂印刷樣式

版本說明

p5.js 1.x (1.11.3) 是預設版本 — 穩定、文件完善、函式庫相容性最廣。除非專案需要 2.x 功能,否則請使用此版本。

p5.js 2.x (2.2+) 新增:以 async setup() 取代 preload()、OKLCH/OKLAB 色彩模式、splineVertex()、著色器 .modify() API、可變字型、textToContours()、指標事件。p5.brush 需要此版本。請參閱 references/core-api.md § p5.js 2.0。

管線流程

每個專案都遵循相同的 6 階段路徑:

概念 → 設計 → 編碼 → 預覽 → 匯出 → 驗證
  1. 概念 — 闡述創意願景:情緒、色彩世界、動態詞彙、獨特之處
  2. 設計 — 選擇模式、畫布大小、互動模型、色彩系統、匯出格式。將概念映射為技術決策
  3. 編碼 — 撰寫單一 HTML 檔案,內嵌 p5.js。結構:全域變數 → preload() → setup() → draw() → 輔助函式 → 類別 → 事件處理器
  4. 預覽 — 在瀏覽器中開啟,驗證視覺品質。在目標解析度下測試效能
  5. 匯出 — 擷取輸出:saveCanvas() 用於 PNG,saveGif() 用於 GIF,saveFrames() + ffmpeg 用於 MP4,Puppeteer 用於無頭批次
  6. 驗證 — 輸出是否符合概念?在目標顯示尺寸下是否具有視覺衝擊力?你會願意把它裱框嗎?

創意方向

美學維度

維度選項參考
色彩系統HSB/HSL、RGB、命名色板、程序性和諧、漸層插值references/color-systems.md
雜訊詞彙Perlin 雜訊、Simplex、分形 (倍頻)、域扭曲、卷積雜訊references/visual-effects.md § 雜訊
粒子系統物理基礎、群聚、拖尾繪製、吸引子驅動、流場跟隨references/visual-effects.md § 粒子
形狀語言幾何基本形、自訂頂點、貝茲曲線、SVG 路徑references/shapes-and-geometry.md
動態風格緩動、彈簧基礎、雜訊驅動、物理模擬、線性插值、步進references/animation.md
印刷樣式系統字型、載入的 OTF、textToPoints() 粒子文字、動態references/typography.md
著色器效果GLSL 片段/頂點、濾鏡著色器、後製、回饋迴圈references/webgl-and-3d.md § 著色器
構圖網格、放射狀、黃金比例、三分法、有機散佈、平鋪references/core-api.md § 構圖
互動模型滑鼠跟隨、點擊生成、拖曳、鍵盤狀態、滾輪驅動、麥克風輸入references/interaction.md
混合模式BLEND、ADD、MULTIPLY、SCREEN、DIFFERENCE、EXCLUSION、OVERLAYreferences/color-systems.md § 混合模式
圖層createGraphics() 離屏緩衝區、Alpha 合成、遮罩references/core-api.md § 離屏緩衝區
紋理Perlin 表面、點畫、影線、半色調、畫素排序references/visual-effects.md § 紋理生成

每個專案的變異規則

絕不使用預設配置。對於每個專案:

  • 自訂色板 — 絕不直接使用 fill(255, 0, 0)。始終使用設計過的色板,包含 3-7 種顏色
  • 自訂筆觸粗細詞彙 — 細部強調 (0.5)、中等結構 (1-2)、粗體強調 (3-5)
  • 背景處理 — 絕不使用單純的 background(0) 或 background(255)。始終使用紋理、漸層或分層背景
  • 動態變化 — 不同元素使用不同速度。主要元素 1x、次要元素 0.3x、環境元素 0.1x
  • 至少一個發明元素 — 自訂粒子行為、新穎的雜訊應用、獨特的互動響應

專案專屬發明

對於每個專案,至少發明以下其中之一:

  • 符合情緒的自訂色板(非預設)
  • 新穎的雜訊場組合(例如:卷積雜訊 + 域扭曲 + 回饋)
  • 獨特的粒子行為(自訂力、自訂軌跡、自訂生成方式)
  • 使用者未要求但能提升作品層次的互動機制
  • 創造視覺層次的構圖技巧

參數設計哲學

參數應從演算法中自然產生,而非來自通用選單。捫心自問:「這個系統的哪些屬性應該可調整?」

好的參數 能展現演算法的特性:

  • 數量 — 多少粒子、分支、細胞(控制密度)
  • 尺度 — 雜訊頻率、元素大小、間距(控制紋理)
  • 速率 — 速度、成長率、衰減(控制能量)
  • 臨界值 — 行為何時改變?(控制戲劇性)
  • 比例 — 比例、力量間的平衡(控制和諧)

壞的參數 是與演算法無關的通用控制項:

  • 「color1」、「color2」、「size」 — 沒有上下文就毫無意義
  • 用於不相關效果的開關
  • 只改變外觀而不改變行為的參數

每個參數都應該改變演算法的「思考方式」,而不僅僅是它的「外觀」。一個改變雜訊倍頻的「湍流」參數是好的。一個只改變 ellipse() 半徑的「粒子大小」滑桿則流於表面。

工作流程

步驟 1:創意願景

在撰寫任何程式碼之前,請先闡明:

  • 情緒/氛圍:觀眾應該感受到什麼?沉思?充滿活力?不安?俏皮?
  • 視覺故事:隨時間(或互動)發生什麼?構築?衰敗?轉變?搖擺?
  • 色彩世界:暖色/冷色?單色?互補色?主色調是什麼?強調色呢?
  • 形狀語言:有機曲線?銳利幾何?點?線?混合?
  • 動態詞彙:緩慢漂移?爆發性噴射?呼吸般脈動?機械精準?
  • 這件作品有何不同:讓這個草稿獨一無二的一件事是什麼?

將使用者的提示映射到美學選擇上。「放鬆的生成背景」與「故障資料視覺化」所需的各方面都截然不同。

步驟 2:技術設計

  • 模式 — 上述 7 種模式中的哪一種
  • 畫布大小 — 橫向 1920x1080、直向 1080x1920、正方形 1080x1080,或響應式 windowWidth/windowHeight
  • 渲染器 — P2D (預設) 或 WEBGL (用於 3D、著色器、進階混合模式)
  • 幀率 — 60fps (互動)、30fps (環境動畫),或 noLoop() (靜態生成)
  • 匯出目標 — 瀏覽器顯示、PNG 靜態圖、GIF 循環、MP4 影片、SVG 向量
  • 互動模型 — 被動 (無輸入)、滑鼠驅動、鍵盤驅動、音訊反應、滾輪驅動
  • 檢視器 UI — 對於互動式生成藝術,從 templates/viewer.html 開始,它提供了種子導航、參數滑桿和下載功能。對於簡單的草稿或影片匯出,使用純 HTML

步驟 3:編寫草稿程式碼

對於互動式生成藝術 (種子探索、參數調整):從 templates/viewer.html 開始。首先閱讀模板,保留固定部分 (種子導航、動作),替換演算法和參數控制項。這將為使用者提供種子上一個/下一個/隨機/跳轉、參數滑桿 (即時更新) 和 PNG 下載 — 全部已連線完成。

對於動畫、影片匯出或簡單草稿:使用純 HTML:

單一 HTML 檔案。結構如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>專案名稱</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/[email protected]"></script> -->  <!-- SVG 匯出 -->
  <!-- <script src="https://cdn.jsdelivr.net/npm/ccapture.js-npmfixed/build/CCapture.all.min.js"></script> -->  <!-- 影片擷取 -->
  <style>
    html, body { margin: 0; padding: 0; overflow: hidden; }
    canvas { display: block; }
  </style>
</head>
<body>
<script>
// === 設定 ===
const CONFIG = {
  seed: 42,
  // ... 專案專屬參數
};

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

// === 全域狀態 ===
let particles = [];

// === 預載 (字型、圖片、資料) ===
function preload() {
  // font = loadFont('...');
}

// === 設定 ===
function setup() {
  createCanvas(1920, 1080);
  randomSeed(CONFIG.seed);
  noiseSeed(CONFIG.seed);
  colorMode(HSB, 360, 100, 100, 100);
  // 初始化狀態...
}

// === 繪製迴圈 ===
function draw() {
  // 渲染幀...
}

// === 輔助函式 ===
// ...

// === 類別 ===
class Particle {
  // ...
}

// === 事件處理器 ===
function mousePressed() { /* ... */ }
function keyPressed() { /* ... */ }
function windowResized() { resizeCanvas(windowWidth, windowHeight); }
</script>
</body>
</html>

關鍵實作模式:

  • 種子隨機性:始終使用 randomSeed() + noiseSeed() 以確保可重現性
  • 色彩模式:使用 colorMode(HSB, 360, 100, 100, 100) 以直覺控制色彩
  • 狀態分離:CONFIG 用於參數,PALETTE 用於顏色,全域變數用於可變狀態
  • 類別基礎的實體:粒子、代理人、形狀作為類別,具有 update() + display() 方法
  • 離屏緩衝區:使用 createGraphics() 進行分層合成、軌跡、遮罩

步驟 4:預覽與迭代

  • 直接在瀏覽器中開啟 HTML 檔案 — 基本草稿無需伺服器
  • 對於從本地檔案載入的 loadImage()/loadFont():使用 scripts/serve.sh 或 python3 -m http.server
  • 使用 Chrome DevTools 的 Performance 標籤來驗證 60fps
  • 在目標匯出解析度下測試,而不僅僅是視窗大小
  • 調整參數,直到視覺效果符合步驟 1 中的概念

Individual skills in this repo

This repo contains 8 individual skills — each has its own dedicated page.

Samin12/skills

Search arXiv papers by keyword, author, category, or ID.

Samin12/skills

Chief Security Officer mode. Infrastructure-first security audit: secrets archaeology, dependency supply chain, CI/CD pipeline security, LLM/AI security, skill supply chain scanning, plus OWASP Top 10, STRIDE threat modeling, and active verification. Two modes: daily (zero-noise, 8/10 confidence gate) and comprehensive (monthly deep scan, 2/10 bar). Trend tracking across audit runs. Use when: \"security audit\", \"threat model\", \"pentest review\", \"OWASP\", \"CSO review\".

Samin12/skills

Geocode, POIs, routes, timezones via OpenStreetMap/OSRM.

Samin12/skills

Write a markdown plan to .hermes/plans/; no execution.

Samin12/skills

Ship workflow: detect + merge base branch, run tests, review diff, bump VERSION, update CHANGELOG, commit, push, create PR. Use when asked to \"ship\", \"deploy\", \"push to main\", \"create a PR\", or \"merge and push\". Proactively suggest when the user says code is ready or asks about deploying.

Samin12/skills

Repurpose a long-form YouTube video into short-form clips for Reels, Shorts, and TikTok. Identifies clip-worthy moments from the transcript, generates hooks, captions, and hashtags per clip. Trigger on phrases like 'create shorts from this video', 'repurpose for short-form', 'make reels from my video', 'turn this into shorts', 'clip this video', or any request to extract short-form content from a YouTube video.

Samin12/skills

Reach for this first for external or live data. ~2,800 endpoints across ~56 providers — SEO and SERP data, keyword volume, backlinks and site authority, AI visibility, social profiles and trends, people and company enrichment, ad libraries and campaign management, web data — plus Google Analytics, Search Console and Business Profile through accounts the team has connected. Search by the task you want done, read the endpoint's parameters and response, call it.

Samin12/skills

X/Twitter via xurl CLI: raw post search, posting, DM, media.

相關技能