Claude Code Plugins

Community-maintained marketplace

Feedback

evolutionary-forms

@amadad/drawbot-redux
4
0

Generate and evolve abstract visual forms through a Darwinian selection process. Use when users want to create organic shapes, evolve visual designs, breed form variations, or explore parametric design through natural language descriptions like "soft protective curves".

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name evolutionary-forms
description Generate and evolve abstract visual forms through a Darwinian selection process. Use when users want to create organic shapes, evolve visual designs, breed form variations, or explore parametric design through natural language descriptions like "soft protective curves".
allowed-tools Read, Write, Edit, Bash, Glob, Grep

Evolutionary Form Generation

Create and evolve organic visual forms through parametric generation and selective breeding.

When to Use This Skill

Activate when the user:

  • Wants to generate abstract/organic visual forms
  • Mentions "evolve", "breed", or "iterate" designs
  • Describes forms with aesthetic terms ("soft", "protective", "organic", "bold")
  • Asks for variations on a visual theme
  • Wants to explore parametric design possibilities

Quick Start

# Initialize project
uv run python -m evolutionary_drawbot init

# Generate initial population
uv run python -m evolutionary_drawbot gen0 --population 16

# Generate with natural language constraints
uv run python -m evolutionary_drawbot gen0 --population 16 --prompt "soft protective 4 lobes"

# View contact_sheet.pdf, then record winners
uv run python -m evolutionary_drawbot select gen_000 --winners 1,5,9,13

# Breed next generation from winners
uv run python -m evolutionary_drawbot breed gen_000

# Check status anytime
uv run python -m evolutionary_drawbot status

The Darwin Loop

┌─────────────────────────────────────────────────────────┐
│                                                          │
│   1. GENERATE         2. REVIEW          3. SELECT       │
│   ───────────        ─────────          ────────        │
│   gen0/breed    →    contact_sheet.pdf  →  winners.json  │
│                                                          │
│                           ↓                              │
│                                                          │
│   4. BREED            ←────────────────────────          │
│   ───────                                                │
│   Creates next generation from selected winners          │
│                                                          │
└─────────────────────────────────────────────────────────┘

Output Structure

output/generations/
├── gen_000/
│   ├── population.jsonl      # Genome records (parameters + metadata)
│   ├── candidates/
│   │   ├── 0001.svg          # Individual form SVGs
│   │   ├── 0001_meta.json    # Rendering metadata
│   │   └── ...
│   ├── contact_sheet.pdf     # Grid view for selection
│   └── winners.json          # Selected winner indices
└── gen_001/
    └── ...

Natural Language Translation

The system translates descriptive words into parameter constraints:

Word Effect
soft High roundness, moderate tension, slight wobble
protective High envelope_factor, moderate lobe_depth
organic More wobble, moderate roundness
bold Deeper lobes, stronger presence
delicate Minimal wobble, shallow lobes, high roundness
flowing Low tension, high roundness

Example Prompts

# Soft, protective forms
--prompt "soft protective curves"

# Organic flower-like shapes
--prompt "organic flowing 5 petals"

# Bold, structured forms
--prompt "bold angular 3 lobes"

# Delicate, minimal shapes
--prompt "delicate subtle round"

Parameters

The soft_blob generator uses 8 parameters (stored normalized 0-1):

Parameter Range Description
lobe_count 2-6 Number of radial lobes
lobe_depth 0-1 Indent depth between lobes
envelope_factor 0.3-0.9 Protective/embracing quality
roundness 0-1 Curve smoothness
wobble 0-0.2 Organic irregularity
tension 0.3-0.9 Bezier curve tightness
aspect 0.6-1.4 Width/height ratio
rotation 0-360 Base orientation

Configuration

Edit config/brand_dna.json to customize:

  • Parameter ranges and defaults
  • Fill/stroke colors and widths
  • Evolution settings (mutation rate, population size)

CLI Commands Reference

init

Initialize project directories and verify config.

gen0

Generate initial population (generation 0).

uv run python -m evolutionary_drawbot gen0 [options]

Options:
  --population, -n INT    Population size (default: 16)
  --prompt, -p TEXT       Natural language constraints

render

Re-render candidates and contact sheet.

uv run python -m evolutionary_drawbot render GENERATION

select

Record selected winners by their index numbers.

uv run python -m evolutionary_drawbot select GENERATION --winners INDICES

Example:
  uv run python -m evolutionary_drawbot select gen_000 --winners 1,5,9,13

breed

Create next generation from selected winners.

