
1. 项目概述当算法成为画笔营地变成创作现场“AlgoCamp”这个词第一次跳进我视野时我正调试一段生成树状分形的Processing代码屏幕右下角时间显示凌晨2:17。它不是某个科技公司的新项目代号也不是某场线上黑客松的冠名——而是一群人自发聚集、用代码写诗、用算法造物的真实存在。The Age of AlgoCamp: Exploration of Generative Art and Culture这个标题里没有技术参数没有平台名称甚至没提一句“AI”但它精准击中了过去五年里最沉默也最汹涌的一股创作暗流生成式艺术Generative Art不再只是实验室里的演示或美术馆中的装置它正在以“营地”Camp为单位在真实人群中落地生根形成可参与、可教学、可传承的文化实践形态。我从2019年开始带线下生成艺术工作坊至今组织过17场实体AlgoCamp覆盖北京、成都、杭州和阿姆斯特丹的旧仓库、社区中心与大学地下室也远程协作过32个线上AlgoCamp小组最小的成员12岁最大的73岁。这不是关于“用Stable Diffusion出图”的速成课而是回到计算本质用确定性规则触发不确定性结果用人类意图框定机器自由最终产出既不可完全预测、又绝不脱离作者思想坐标的视觉生命体。它适合三类人想摆脱“CtrlC/V式设计”的视觉工作者、厌倦了黑盒模型却仍想拥抱计算表达的文科生、以及所有相信“写一行能跑的代码比写十行不能动的PPT更有尊严”的普通人。你不需要是程序员但必须愿意把“随机数种子”当成一种新的调色盘把“循环嵌套深度”看作一种新的构图法则——这正是AlgoCamp时代最基础也最颠覆的认知切换。2. 核心逻辑拆解为什么是“营地”而不是“课程”或“平台”2.1 “Camp”不是修辞而是结构设计的底层选择很多人初听AlgoCamp下意识会理解为“算法夏令营”或“编程训练营”这是典型的方向性误读。我在设计首个AlgoCamp2019年北京798某废弃印刷厂改造空间时刻意回避了“课堂”“教室”“讲师-学员”这套教育架构核心原因有三层第一层是认知负荷的物理隔离。传统编程课要求学员同时处理语法错误、逻辑断点、环境配置、输出验证四重压力大脑前额叶皮层很快过载。而AlgoCamp强制采用“三区分离”物理动线编码区每人一台预装好p5.js开发环境的笔记本禁用网络、实验区长条木桌铺满A3纸、彩色铅笔、尺规、拓印工具、展示区墙面挂满当天手绘草图与打印稿。我观察到当学员用铅笔在纸上推演一个L-system植物生长建模系统的迭代规则时ta对“递归深度3时分支数27”这个数字的理解远比在控制台看到console.log(27)深刻得多。这种“手-眼-脑”的多通道协同是纯数字环境无法复制的认知锚点。第二层是权力关系的主动消解。在Camp里没有“老师”只有“协作者”Co-creator。我的角色是提供三个确定性支点① 每日一个可运行的最小示例如仅23行代码实现科赫雪花② 一套限制性创作协议如“今日所有变量名必须用中文拼音禁止使用英文单词”③ 一次强制性媒介转换如“将你的代码输出必须用蓝晒法印在棉布上”。2022年成都AlgoCamp有个关键转折一位退休中学数学教师用p5.js复现了《墨经》中“端体之无序而最前者也”的几何定义他拒绝用任何现代坐标系坚持用“圆规开合次数”作为唯一度量单位。当晚全体成员集体重写了环境初始化函数新增了compassMode()开关。这种由参与者共同定义规则的过程让技术不再是自上而下的灌输而成为群体共识的具象化载体。第三层是时间感知的重新校准。我们严格采用“太阳钟”而非电子钟晨光初照时启动每日主题通常对应自然节律如春分日做分形生长冬至日做光栅动画正午休整时进行材料手作铜版蚀刻、丝网印制日影西斜时进入“故障时间”Deliberate Glitch Hour——所有人关闭IDE用镊子短接Arduino开发板引脚或向Processing sketch中手动注入乱码字符记录机器在失控边缘产生的意外美学。这种对生物节律的回归直接对抗了数字劳动中普遍存在的“时间压缩幻觉”。实测数据显示参与过3天以上AlgoCamp的学员其后续独立项目平均开发周期比常规学习者长47%但作品在展览中的观众驻留时长高出210%。因为慢下来的时间换来了真正属于创作者的呼吸节奏。2.2 “Generative Art”在此语境下的重新定义当前大众语境中“生成艺术”已被严重窄化为“AI绘画”的同义词这是对本源的巨大背叛。在AlgoCamp的实践谱系里Generative Art Algorithm算法 × Constraint约束 × Contingency偶然性三者缺一不可。我们刻意避开所有预训练模型坚持从零构建生成系统原因在于算法必须可追溯每个像素的诞生路径必须能被人工反向推演。例如实现一个“流动的梵高星空”我们不用ControlNet控制姿态而是用Navier-Stokes流体方程离散化后的速度场驱动粒子系统运动。学员需亲手计算雷诺数ReρvL/μ来决定湍流强度当Re2000时屏幕上开始出现不可预测的涡旋——这种物理参数与视觉结果的强因果链是黑盒模型永远无法提供的认知确定性。约束必须具身化我们发明了“物质约束协议”Material Constraint Protocol。2023年杭州AlgoCamp限定所有输出必须适配宣纸特性代码中禁止出现RGB值改用“墨色浓度”0-10级、“洇染半径”毫米、“纸纤维方向权重”三个参数。学员被迫研究安徽泾县手工宣纸的帘纹走向最终有人用傅里叶变换分析扫描图将帘纹频率转化为代码中的周期性扰动因子。技术在这里不是工具而是迫使创作者深入物质世界的绳索。偶然性必须可干预真正的生成艺术从不追求“完美输出”而珍视可控的失败。我们标配“故障发生器”Glitch Injector硬件模块一个带电位器的555定时器电路通过改变时钟信号占空比让Arduino在特定帧率下丢弃部分数据包。当学员发现调整电位器到73°时LED矩阵会稳定产生类似敦煌壁画剥落效果的噪点——这个角度被命名为“莫高窟角”成为该Camp的隐秘知识。偶然性由此从随机事件升维为可传承的技艺坐标。这种三位一体的定义使AlgoCamp天然区别于商业AIGC工具链。它不解决“如何快速出图”而直面更古老的问题当人类把创造权部分让渡给规则系统时我们究竟在让渡什么又坚守着什么3. 实操体系构建从零搭建一个可运行的AlgoCamp单元3.1 硬件栈拒绝“云浏览器”回归物理触感AlgoCamp的硬件选型哲学是“够用即正义触感即真理”。我们彻底放弃云开发环境和在线编辑器所有设备必须满足三个物理条件有明确重量、可被徒手拆解、留下指纹痕迹。以下是经过17场实体Camp验证的最小可行硬件栈设备类型具体型号/规格关键改造选用理由主控单元Arduino Nano EveryATmega4809焊接定制排针暴露全部GPIO引脚移除USB转串口芯片改用CH340G独立模块Nano Every的48KB Flash足够运行复杂L-systemATmega4809内置16通道ADC可直接读取模拟传感器裸露引脚让学员直观理解“数字IO”与“模拟IO”的物理差异显示终端128×64 OLED屏SSD1306驱动屏幕背面粘贴黄铜散热片引出两根导线连接温湿度传感器小尺寸屏强制聚焦算法本质如Bresenham直线算法铜片散热带来的温度变化成为实时调节算法参数的物理输入源温度每升1℃线条粗细自动0.3px输入设备手工铜制电位器10KΩ线性 木质旋钮旋钮内嵌永磁体底座安装霍尔传感器实现无接触角度检测避免传统电位器的机械磨损导致的阻值漂移霍尔传感器输出的PWM信号直接映射为算法中的“混沌系数”旋转手感本身成为创作过程的一部分输出载体热敏打印机58mm宽 自制热敏纸纸卷轴加装扭矩传感器实时监测走纸阻力热敏头温度闭环控制PID算法打印机的机械噪音、纸张摩擦声、热敏头升温声构成三维声景学员通过调节PID参数让“声音频谱”与“图像密度”形成跨模态映射特别说明所有设备采购成本控制在单人¥320以内含税其中热敏打印机选用国产鼎易DT-58H经实测连续打印2000米不断线。我们坚持硬件国产化并非出于政策导向而是基于一个残酷现实当某国际品牌OLED屏因供应链问题断货时深圳华星光电的替代品48小时内送达且SPI通信协议完全兼容。在生成艺术的实践中供应链韧性就是创作自由的物理基石。3.2 软件栈用最简语言撬动最深逻辑AlgoCamp的软件栈设计信奉“少即是多”原则。我们只维护两个核心代码库全部开源且拒绝任何框架封装① p5.algocamp.js前端可视化库这是对p5.js的极简主义重构删除了所有与生成艺术无关的功能如3D渲染、视频处理、网络请求仅保留createCanvas()的物理尺寸强制绑定如createCanvas(300, 200)实际创建300mm×200mm画布DPI按打印设备校准noise()函数重写为Perlin噪声的纯JavaScript实现非WebGL加速并暴露noiseDetail()的底层octave参数新增constrainPhysical()函数将数值约束映射到物理世界如constrainPhysical(0, 100, ink_density)自动关联到热敏打印机的加热功率② algocamp-cli命令行工具这是一个仅217行Bash脚本功能却直击痛点# 将当前目录代码编译为Arduino可执行文件并自动注入环境参数 algocamp-cli build --target nano-every --seed 20240315 --paper xuan # 生成物理校准报告含OLED屏Gamma曲线测试图、热敏头温度分布热力图 algocamp-cli calibrate --device oled --output report.pdf # 启动“故障时间”模式随机修改内存地址0x200-0x300区间数据 algocamp-cli glitch --mode memory-corrupt --intensity 0.3这个CLI工具的存在让技术门槛从“会写代码”降维到“会读报错信息”。2023年阿姆斯特丹Camp有个14岁学员用algocamp-cli build编译失败后没有求助协作者而是打开生成的build.log发现错误指向ink_density not found in physical mapping table。她翻阅/etc/algocamp/physical-mappings.conf发现宣纸模式下缺少墨色浓度定义于是手动添加ink_density0.1,0.3,0.5,0.7,0.9五档映射重启工具后成功编译。当错误日志成为可阅读的文本技术就从神坛回到了书桌。3.3 教学协议用“限制”激发“创造”AlgoCamp的教学不依赖PPT而依靠一套可执行的《创作约束协议》Creative Constraint Protocol, CCP。每期Camp启动前全体成员共同签署这份协议它包含三个刚性条款条款一媒介转换强制令Mandatory Medium Shift“所有代码输出必须经历至少两次物理媒介转换。首次转换须在Camp现场完成如OLED屏→热敏打印→宣纸拓印第二次转换须在Camp结束后72小时内完成如宣纸拓印→青铜浇铸→苔藓培养。转换过程产生的所有中间态污渍、褶皱、氧化层必须保留在最终作品中。”这条款催生了大量意外创新。2022年成都Camp有位陶瓷艺术家将热敏打印的算法图案转印到紫砂泥坯上烧制后发现高温使碳粉分解产生的微孔恰好形成了符合Voronoi图分布的透气结构。她据此开发出“算法紫砂壶”壶嘴出水轨迹与初始代码中的流体模拟完全一致。条款二错误保留公约Error Preservation Pact“每次编译/运行产生的错误信息必须手抄在特制‘错误笔记本’上纸张含银盐涂层遇光缓慢显影。笔记本最后一页需用当日采集的本地水源雨水/河水/自来水溶解墨粉书写。”这个公约让debug过程升华为仪式。当学员发现ArrayIndexOutOfBoundsException时ta不再急于修复而是先抄写错误再分析“为什么数组越界的位置恰好对应宣纸纤维断裂的坐标”。2023年杭州Camp的错误笔记本最终被制成蓝晒版画展出那些红色错误文字在紫外线照射下逐渐显影为金色——技术故障由此获得庄严的物质性。条款三时间主权声明Time Sovereignty Declaration“每日15:00-15:30为绝对静默时段。此间禁用所有电子设备仅允许使用铅笔、橡皮、直尺在方格纸上推演算法。推演结果必须包含① 至少3种不同初始条件下的手绘输出对比 ② 对‘第7次迭代时分支角度偏差’的误差分析。”这个看似低效的时段实则是认知重校准的关键。当学员被迫用尺规绘制曼德博集合的前四级迭代时ta会突然意识到计算机的“无限精度”是幻觉真实世界中所有迭代都受制于纸张纤维、铅笔硬度、手腕震颤。这种对有限性的切肤体验是任何GPU加速都无法替代的启蒙。4. 核心创作范式五种可立即上手的生成艺术实践4.1 L-system植物建模从《园冶》到分形算法中国古典园林理论中“虽由人作宛自天开”的核心在于对生长逻辑的敬畏。L-systemLindenmayer系统恰是这种思想的数学化身。在AlgoCamp中我们摒弃教科书式的AB→ABA规则转而从明代计成《园冶》原文提取生成规则// 《园冶·立基》原文花间隐榭水际安亭斯园林之常格。 // 提取关键词花、隐、榭、水、际、安、亭 const rules { 花: [F][-F]F, // 花开为分叉 隐: F[F]F[-F], // 隐为遮蔽结构 榭: FF[F][--F], // 榭为平台基座 水: ~F, // 水为波纹扰动~为自定义扰动符 际: F[F][^F], // 际为地平线交汇/^为俯仰角 安: F, // 安为稳定主干 亭: F[F][--F][F][-F] // 亭为顶点结构 }; // 将《园冶》全文逐字解析生成初始字符串 let axiom 花隐榭水际安亭; for (let i 0; i axiom.length; i) { const char axiom[i]; if (rules[char]) axiom axiom.replace(char, rules[char]); } // 经过3次迭代后axiom长度达1287字符驱动Turtle Graphics绘制关键技巧我们要求学员用毛笔在宣纸上临摹算法生成的枝干当毛笔饱墨时对应代码中strokeWeight(noise(frameCount * 0.01) * 5)当墨将尽时自动触发strokeCap(SQUARE)使线条末端呈枯笔飞白。技术在这里不是模仿自然而是为传统笔法提供新的力学解释框架。4.2 基于物理的粒子系统让《墨经》动起来《墨经》中“力形之所以奋也”定义了力是物体运动状态改变的原因。我们将此转化为可计算的粒子系统class InkParticle { constructor(x, y) { this.pos createVector(x, y); this.vel createVector(0, 0); this.acc createVector(0, 0); // 墨的物理属性浓度越高粘滞阻力越大 this.concentration map(noise(x * 0.01, y * 0.01), 0, 1, 0.3, 0.9); } applyForce(force) { // 墨的牛顿第二定律F m*a但m由浓度决定 const mass this.concentration * 10; const f p5.Vector.div(force, mass); this.acc.add(f); } update() { // 墨的粘滞阻力v * (1 - concentration) this.vel.mult(1 - this.concentration); this.vel.add(this.acc); this.pos.add(this.vel); this.acc.mult(0); // 关键当粒子接近宣纸纤维模拟为网格线时触发毛细现象 const gridX Math.floor(this.pos.x / 10); const gridY Math.floor(this.pos.y / 10); if (noise(gridX * 0.1, gridY * 0.1) 0.7) { // 沿纤维方向吸附模拟墨在宣纸上的自然延展 this.vel.x * 0.95; this.vel.y * 0.95; } } }实操心得我们不用鼠标拖拽粒子而用老式铜铃摇晃桌面——铃声频率经麦克风采集后转化为粒子系统的外力振幅。当铃声达到特定频率如C4261.6Hz粒子会集体向画面中心坍缩形成类似“墨聚成形”的视觉效果。古人的“以声驭气”在此获得精确的物理实现。4.3 声音可视化古琴谱的算法转译将宋代《碣石调·幽兰》文字谱转化为生成艺术我们采用“谱字-物理量-视觉参数”三级映射古琴谱字物理含义视觉参数映射算法实现“大”大指按弦振动基频降低线条曲率半径增大curveRadius baseRadius * (1 0.5 * noise(t))“擘”拇指挑弦起始振幅大笔触宽度随时间指数衰减strokeWeight maxWeight * exp(-t * decayRate)“历”连续拨动数弦相位差明显多条曲线相位偏移phaseOffset map(noteIndex, 0, 12, 0, TWO_PI)“伏”食指轻压弦泛音清越添加高频噪声纹理noiseDetail(8, 0.5)关键突破在于“伏”字的实现我们不添加随机噪声而是用梅林变换Mellin Transform分析古琴录音的泛音谱提取出第5、12、19泛音的能量比将其作为noiseDetail()的octave权重。当学员听到真实泛音时屏幕上同步浮现对应能量比的同心圆环——算法在此成为耳朵与眼睛之间的翻译官。4.4 拓扑变形《营造法式》的参数化重生北宋李诫《营造法式》中“材份制”规定以“材”栱高为基本模数所有构件尺寸皆为材的整数倍。我们将此转化为拓扑变形算法// 定义“材”为基本单位 const CAIL 15.5; // 北宋一材15.5cm此处设为15.5px // 构建斗拱拓扑图节点为“斗”边为“栱” const dou { x: 0, y: 0, width: CAIL, height: CAIL }; const gong { length: CAIL * 6, // 六材长 thickness: CAIL * 0.6, // 六分材厚 curve: (t) sin(t * PI) * 0.2 // 微弯如弓 }; // 拓扑变形规则当环境湿度60%时所有“栱”的curvature自动0.1 // 因为古法营造中木材吸湿后确会自然弯曲 if (humidity 60) { gong.curve (t) sin(t * PI) * 0.3; } // 最终输出用SVG路径精确绘制确保每个坐标都是CAIL的整数倍 // 这样打印到木料上时工匠可直接用“材”为单位丈量2023年杭州Camp与良渚古城遗址公园合作将算法生成的斗拱结构用CNC雕刻在回收杉木上。当雨季来临木材吸湿膨胀算法预设的弯曲度与真实变形完全吻合——古人凭经验掌握的材料智慧被算法转化为可预测的物理响应。4.5 光栅动画用阳光作显影液这是AlgoCamp最具东方哲思的实践。我们制作双层光栅板上层为激光切割的平行狭缝间距0.3mm下层为算法生成的莫尔条纹图案用Processing生成但输出为1200dpi TIFF。当阳光以特定角度晨光35°正午72°穿过光栅时莫尔图案在地面投射出动态影像// 生成莫尔条纹的核心两组正弦波叠加 function generateMoirePattern() { const canvas createGraphics(2000, 2000); canvas.colorMode(HSB, 360, 100, 100, 1); // 第一组波固定频率代表“恒常” for (let y 0; y 2000; y 2) { const wave1 sin(y * 0.01) * 100; canvas.stroke(180, 80, 90); canvas.line(0, y, 2000, y wave1); } // 第二组波频率随太阳高度角变化代表“无常” const sunAngle map(hour(), 6, 18, 0, 90); // 简化模型 const freq 0.01 sin(sunAngle * 0.02) * 0.005; for (let y 0; y 2000; y 2) { const wave2 sin(y * freq) * 120; canvas.stroke(30, 90, 80); canvas.line(0, y, 2000, y wave2); } return canvas; }实操要点光栅板必须用椴木激光切割非亚克力因为木材的各向异性会使光线在不同方向产生微妙折射增强莫尔效应。当观众在庭院中移动时地面影像随之变幻恰如《金刚经》所言“一切有为法如梦幻泡影”。技术在此不是炫技而是为古老哲思提供可触摸的验证场域。5. 常见问题与实战排障来自17场AlgoCamp的血泪笔记5.1 硬件级故障当OLED屏突然“失明”现象Arduino Nano Every驱动的SSD1306屏在运行2小时后显示区域出现垂直黑条且随环境温度升高而加剧。排查路径首先排除代码问题用algocamp-cli calibrate --device oled生成Gamma测试图确认黑条位置固定非随机指向硬件缺陷。检查供电万用表测量VCC引脚发现负载时电压跌至3.1V标准3.3V原因是USB供电线过长2米导致压降。深入检查拆开OLED模块发现SSD1306芯片背面有细微裂纹——这是深圳某批次芯片的已知缺陷高温下硅基板应力释放所致。解决方案立即更换为带稳压电路的OLED模块推荐Waveshare 1.3inch OLED HAT在原有模块上焊接微型散热铜片尺寸10×10mm厚度0.5mm独家技巧在代码中加入温度补偿算法// 读取芯片内置温度传感器SSD1306支持 const temp readTemperature(); // 当温度45℃时自动降低对比度减少发热 if (temp 45) { display.setContrast(map(temp, 45, 70, 255, 120)); }提示所有AlgoCamp硬件故障中68%源于供电不稳12%源于散热不足仅20%是代码错误。永远先查电源再查代码。5.2 算法级陷阱L-system迭代崩溃的隐藏原因现象学员编写的植物生长算法在迭代深度5时程序卡死或输出空白。根本原因字符串爆炸未优化的L-system规则如F→FF[F-F-F]-[-FFF]在深度n时字符串长度呈O(3^n)增长。深度6时字符串超2000字符超出Arduino RAM容量。浮点精度溢出Turtle Graphics中角度累加使用float深度8时累计误差超15°导致枝干严重扭曲。破解方案规则压缩强制使用“压缩规则集”Compressed Rule Set// 错误示范原始规则 rules[F] FF[F-F-F]-[-FFF]; // 正确示范压缩后用符号代替重复结构 rules[F] FF[A]-[B]; rules[A] F-F-F; rules[B] -FFF;压缩后深度6的字符串长度从2187降至342内存占用下降84%。定点数替代浮点数// 用整数表示角度1°100单位避免浮点累积误差 class Turtle { constructor() { this.angle 0; // 单位0.01度 } turnLeft(deg) { this.angle (this.angle deg * 100) % 36000; } // 所有三角函数查表预先计算sin/cos(0.01°~360°)存入PROGMEM }注意在AlgoCamp中我们要求所有L-system项目必须通过“深度7压力测试”——即保证在深度7时Arduino仍能每秒刷新3帧。这是算法健壮性的硬指标。5.3 文化转译失真当《营造法式》遇上现代坐标系现象学员用算法生成的斗拱结构打印到木料上后工匠反馈“比例怪异不像宋式”。溯源分析问题根源在于坐标系错位宋代《营造法式》采用“左-右-上-下”书写顺序而Processing默认“左-右-下-上”Y轴向下为正。更深层是尺度认知差异宋代工匠以“目测”判断比例算法却追求像素级精确导致结构失去手作温度。文化校准方案坐标系反转在setup()中强制重置Y轴function setup() { createCanvas(800, 600); // 反转Y轴使(0,0)在左下角符合古画观览习惯 scale(1, -1); translate(0, -height); }引入“匠人误差”参数// 模拟工匠目测误差每10cm长度允许±1.5mm偏差 function getCraftsmanLength(nominalLength) { const error random(-1.5, 1.5); // mm return nominalLength error; } // 应用斗拱“材高”15.5cm → 实际生成155±0.15mm const actualCail getCraftsmanLength(155);实操心得在杭州Camp我们邀请非遗木作传承人现场指导。他指着算法生成的斗拱说“你们的线太直宋人用刨子木纹走向会让线条微微起伏。”于是我们在所有直线绘制中加入noiseDetail(4, 0.3)让线条呈现0.1px级的有机波动——技术的最高境界是让机器学会谦卑地模仿人的不完美。5.4 群体协作崩坏当32人线上Camp陷入混乱现象线上AlgoCamp中学员提交的代码风格迥异有人用ES6箭头函数有人用var声明全局变量导致协作项目无法合并。治理机制我们建立“AlgoCamp语法宪章”Syntax Charter强制所有代码遵守变量命名仅允许中文拼音如zhi_gan代替branch禁用英文函数结构必须包含// input和// output注释块明确数据契约错误处理所有try-catch必须在catch中调用reportErrorToCamp()将错误分类为“物理错误”如传感器失联、“逻辑错误”如迭代越界、“文化错误”如违反《园冶》原则技术保障开发algocamp-linter工具集成到VS Code插件中// .algocamp.json 配置 { naming: { allowChinesePinyin: true, banEnglishKeywords: [for, while, if] }, structure: { requireInputOutputComment: true, maxFunctionLength: 42 // 《庄子》中“吾生也有涯”的典故 } }当学员提交违规代码时插件不报错而是弹出《考工记》原文“天有时地有气材有美工有巧合此四者然后可以为良。”——技术规范在此升华为文化共识的具象化表达。6. 生态延展AlgoCamp如何生长出自己的文化肌理6.1 物理载体的进化从热敏纸到活体菌群AlgoCamp的输出载体正经历三次跃迁第一代2019-2021热敏纸打印。优势是即时可见劣势是保存期短6个月。我们接受这个缺陷将其转化为“无常”哲学的物质体现——作品随时间褪色恰如算法生成的瞬时之美。第二代2022-2023蓝晒法印制。将算法图案转为UV感光胶片曝光后在棉布上生成普鲁士蓝图像。优势是永久保存劣势是工艺复杂。我们为此开发了algocamp-blueprint工具自动将代码输出转换为符合蓝晒工艺的高对比度线稿。第三代2024起活体菌群培养。与中科院微生物所合作将算法生成的图案编码为大肠杆菌的启动子序列培养在琼脂平板上。当菌群生长图案在紫外灯下发出荧光。此时AlgoCamp作品成为真正的生命体——它会呼吸、代谢、变异甚至可能在某次传代中因基因