Preview

Text · 6.2 KiB

Iridescent 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.txt

requirements-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.png

The 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

FilePurpose
renderer.pyProcedural floral geometry, lighting and export CLI
geometry.pyClosed cubic Bézier petal paths and curve sampling
material.pyIridescent color fields and blending functions
lighting.py, lighting.jsonSmooth lighting functions and their numeric coefficients
requirements.txtSupported dependency versions
requirements-lock.txtPinned dependency versions
renders/final.pngClean artwork, 972 × 1202
renders/high-res.pngLarger clean artwork export, 1944 × 2404
index.htmlLocal 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.

ParameterEffect
centerFlower position as (x, y) in the 972 × 1202 coordinate system
radiusOverall size in the same coordinate system
rotationRotation in radians
lengthsFive relative petal lengths; varies each petal independently
widthsFive relative petal widths; controls roundness and spread
valleysFive radial valley positions; smaller values deepen the gaps between petals
material.roleSpectral preset: outer for pearl/pink, middle for cyan/violet, or front for orange/blue
material.warmthVertical shift of the warm color field
material.hueSubtle tint variation between flowers
material.opacityLayer 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.

Files