Adapt Generative Art¶
Adapt Generative Art — mvp.adapt_generative_art
Cluster: Creative & Media | Type: component | MCP Tools: 50
Overview¶
Generative art block that produces procedural imagery across multiple techniques — L-systems, cellular automata, fractals (Mandelbrot/Julia), context-free grammars, evolutionary art, Perlin noise, strange attractors, reaction-diffusion, particle systems, and CPPN — across image, SVG, OBJ, audio, and animated GIF modalities. Supports custom colour palettes, post-processing filter chains, layer composition, and optional headless PNG rendering via Puppeteer. Can also accept a goal context string to drive LLM-powered brief generation through JS/GLSL backends.
Launch readiness caveat
The core component test suite covers local generation, rendering, backend, persistence, and MCP paths. For first-user launch use, still run a clean-machine MCP smoke test before presenting this as frictionless: install the MCP server, run a simple generation such as generate_noise, save the result with artwork_save, and verify it can be reopened or previewed with artwork_preview. Optional paths such as Manim, Puppeteer/headless rendering, and LLM-assisted backend generation add useful capability but also add install and environment friction for non-technical users.
When to use:
- Generating procedural visuals or animations from mathematical or algorithmic descriptions
- Producing L-system plant or fractal imagery for synthetic training datasets or creative outputs
- Composing multiple generative layers with post-processing (blur, contrast, tone-mapping)
- Creating self-contained HTML/JS bundles for interactive generative sketches
Example:
from mvp.adapt_generative_art import AdaptGenerativeArtBlock, GenerativeInput
block = AdaptGenerativeArtBlock(name="gen_art")
result = block.infer(GenerativeInput(
op="generate_lsystem",
technique="lsystem",
axiom="F",
rule_string="F=F+F-F-F+F",
iterations=4,
width=512,
height=512,
palette="viridis",
))
# result.value.data_base64 → base64 PNG; result.value.svg_text → SVG markup
Works well with: adapt_image, adapt_blender, adapt_comfyui
Public API¶
GenerativeArtPatternRuntime¶
Stateless executable mechanism for adapt_generative_art's applied patterns.
Methods:
review_recommendation(params: ArtParameters, strategy: str) -> tuple[str, ...]¶
Return advisory provenance / fail-safe notes for one translation.
AdaptGenerativeArtBlock(AIBlock[GenerativeInput, GenerativeOutput, None])¶
Generative art block — routes by technique, converts to requested modality.
| Field | Type | Default |
|---|---|---|
name | str | 'adapt_generative_art' |
resource_bounds | ResourceBounds \| None | None |
usage | ResourceUsage | field(default_factory=ResourceUsage) |
Methods:
infer(data: GenerativeInput) -> Result[GenerativeOutput]¶
GenerativeInput(BaseModel)¶
Input to AdaptGenerativeArtBlock.
| Field | Type | Default |
|---|---|---|
op | str | 'generate_lsystem' |
technique | str | '' |
modality | str | 'image' |
params | dict | Field(default_factory=dict) |
seed | int | -1 |
width | int | 256 |
height | int | 256 |
iterations | int | 5 |
rule_string | str | '' |
axiom | str | '' |
fractal_type | str | 'mandelbrot' |
grammar_rules | dict | Field(default_factory=dict) |
fitness_fn | str | '' |
content_base64 | str | '' |
style_base64 | str | '' |
preset_name | str | '' |
genome_id | str | '' |
artwork_id | str | '' |
palette | str | 'viridis' |
palette_stops | list[str] | Field(default_factory=list) |
output_path | str | '' |
output_format | str | '' |
quality | str | 'medium' |
scene_type | str | '' |
expression | str | '' |
duration | float | 3.0 |
attractor_type | str | 'clifford' |
feed_rate | float | 0.055 |
kill_rate | float | 0.062 |
particle_count | int | 5000 |
cppn_layers | int | 3 |
compose_with | list[dict] | Field(default_factory=list) |
post_process | list[dict] | Field(default_factory=list) |
tone_map | str | 'none' |
content_weight | float | 1.0 |
style_weight | float | 1000000.0 |
lloyd_iterations | int | 0 |
backend | str | 'auto' |
goal_context | str | '' |
brief | str | '' |
custom_code | str | '' |
title | str | '' |
data | list[float] | Field(default_factory=list) |
headless_enabled | bool | False |
GenerativeOutput(BaseModel)¶
Output from AdaptGenerativeArtBlock.
| Field | Type | Default |
|---|---|---|
op | str | required |
data_base64 | str | '' |
output_path | str | '' |
modality | str | '' |
technique | str | '' |
width | int | 0 |
height | int | 0 |
seed_used | int | 0 |
iterations | int | 0 |
metadata | dict | Field(default_factory=dict) |
svg_text | str | '' |
obj_text | str | '' |
text_output | str | '' |
backend | str | '' |
file_format | str | '' |
palette_used | str | '' |
frame_count | int | 0 |
layers_composed | int | 0 |
filters_applied | list[str] | Field(default_factory=list) |
degraded | bool | False |
degradation_reason | str | '' |
html_bundle | str | '' |
AdaptGenerativeArtMCPBlock(AIBlock[MCPGenerativeArtInput, MCPGenerativeArtOutput, dict])¶
45-op generative art MCP block with SQLite persistence.
| Field | Type | Default |
|---|---|---|
name | str | 'adapt_generative_art_mcp' |
state | dict | field(default_factory=dict) |
db_path | str | field(default_factory=lambda: os.environ.get('GENERATIVE_ART_DB_PATH', _DEFAULT_DB)) |
resource_bounds | ResourceBounds | field(default_factory=ResourceBounds) |
usage | ResourceUsage | field(default_factory=ResourceUsage) |
Methods:
infer(data: MCPGenerativeArtInput) -> Result[MCPGenerativeArtOutput]¶
MCPGenerativeArtInput(BaseModel)¶
Input to AdaptGenerativeArtMCPBlock — 50 ops.
| Field | Type | Default |
|---|---|---|
op | Literal['generate_lsystem', 'generate_ca', 'generate_fractal', 'generate_grammar', 'generate_evolutionary', 'generate_noise', 'generate_random_walk', 'generate_style_transfer', 'set_modality', 'set_params', 'set_seed', 'artwork_save', 'artwork_get', 'artwork_list', 'artwork_delete', 'genome_save', 'genome_get', 'genome_list', 'grammar_store', 'grammar_list', 'preset_store', 'preset_list', 'preset_apply', 'set_palette', 'set_quality', 'generate_manim', 'palette_list', 'palette_preview', 'export_artwork', 'generate_reaction_diffusion', 'generate_attractor', 'generate_voronoi', 'generate_flow_field', 'generate_cppn', 'generate_domain_coloring', 'generate_neural_style', 'generate_shape_grammar', 'compose_layers', 'apply_filters', 'stats', 'get_info', 'op_inventory', 'artwork_preview', 'artwork_open', 'list_patterns', 'backend_capabilities', 'backend_validate_source', 'backend_render_source', 'backend_preview_source', 'backend_export_source'] | required |
technique | str | '' |
modality | str | 'image' |
params | dict | Field(default_factory=dict) |
seed | int | -1 |
width | int | 256 |
height | int | 256 |
iterations | int | 5 |
rule_string | str | '' |
axiom | str | '' |
fractal_type | str | 'mandelbrot' |
grammar_rules | dict | Field(default_factory=dict) |
fitness_fn | str | '' |
content_base64 | str | '' |
style_base64 | str | '' |
artwork_id | str | '' |
genome_id | str | '' |
preset_name | str | '' |
name | str | '' |
tags_csv | str | '' |
description | str | '' |
limit | int | 50 |
data_base64 | str | '' |
genome_data | list[float] | Field(default_factory=list) |
genome_fitness | float | 0.0 |
rules_json | str | '' |
palette | str | '' |
palette_stops | list[str] | Field(default_factory=list) |
output_path | str | '' |
output_format | str | '' |
quality | str | 'medium' |
scene_type | str | '' |
expression | str | '' |
duration | float | 3.0 |
attractor_type | str | 'clifford' |
feed_rate | float | 0.055 |
kill_rate | float | 0.062 |
particle_count | int | 5000 |
cppn_layers | int | 3 |
compose_with | list[dict] | Field(default_factory=list) |
post_process_chain | list[dict] | Field(default_factory=list) |
tone_map | str | 'none' |
content_weight | float | 1.0 |
style_weight | float | 1000000.0 |
lloyd_iterations | int | 0 |
backend | str | 'auto' |
goal_context | str | '' |
brief | str | '' |
custom_code | str | '' |
title | str | '' |
data | list[float] | Field(default_factory=list) |
headless_enabled | bool | False |
html_bundle | str | '' |
svg_text | str | '' |
obj_text | str | '' |
text_output | str | '' |
source_kind | str | 'sketch' |
source_text | str | '' |
render_target | str | 'html' |
timeout_ms | int | 5000 |
allowed_features | list[str] | Field(default_factory=list) |
resource_limits | dict | Field(default_factory=dict) |
MCPGenerativeArtOutput(BaseModel)¶
Output from AdaptGenerativeArtMCPBlock.
| Field | Type | Default |
|---|---|---|
op | str | required |
data_base64 | str | '' |
modality | str | '' |
technique | str | '' |
width | int | 0 |
height | int | 0 |
seed_used | int | 0 |
iterations | int | 0 |
metadata | dict | Field(default_factory=dict) |
svg_text | str | '' |
obj_text | str | '' |
text_output | str | '' |
backend | str | '' |
artwork_id | str | '' |
genome_id | str | '' |
name | str | '' |
found | bool | False |
count | int | 0 |
records | list[dict] | Field(default_factory=list) |
message | str | '' |
degraded | bool | False |
degradation_reason | str | '' |
output_path | str | '' |
file_format | str | '' |
palette_used | str | '' |
frame_count | int | 0 |
layers_composed | int | 0 |
filters_applied | list[str] | Field(default_factory=list) |
html_bundle | str | '' |
declared_ops | list[str] | Field(default_factory=list) |
handler_ops | list[str] | Field(default_factory=list) |
ops_drift | list[str] | Field(default_factory=list) |
completion_state | str | 'qualified-draft' |
warning_card | dict \| None | None |
evidence | list[str] | Field(default_factory=list) |
capability_used | str | '' |
validation_status | str | '' |
dependency_status | dict | Field(default_factory=dict) |
diagnostics | list[dict] | Field(default_factory=list) |
source_kind | str | '' |
render_target | str | '' |
GenerativeArtStore¶
SQLite-backed store for the adapt_generative_art MCP sub-package.
Constructor:
| Parameter | Type | Default |
|---|---|---|
db_path | str | ':memory:' |
Methods:
save_artwork(name: str = '', technique: str = '', modality: str = '', data_base64: str = '', svg_text: str = '', obj_text: str = '', text_output: str = '', html_bundle: str = '', width: int = 0, height: int = 0, seed_used: int = 0, iterations: int = 0, metadata: dict | None = None, tags: str = '') -> str¶
Save an artwork. Returns the assigned id.
get_artwork(artwork_id: str) -> dict | None¶
Retrieve an artwork by id.
list_artworks(tags_csv: str = '', limit: int = 50) -> list[dict]¶
List stored artworks, optionally filtered by tags.
delete_artwork(artwork_id: str) -> bool¶
Delete an artwork by id. Returns True if found.
save_genome(name: str = '', genome: list[float] | None = None, fitness: float = 0.0, technique: str = '', tags: str = '', metadata: dict | None = None) -> str¶
Save a genome. Returns the assigned id.
get_genome(genome_id: str) -> dict | None¶
Retrieve a genome by id.
list_genomes(limit: int = 50) -> list[dict]¶
List stored genomes.
store_grammar(name: str, rules: dict, description: str = '', tags: str = '') -> str¶
Store a grammar rule set. Returns the assigned id.
list_grammars(limit: int = 50) -> list[dict]¶
List stored grammars.
get_grammar(name: str) -> dict | None¶
Retrieve a grammar by name.
store_preset(name: str, technique: str = '', params: dict | None = None, description: str = '', tags: str = '') -> str¶
Store a parameter preset. Returns the assigned id.
get_preset(name: str) -> dict | None¶
Retrieve a preset by name.
list_presets(limit: int = 50) -> list[dict]¶
List stored presets.
count_all() -> dict[str, int]¶
Functions¶
agentic_planner_enabled(default_enabled: bool = True) -> bool¶
Decide whether the agentic (LLM) translate path should be used.
validate_art_axes(axes: Any) -> dict[str, Any]¶
Fail-safe-normalise an axes blob (e.g. an LLM fallback result).
validate_translation(params: ArtParameters) -> ArtParameters¶
Assert the resolved
ArtParameterscarries only in-vocabulary controlled axes.
MCP Tools¶
| Operation | Source |
|---|---|
generate_lsystem | generative_art_mcp |
generate_ca | generative_art_mcp |
generate_fractal | generative_art_mcp |
generate_grammar | generative_art_mcp |
generate_evolutionary | generative_art_mcp |
generate_noise | generative_art_mcp |
generate_random_walk | generative_art_mcp |
generate_style_transfer | generative_art_mcp |
set_modality | generative_art_mcp |
set_params | generative_art_mcp |
set_seed | generative_art_mcp |
artwork_save | generative_art_mcp |
artwork_get | generative_art_mcp |
artwork_list | generative_art_mcp |
artwork_delete | generative_art_mcp |
genome_save | generative_art_mcp |
genome_get | generative_art_mcp |
genome_list | generative_art_mcp |
grammar_store | generative_art_mcp |
grammar_list | generative_art_mcp |
preset_store | generative_art_mcp |
preset_list | generative_art_mcp |
preset_apply | generative_art_mcp |
set_palette | generative_art_mcp |
set_quality | generative_art_mcp |
generate_manim | generative_art_mcp |
palette_list | generative_art_mcp |
palette_preview | generative_art_mcp |
export_artwork | generative_art_mcp |
generate_reaction_diffusion | generative_art_mcp |
generate_attractor | generative_art_mcp |
generate_voronoi | generative_art_mcp |
generate_flow_field | generative_art_mcp |
generate_cppn | generative_art_mcp |
generate_domain_coloring | generative_art_mcp |
generate_neural_style | generative_art_mcp |
generate_shape_grammar | generative_art_mcp |
compose_layers | generative_art_mcp |
apply_filters | generative_art_mcp |
stats | generative_art_mcp |
get_info | generative_art_mcp |
op_inventory | generative_art_mcp |
artwork_preview | generative_art_mcp |
artwork_open | generative_art_mcp |
list_patterns | generative_art_mcp |
backend_capabilities | generative_art_mcp |
backend_validate_source | generative_art_mcp |
backend_render_source | generative_art_mcp |
backend_preview_source | generative_art_mcp |
backend_export_source | generative_art_mcp |