uv run python -m evolutionary_drawbot breed GENERATION [options]

Options:
  --population, -n INT    Offspring count (default from config)

status

Show current evolution status and next steps.

uv run python -m evolutionary_drawbot status

Programmatic Usage

from evolutionary_drawbot import FormGenome, ParameterSpec
from evolutionary_drawbot.evolution import generate_population, breed
from evolutionary_drawbot.translator import translate_prompt
from evolutionary_drawbot.render import render_genome
from evolutionary_drawbot.contact_sheet import generate_contact_sheet

# Translate prompt to constraints
constraints = translate_prompt("soft protective 4 lobes")

# Generate population
population = generate_population(
    size=16,
    gen_num=0,
    prompt_constraints=constraints
)

# Render individual genome
render_genome(population[0], output_dir, canvas_size=(200, 200))

# Create contact sheet
generate_contact_sheet(population, "contact_sheet.pdf")

# Breed from winners
parents = [population[0], population[4], population[8]]
offspring = generate_population(
    size=16,
    gen_num=1,
    parents=parents,
    mutation_rate=0.2
)

Workflow Examples

Example 1: Explore "care and safety" aesthetics

# Start with protective, nurturing forms
uv run python -m evolutionary_drawbot gen0 -n 16 --prompt "protective nurturing soft"

# Review contact_sheet.pdf, select forms that feel most "safe"
uv run python -m evolutionary_drawbot select gen_000 --winners 2,7,11,15

# Breed and continue refining
uv run python -m evolutionary_drawbot breed gen_000

# After a few generations, you'll have a refined family of forms

Example 2: Create brand mark variations

# Start with specific structural constraints
uv run python -m evolutionary_drawbot gen0 -n 24 --prompt "bold 4 lobes organic"

# Select the most distinctive candidates
uv run python -m evolutionary_drawbot select gen_000 --winners 3,8,12,19,22

# Breed with larger population for more variation
uv run python -m evolutionary_drawbot breed gen_000 -n 24

Example 3: From random to refined

# Start completely random
uv run python -m evolutionary_drawbot gen0 -n 32

# Select interesting directions (no prior bias)
uv run python -m evolutionary_drawbot select gen_000 --winners 5,11,23,28

# Let the evolution discover the aesthetic
uv run python -m evolutionary_drawbot breed gen_000

Integration with DrawBot Designer

The evolved forms can be used in DrawBot layouts:

import drawBot as db
from evolutionary_drawbot.genome import load_population
from evolutionary_drawbot.form_generators import generate_soft_blob

# Load a winning form
population = load_population("output/generations/gen_003/population.jsonl")
winner = population[4]  # Form #5

# Use in a poster layout
db.newPage(612, 792)
path = generate_soft_blob(winner, center=(306, 500), size=300)
db.fill(0.2, 0.3, 0.4)
db.drawPath(path)

# Add text using the design system...

Troubleshooting

Problem Solution
No forms appear Check DrawBot is installed: uv sync --extra drawbot
Winners not saved Use 1-based indices, comma-separated
Diversity too low Increase mutation_rate in brand_dna.json
Forms too similar Select more diverse winners, increase population
Prompt not working Check keyword spelling (see translator.py)

Available Keywords

Softness/Hardness

soft, gentle, hard, angular, sharp

Protection/Safety

protective, safe, embracing, nurturing, sheltering

Organic/Natural

organic, natural, flowing, fluid

Strength/Boldness

bold, strong, powerful

Delicacy

delicate, subtle, light

Complexity

complex, simple, intricate

Shape

round, curved, wavy, scalloped

Proportion

tall, wide, compact

Structure

petals, lobes, flower, clover

Numbers

two, three, four, five, six (+ lobes/petals)

Files

evolutionary_drawbot/
├── __init__.py           # Package exports
├── __main__.py           # CLI entry point
├── cli.py                # Command implementations
├── parameters.py         # ParameterSpec with [0..1] normalization
├── genome.py             # FormGenome dataclass + persistence
├── evolution.py          # breed(), mutate(), generate_population()
├── translator.py         # NLP → parameter constraints
├── render.py             # Genome → SVG + metadata
├── contact_sheet.py      # PDF contact sheet generator
└── form_generators/
    └── soft_blob.py      # Bezier-based organic forms

config/
└── brand_dna.json        # Parameter ranges, style, evolution settings

Future Extensions

  • Additional form generators (crystalline, geometric, etc.)
  • Automated fitness evaluation
  • Layout template evolution
  • Color parameter breeding
  • Web-based selection UI