Real hand painted hallucinations mathmaticly mapped enginw with sound
  • HTML 44.3%
  • JavaScript 29.1%
  • Python 24.5%
  • CSS 1.6%
  • Shell 0.3%
  • Other 0.2%
Find a file
GFourteen c0cc6c7fe2 feat(engine): zoom-fractalize (mode E) + combiner + .uvm sound↔image round-trip + sound rebuild + mobile gate
Replace the rejected 3D-world fly-through with the signed-off zoom-fractalize model and
unify image/sound/fractal under one shared coefficient field.

Engine — zoom-fractalize (viewer):
- wheel zooms the REAL reconstruction; flat over-zoomed regions fractalize in the piece's
  own equation. Mode E (n3): complex Newton z3-K -> 3D cubic continuation x3-2y3-z3=K
  (grad g = (3x2,-6y2,-3z2)); cellular (Worley) micro-detail that subdivides on zoom;
  base-ten octaves (x sqrt10), %1000 decimal coordinate-wrap (no precision dead-end);
  sin/cos domain-warp navigators; palette basin colouring; crossfade (not superimposed);
  infinite, no bottom-out. Old infinity button -> reset-view. Abstract grower deleted.
- fractest.html (5-panel A/B/C/D/E compare) + tentest.html (base-ten infinite zoom).

The combiner (combiner.js, FT_COMBINER):
- one shared field C={(r,c,v)} + palette + dims with transforms Phi_img/Phi_snd/Phi_frc;
  solveField/fractalize/localEntropy/coeffField. Master form on equations.html + docs.

.uvm sound<->image round-trip (uvm.js + audio.html):
- .uvm = standard WAV + custom UVME RIFF chunk carrying serialized C (CRC32, byte-exact).
  audio.html takes either sound-in (->exact image) or image-in (->C->music + uvm/wav).
  Per-template + uploads downloads of .uvm and .wav. renderPCM offline-renders the music.

Sound rebuild (sonify.js):
- Karplus-Strong plucked-string synthesis (guitar/bass) + convolution reverb; stride-rotated
  round-robin read-out decorrelates pitch from time (kills the low->high strobe); violin/flute
  vibrato. Defaults: loop OFF, instrument = guitar (plucked).

Data + platform:
- ftcore/generative.py always keeps top-K IFS maps; all 333 templates carry real maps (no empty maps).
- mobile/no-GPU gate (FT.NO_ENGINE) skips engines on phones; warnings + per-page TL;DR everywhere.
- footer About/Terms/Privacy/Contact -> unityailab.com on all pages.
- "canvas" scrubbed from user-facing copy -> "engine".
- removed ~75MB orphan motion data + dead assets (ifs3d/ifszoom/ifs/video/world.js, motion/).
- full doc/wiki audit: quick-guide (for dummies) + every-variable reference + honest mode-E provenance;
  all stale fly-through wording -> zoom-fractalize/reset-view. Cache stamp -> 20260624k.

