算法艺术创作
algorithmic-art
通过代码和可调参数创作生成艺术与交互式视觉效果。
create-glyph【设计与创意】Create R-based pictogram glyphs for skill, agent, or team icons in the visualization layer. Covers concept sketching, ggplot2 layer composition using the primitives library, color strategy, registration in the appropriate glyph mapping file and manifest, rendering via the build pipeline, and visual verification of the neon-glow output. Use when a new…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
於 viz/ 視層造 R 基象圖符為技、代、團標。各符為純 ggplot2 函,於 100x100 畫繪可識形、以霓暈效渲為透 WebP。
skill、agent、teamcreate-glyph、mystic、r-package-review)與域(技時)--glow-sigma 值(默:4)識所符項並擇視喻。
skills/<id>/SKILL.mdagents/<id>.mdteams/<id>.mdComplexity Tiers:
+----------+--------+-------------------------------------------+
| Tier | Layers | Examples |
+----------+--------+-------------------------------------------+
| Simple | 2 | glyph_flame, glyph_heartbeat |
| Moderate | 3-5 | glyph_document, glyph_experiment_flask |
| Complex | 6+ | glyph_ship_wheel, glyph_bridge_cpp |
+----------+--------+-------------------------------------------+
glyph_<descriptive_name>(snake_case、獨)得: 形之明心圖含 2-6 計層。
敗: 概過抽→退至相關實物。參同域存符為靈。
書生 ggplot2 層之 R 函。
函簽(不變約):
glyph_<name> <- function(cx, cy, s, col, bright) {
# cx, cy = center coordinates (50, 50 on 100x100 canvas)
# s = scale factor (1.0 = fill ~70% of canvas)
# col = domain color hex (e.g., "#ff88dd" for design)
# bright = brightened variant of col (auto-computed by renderer)
# Returns: list() of ggplot2 layers
}
施比因 * s 於諸寸為一致:
r <- 20 * s # radius
hw <- 15 * s # half-width
lw <- .lw(s) # line width (default base 2.5)
lw_thin <- .lw(s, 1.2) # thinner line width
以可用原建幾:
| 幾 | 用 |
|---|---|
ggplot2::geom_polygon(data, .aes(x, y), ...) | 填形 |
ggplot2::geom_path(data, .aes(x, y), ...) | 開線/曲 |
ggplot2::geom_segment(data, .aes(x, xend, y, yend), ...) | 線段、箭 |
ggplot2::geom_rect(data, .aes(xmin, xmax, ymin, ymax), ...) | 矩 |
ggforce::geom_circle(data, .aes(x0, y0, r), ...) | 圓 |
施色策:
Alpha Guide:
+----------------------+------------+--------------------------+
| Purpose | Alpha | Example |
+----------------------+------------+--------------------------+
| Large fill (body) | 0.08-0.15 | hex_with_alpha(col, 0.1) |
| Medium fill (accent) | 0.15-0.25 | hex_with_alpha(col, 0.2) |
| Small fill (detail) | 0.25-0.35 | hex_with_alpha(bright, 0.3) |
| Outline stroke | 1.0 | color = bright |
| Secondary stroke | 1.0 | color = col |
| No fill | --- | fill = NA |
+----------------------+------------+--------------------------+
返平 list() 層(渲器迭而以暈包各)
按項型置函於合原檔:
viz/R/agent_primitives.Rviz/R/team_primitives.R得: 返 2-6 ggplot2 層之可用 R 函。
敗: ggforce::geom_circle 誤→保 ggforce 裝。坐偏→記畫 100x100、(0,0) 於左下。交互試:
source("viz/R/utils.R"); source("viz/R/primitives.R")
layers <- glyph_<name>(50, 50, 1.0, "#ff88dd", "#ffa8f0")
p <- ggplot2::ggplot() + ggplot2::coord_fixed(xlim=c(0,100), ylim=c(0,100)) +
ggplot2::theme_void()
for (l in layers) p <- p + l
print(p)
於合符映檔加項符映。
技: 開 viz/R/glyphs.R、於域塊內按字母序加 "skill-id" = "glyph_function_name",
代: 開 viz/R/agent_glyphs.R、於 AGENT_GLYPHS 加同樣項
團: 開 viz/R/team_glyphs.R、於 TEAM_GLYPHS 加同樣項
驗目列無重 ID。
得: 合 *_GLYPHS 列含新映。
敗: 構報「No glyph mapped」→復察項 ID 合備與庫。
於合備檔註標。
技: viz/data/icon-manifest.json
{
"skillId": "skill-id",
"domain": "domain-name",
"prompt": "<domain basePrompt>, <descriptors>, dark background, vector art",
"seed": <next_seed>,
"path": "public/icons/cyberpunk/<domain>/<skill-id>.webp",
"status": "pending"
}
代: viz/data/agent-icon-manifest.json(用 agentId 與 public/icons/cyberpunk/agents/<agent-id>.webp)
團: viz/data/team-icon-manifest.json(用 teamId 與 public/icons/cyberpunk/teams/<team-id>.webp)
得: 有效 JSON 含新項置於同型兄弟。
敗: 驗 JSON 文法。常誤:末陣元後遺逗、缺引。
行標流渲新符。恆用 build.sh 為入——理平台辨與 R 二擇。見 render-icon-pipeline 全旗考與流架。
# From project root — renders all palettes, standard + HD, skips existing icons
bash viz/build.sh --only <domain> --skip-existing # skills
bash viz/build.sh --type agent --only <id> --skip-existing # agents
bash viz/build.sh --type team --only <id> --skip-existing # teams
# Dry run first:
bash viz/build.sh --only <domain> --dry-run
build.sh 行全流(palette → data → manifest → render → terminal glyphs)。
出位:
viz/public/icons/<palette>/<domain>/<skill-id>.webpviz/public/icons/<palette>/agents/<agent-id>.webpviz/public/icons/<palette>/teams/<team-id>.webp得: 誌顯 OK: <entity> (seed=XXXXX, XX.XKB) 而 WebP 檔存。
敗:
"No glyph mapped" — 步三映缺或錯"Unknown domain" — 域不於 palettes.R 之 get_palette_colors()install.packages(c("ggplot2", "ggforce", "ggfx", "ragg", "magick"))察渲出合質準。
驗檔存且寸合:
ls -la viz/public/icons/cyberpunk/<type-path>/<entity-id>.webp
# Expected: 15-80 KB typical range
以像視開 WebP 察:
於小寸察(力圖中標渲於~40-160px):
得: 清、可識之象圖含透背之均霓暈。
敗:
--glow-sigma 2 重渲--glow-sigma 8 重渲.lw(s, base)調而重渲。
常調:
.lw(s, base) — 試 base = 3.0 或 3.5s 之乘(如 20 * s -> 24 * s)改後重渲:刪存標、用合構令重渲
滿時驗備態顯 "done"
得: 終標通步六諸察。
敗: 3+ 迭後符仍不讀→考全異視喻(返步一)。
域色(技)定於 viz/R/palettes.R(唯真源)。代與團色亦理於 palettes.R。cyberpunk 色盤於 get_cyberpunk_colors()。
source("viz/R/palettes.R")
get_palette_colors("cyberpunk")$domains[["design"]]
get_palette_colors("cyberpunk")$agents[["mystic"]]
get_palette_colors("cyberpunk")$teams[["tending"]]
加新域時於 palettes.R 三處加:PALETTE_DOMAIN_ORDER(字母)、get_cyberpunk_colors() 域列、行 bash viz/build.sh 重生。
viz/R/primitives.R 至 viz/R/primitives_19.R(按域組)viz/R/agent_primitives.Rviz/R/team_primitives.R| 函 | 簽 | 目 |
|---|---|---|
.lw(s, base) | (scale, base=2.5) | 比覺線寬 |
.aes(...) | ggplot2::aes 別 | 簡美映 |
hex_with_alpha(hex, alpha) | (string, 0-1) | 加 alpha 於 hex 色 |
brighten_hex(hex, factor) | (string, factor=1.3) | 亮 hex 色 |
dim_hex(hex, factor) | (string, factor=0.4) | 暗 hex 色 |
glyph_<name>(cx, cy, s, col, bright) -> list() 簽* s 比因col、廓用 bright、透用 hex_with_alpha()*_glyphs.R"status": "pending""done"* s:硬碼素值比變時破ggfx::with_outer_glow()、勿於符函內加暈get_cyberpunk_colors()→渲誤primitives*.R、代於 agent_primitives.R、團於 team_primitives.R