Preview
Text · 6.2 KiBIridescent flowers
Uno publication
This Kit publishes source code and rendering instructions. Uno currently rejects image files at commit, so generated PNGs are not stored in this repository. Run the commands below to create the standard and high-resolution artwork, then open index.html. Both reference images are excluded. verification.json records the completed local render checks.
Three distinct, bubbly five-petal flowers overlap and nest in a warm off-white field. Each flower has its own center, scale and rotation. Translucent color fields and luminous rims give the rounded petals an iridescent glass-like appearance. The artwork is a creative procedural composition, generated entirely from geometry, lighting functions and synthesized grain.
Open index.html directly in a browser to view the complete composition. The viewer scales the image without cropping and keeps its controls outside the artwork. The high-resolution link opens the larger export.
Construction
renderer.py constructs each floral silhouette from analytical cubic Bézier curves. Five rounded petals alternate with deep, smooth valleys, producing inflated, soft-edged outlines. Independent centers, scales, rotations and petal radii let the three flowers overlap while keeping their individual shapes legible. There are no characters or faces.
The lighting method combines smooth colored fields, translucent layering, distance-based bright and dark rim bands, and fine deterministic grain. Cyan, blue, violet, pink and warm highlights create the impression of curved glass. Narrow chromatic contours and pearlescent regions carry the sense of depth through the overlapping petals. lighting.json stores compact numerical amplitudes for smooth analytical light lobes, not a raster texture. The renderer generates every output pixel from these functions; it does not load image textures or runtime source imagery.
This is an analytical 2D artwork. It evokes Fresnel reflection, refraction and glass curvature through color and contour treatment rather than physically accurate ray tracing. The overlaps are composed layers, and their apparent depth is a visual effect.
Reproduce
Use Python 3.10 or newer. Install the dependencies in an isolated environment:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements-lock.txtrequirements-lock.txt pins the verified library versions. requirements.txt lists the supported version ranges for NumPy, SciPy and Pillow.
From this directory, generate the standard and larger exports:
python renderer.py
python renderer.py --scale 2 --output renders/high-res.pngThe default output is renders/final.png at 972 × 1202 pixels. --scale 2 evaluates the artwork at 1944 × 2404 pixels. Use --output to choose another destination. Both exports contain the clean artwork. Open index.html after rendering; the viewer uses relative local paths and requires no server or internet connection.
The default arrangement is --composition b: a small pearly back flower, a large cyan/violet middle flower, and an orange/blue front flower. Choose the alternate triangular arrangement with --composition a. Keep the same composition option on both export commands. --no-calibration selects the base analytical color fields without their additional smooth lighting coefficients.
Files
| File | Purpose |
|---|---|
renderer.py | Procedural floral geometry, lighting and export CLI |
geometry.py | Closed cubic Bézier petal paths and curve sampling |
material.py | Iridescent color fields and blending functions |
lighting.py, lighting.json | Smooth lighting functions and their numeric coefficients |
requirements.txt | Supported dependency versions |
requirements-lock.txt | Pinned dependency versions |
renders/final.png | Clean artwork, 972 × 1202 |
renders/high-res.png | Larger clean artwork export, 1944 × 2404 |
index.html | Local browser viewer |
The noise seed is fixed at 47 in renderer.py; there is no seed command-line option. Repeated renders with the same settings are reproducible within the same runtime. Library versions may cause small numerical differences. The high-resolution export evaluates the geometry and light fields at the larger resolution and synthesizes fresh deterministic grain for that size.
Customize the flowers
Edit a flower entry in COMPOSITIONS in renderer.py. Each arrangement contains exactly three entries, rendered in list order from back to front.
| Parameter | Effect |
|---|---|
center | Flower position as (x, y) in the 972 × 1202 coordinate system |
radius | Overall size in the same coordinate system |
rotation | Rotation in radians |
lengths | Five relative petal lengths; varies each petal independently |
widths | Five relative petal widths; controls roundness and spread |
valleys | Five radial valley positions; smaller values deepen the gaps between petals |
material.role | Spectral preset: outer for pearl/pink, middle for cyan/violet, or front for orange/blue |
material.warmth | Vertical shift of the warm color field |
material.hue | Subtle tint variation between flowers |
material.opacity | Layer transmission and strength of overlap |
Keep the lengths, widths and valleys sequences at five values to preserve the five-petal design. flower() in geometry.py also accepts five small angles offsets for petal asymmetry. Adjust the spectral fields in material.py and the rim treatment in renderer.py to change the glass finish. SEED in renderer.py controls the synthesized grain. The geometry and lighting remain procedural at every output size.
Design iterations
The included renders/flowers-*.png files preserve the design studies: two starting arrangements, then tighter nesting, distinct material roles, narrower glossy rims, partial color transmission and a final cooler top reflection. They contain only generated artwork. The published kit includes no source photographs, screenshots or comparison images.
The shapes use twenty cubic Bézier segments each. Five independent rounded petal tips alternate with five smoothly joined concave valleys. The three presets remain editable rather than being flattened into the output PNGs.