Docs: docs/FINALIZED.md archive added; TODO/RESUME/ARCHITECTURE/ROADMAP/SKILL_TREE synced.
2026-06-24 07:24:55 -06:00
.forgejo/workflows Release: rebrand to Uni Vs Matics + deploy + social images + launchers 2026-06-22 21:47:50 -06:00
docs feat(engine): zoom-fractalize (mode E) + combiner + .uvm sound↔image round-trip + sound rebuild + mobile gate 2026-06-24 07:24:55 -06:00
ftcore feat(engine): zoom-fractalize (mode E) + combiner + .uvm sound↔image round-trip + sound rebuild + mobile gate 2026-06-24 07:24:55 -06:00
web feat(engine): zoom-fractalize (mode E) + combiner + .uvm sound↔image round-trip + sound rebuild + mobile gate 2026-06-24 07:24:55 -06:00
.gitignore feat(engine): zoom-fractalize (mode E) + combiner + .uvm sound↔image round-trip + sound rebuild + mobile gate 2026-06-24 07:24:55 -06:00
build_web.py feat(engine): zoom-fractalize (mode E) + combiner + .uvm sound↔image round-trip + sound rebuild + mobile gate 2026-06-24 07:24:55 -06:00
make_social.py docs(web): stack-wide doc/social pass — per-page TL;DR, workflow page, canonical docs, Imprisonment social card 2026-06-23 07:12:48 -06:00
package-lock.json Release: rebrand to Uni Vs Matics + deploy + social images + launchers 2026-06-22 21:47:50 -06:00
package.json Release: rebrand to Uni Vs Matics + deploy + social images + launchers 2026-06-22 21:47:50 -06:00
README.md feat(engine): zoom-fractalize (mode E) + combiner + .uvm sound↔image round-trip + sound rebuild + mobile gate 2026-06-24 07:24:55 -06:00
requirements.txt Uni vs Matics — fractal math template engine + static site 2026-06-22 21:35:30 -06:00
RESUME.md feat(engine): zoom-fractalize (mode E) + combiner + .uvm sound↔image round-trip + sound rebuild + mobile gate 2026-06-24 07:24:55 -06:00
run.py feat(engine+web): native-res CDF 9/7 exact copies + enriched 3D world engine + viewer live-morph 2026-06-23 03:05:32 -06:00
screenshots.mjs Video engine + equations-by-image index 2026-06-22 22:06:57 -06:00
start.bat Release: rebrand to Uni Vs Matics + deploy + social images + launchers 2026-06-22 21:47:50 -06:00
start.sh Release: rebrand to Uni Vs Matics + deploy + social images + launchers 2026-06-22 21:47:50 -06:00
TODO.md feat(engine): zoom-fractalize (mode E) + combiner + .uvm sound↔image round-trip + sound rebuild + mobile gate 2026-06-24 07:24:55 -06:00

Uni vs Matics

Mathematical analysis & template engine for fractal art.

Uni vs Matics scans a corpus of fractal images and reduces each qualifying piece to mathematics, not an image file — then serves a static website that reconstructs, morphs, and sonifies those equations live in the browser. Images that don't yield useful, unique equations (fog/blur, TV-snow static, text/emoji-dominant frames, near-duplicates) are filtered out automatically.

The primary form is an exact reconstruction equation per image, per YCbCr channel — channel(x,y) = Σ_k c_k·ψ_k(x,y), a sparse multi-level CDF 9/7 biorthogonal wavelet (lifting) expansion at true native resolution. Each template also carries:

  1. Structured attributes — line-vector field, orientation field, colour palette + per-channel Gaussian mixtures, spatial colour field, luminance density grid, lumen-degradation propagation field, morph-allotment gradients, radial/angular FFT spectra.
  2. Symbolic equations — the same numbers as human-readable math.
  3. Generative IFS — affine maps + weights + variation + box-counting dimension that regenerate a fractalized image in the source's family.

Two engines consume this: an exact-copy engine (the viewer rebuilds the actual image at native resolution, with a deviation dial, a math-layer still, scroll-through-all, live-morph and a generative equation→music player) and a world engine (a flat layered math compositor — each piece is decomposed into its math layers: the reconstruction, glow, structure, colour field, edges and fine detail, all from the equation, stacked and blended flat with their own blend modes, geometry locked to the frame, then morphed piece→piece; no camera, no orbiting a 3D plane). The world engine exposes a full effects palette — every blend mode, the CSS filter set, per-layer toggles and an evolve (build/collapse/merge) control. Sound is music, not a drone: a generative composer derives a key/scale/tempo from each equation and plays a melody + bass + palette-chord pads, distinct per image. You can also turn your own image into its equation (and its own music) entirely in the browser.

The analysis is classical computer vision and signal processing throughout (OpenCV + NumPy + SciPy) — no OCR, no trained models. Coefficients ship compactly as LEB128 delta-varint positions + Int16 values (base64), and the browser runs a 9/7 inverse that is byte/pixel-identical to the analyzer.

Docs: structure → docs/ARCHITECTURE.md · capabilities → docs/SKILL_TREE.md · milestones → docs/ROADMAP.md · visitor-facing pipeline → web/workflow.html · deep reference → web/docs.html.


Layout

ftcore/        analysis + reconstruction engine (io, detect, analyze, generative, reconstruct, template, uniqueness)
run.py         CLI: corpus → templates (multiprocessing); loads NATIVE rgb for reconstruction
build_web.py   templates → static-site data bundle (web/data/: dv1 coeffs, webp thumbs, motion DNA + per-piece motion)
web/           the static site — landing, browser, viewer (exact-copy engine), video (world engine),
               equations, uploads (in-browser equationalizer), workflow, docs/wiki + assets
make_social.mjs  Playwright → greyscale 3D-still collage social image (web/social/collage.png)
screenshots.mjs  Playwright capture → per-page social images
docs/          ARCHITECTURE.md · SKILL_TREE.md · ROADMAP.md (canonical project docs)
TODO.md        project task list (original spec captured verbatim)
RESUME.md      session handoff

Run the engine

# from this directory
python run.py --input ../downloads/deviantart --output ./out_full --workers 14
python run.py --input ../downloads/deviantart --output ./out --limit 30 --no-mp   # smoke

# export the static-site data bundle
python build_web.py --templates ./out_full --web ./web

Outputs: out_full/templates/*.json + *.eq.txt, out_full/rejected.json (every dropped image + reason), out_full/summary.json.

Run the website

The site is pure static (HTML/CSS/JS + JSON) and fetch()es its data, so it must be served over HTTP — file:// won't work.

cd web && python -m http.server 8080      # → http://localhost:8080/

Deploy

Pure-static deploy to the lab pages host via Forgejo Actions (.forgejo/workflows/deploy.yml): on push to main, web/ is rsynced to univsmatics.git.unityailab.com (lab convention: <lowercased-repo-name>.git.unityailab.com, served by the wildcard nginx vhost).

Auth is the box's SSH key — there is nothing to log into. git@git.unityailab.com:UnityAILab/UniVsMatics.git push/clone/fetch all work via the SSH key (ssh -T git@git.unityailab.com"successfully authenticated"). NEVER build a login form / password→token / OAuth helper to reach Forgejo — it's SSH-key auth for git ops.

The repo MUST live under the UnityAILab org (not a personal GFourteen/ namespace). The deploy Action reads the org-level secrets PAGES_DEPLOY_KEY / PAGES_DEPLOY_HOST / PAGES_DEPLOY_USER; a personal-namespace repo can't see them, so the rsync step has no key and nothing ships. Org push-create is disabled on this Forgejo, so a new org repo is created (or a personal one transferred) in the web UI, then pushed over SSH. Requires Actions enabled on the repo + an online org runner.

Fixed 2026-06-22 — the site 404'd because the repo was GFourteen/UniVsMatics (personal namespace, no org deploy secrets), and a tools/forgejo-login.mjs password-form had been built to "log in" (unnecessary — SSH already authenticates). Fix: deleted the login script, transferred the repo to UnityAILab, repointed the remote to the org URL, and pushed main → the Action fired on the org runner and the site went live. The issue was never auth/login — it was personal-namespace vs org-deploy.

Social images

python make_social.py builds one shared og:image: the real, full-colour, high-def reconstruction of "Imprisonment" rebuilt directly from its equation at native resolution, turned on its side (portrait → landscape, uniform scale + tiny centre-crop, no stretch) and text-scrubbedweb/social/collage.png (1200×630). Every page points its og:image/twitter:image at that single card and supplies its own tailored social description.

Cache-busting

Asset/data freshness is gated on one stamp: FT.VERSION in web/assets/common.js. FT.json() appends ?v= to every data fetch, and every <script src="assets/*.js?v=…"> tag carries the same query. Bump it on every deploy so browsers can't serve a stale JS/data mix (the root cause of the Phase 4 empty-lists / "Template not found" / dead-3D, all traced to cached pre-9/7 assets). web/version.txt is the human-readable build marker.


The source art

The corpus is one artist's body of work — vectored fractal pieces by a schizophrenic artist with photographic memory, who recalled the hallucinations they experienced and rendered them faithfully as fractal art. Uni Vs Matics exists to capture the mathematics underneath those recalled forms, so the structures can be studied, browsed, regenerated, and heard.


By GFourteen. Source art © its author. Self-hosted at git.unityailab.com.