Dad, engineer, chronic AI tinkerer

Joined January 2017
16.9M views. 4.6k followers. $0 earned. What I learned building an AI influencer in 12 days 🧵
5
19
589
what should I use my @higgsfield credits on?
1
2
116
was on the old $5 sub, just switched to the $34 plan to see if the bot hype is real. giving it a week of real work, will post what it actually did
2
38
the new chatgpt terra 6.1 is crazy fast!
1
2
64
ran the "pelican riding a bicycle" test on chatgpt terra 6.1 at every reasoning level, low to ultra. none took more than a minute
1
3
72
tried recreating @daoho04's murmuration with terra 6.1 high, terra 6.1 ultra, sol 6.1 high and opus 5.5 high
in an ocean of gluttony, cast a fine net daoho.dev
1
1
1
2
298
And the prompt is the same for all 4 models: Build a zero-dependency TypeScript + Vite project that renders an ASCII-art artificial-life animation on a single full-screen <canvas>: several large {PREDATOR} hunting flocks/schools/herds of small {PREY}, seen from directly above. It must look and feel like a living ASCII painting, not a game. ## Visual style (match exactly) - Pure black background (#000) overlaid with a faint visible cell grid (1px lines, rgba(255,255,255,0.055)), pre-painted to an offscreen canvas. - Everything snaps to that grid. Cell width = clamp(round(viewportWidth/124), 8, 13)px, cell height = round(cellWidth * 1.45). Font: "Geist Mono" weight 600 (Google Fonts), glyph size ≈ 0.74 × cell height, centered in the cell. Respect devicePixelRatio (cap at 2). - PREY: one tiny glyph per cell (e.g. "-" for fish; pick something fitting like "v" for birds, "." for insects, "·"/"-" for herd animals). Pale blue-white, alpha bucketed into ~5 levels: dimmer = farther away (each prey has a depth 0.55–1), brighter when panicking or turning hard (a "glint"). Nearer prey wins when two land on the same cell. - PREDATORS: rasterized cell-by-cell from a procedural top-down silhouette. Each covered cell is a filled grey block (shade from lighting) with a dark glyph on top: - Supersample each cell (center + 4 sub-samples). ≥60% coverage → solid block; partial → no block, just a light edge glyph (":;" heavy, ".',`" light) for an anti-aliased outline. - Lighting: a rounded back lit from the top-left; the middle of the body is brighter and the flanks fall off into shadow. Glyph density follows shade: ramp ":;t%SX8#@" (sparse on bright, dense in shadow). - Body parts get their own treatment: a bright ridge line down the spine ("@8%", near-white block), dark eyes ("o" on a near-black block), appendages with their own glyph set ("%;tS:") and dimmer shading, species markings (stripes, spots) as dark blocks ("#%@"). - Per-species tint as RGB multipliers on the grey (cool slate, warm brown, etc.). - Shimmer: each cell's glyph colour re-rolls on a staggered clock (~2.4 Hz). About 9% of cells flash an accent colour (#e0892c #e03a32 #b44ae0 #33c8cc #3cb54a #3150e8 #d9c14a), ~4% flash white, and the rest are near-black (#0e0f13 / #1b1d24). - Glyphs are keyed to body coordinates (position along the body × position across it), hashed, so the texture rides along with the skin instead of crawling. - A shadow offset down-right dims the background dots underneath. - Farther/smaller predators are drawn dimmer and underneath the larger ones. - WAKE FIELD: a per-cell energy grid. Prey add a little, the predator's tail/rear adds more, the pointer adds some. Each frame, blur it with a 5-point kernel and decay it (exp(-dt*1.5)). Cells above a threshold show a small cyan square dot (rgb 110,230,255) in the lower-right of the cell, in 6 alpha buckets. Otherwise the grid stays black: no ambient dots. - KILL FX: when a predator eats, stamp a "heat" field that decays fast and draws "*" (orange, rgba 255,120,60) when hot and "·" (red) as it cools. - Batch draws by fillStyle (counting-sort cells into colour/alpha buckets) for performance. ## Simulation - Fixed timestep 1/60 s with an accumulator (max 4 steps/frame) in a requestAnimationFrame loop. Pause when the canvas is off-screen (IntersectionObserver). Handle resizes with a ResizeObserver. With prefers-reduced-motion, pre-step 4 s and draw one still frame. - PREY = Reynolds boids with Couzin-style zones and a spatial hash (bucket = perception radius ≈ max(3 cells tall, 5.5 cells wide)): - separation using an elliptical personal space measured in grid cells (wide in x, tight in y), so every individual gets its own cell; - alignment + cohesion with same-species neighbours only; different species keep apart; - a blind spot directly behind each individual (cos < -0.6); - 4–5 prey sub-species (like sardine/anchovy/mackerel) with different cruise/max/min speed, group size, spacing, align/cohesion/jitter weights, and a "mill" tangential force that makes one species circle into a rotating ball. Different weight mixes should give visibly different group shapes: tight polarised ribbons, loose swarms, rotating mills; - level-travel bias (vertical drag) unless panicking, a soft margin at the walls, and a divergence-free ambient current (the curl of a slowly drifting stream function built from sin/cos); - ALARM 0–1: set by nearby predators or the pointer, passed to neighbours at ×0.86 per hop, and fading over time. Alarmed prey spread out (personal space up to ×2.8), drop cohesion, and speed up; - FOUNTAIN EFFECT: fleeing prey break sideways around the predator's path, not just directly away. Threat distance is measured to the nearest point on the predator's front half. - PREDATORS = a 20-node follow-the-leader spine (head first) with a maximum bend per joint (≈0.16 rad), so the body curls into a C at most. Steering = momentum + wander + pursuit (aim ahead of the target using its velocity) + separation from other predators + an orbit patrol around the screen centre when not hungry + a soft elliptical no-go zone in the centre (keep the middle clear for a headline) + turning back once the head leaves the screen. The turning rate is limited by speed/length, so there is no pivoting in place. Hunger rises over time and falls when they eat. Prey selection: a forward cone, preferring stragglers in sparse buckets (dense groups confuse predators), keeping the current target unless another is clearly better (×1.3). Speed: cruise ≈ 30 + 0.04·length; up to ~3× when closing in on a target. - Render-time locomotion: build a smooth render spine from the sim spine plus a travelling wave whose amplitude grows toward the rear and scales with speed (adapt to {PREDATOR}: wingbeat flex for birds, leg/gait sway for land animals, body wave for swimmers). Bank into turns: the appendage on the inside of the turn shortens and the outside one extends. - Eaten prey respawn after 3–8 s as a new group arriving from a random screen edge, so the population stays steady (count ≈ area/4400, clamped 85–340). ## Predator species Define 6–8 {PREDATOR} variants as data: a halfWidth(s) profile function (s = 0 at the head to 1 at the tail, as a fraction of length) plus appendage triangles (leading root, trailing root, tip position, reach), optional notches, eye position, ridge range, markings function, and tint. Make each variant clearly recognisable at ~20 cells long. The default scene shows 4 predators of the classic variant at sizes 1, 0.84, 0.77, 0.7. ## Interaction & API - Pointer move: prey avoid the cursor within ~130px, and the cursor leaves a faint wake. Touch input doesn't count as hover. - Pointer down: a "splash/startle" that makes nearby prey burst outward (flash expansion) and drops a big energy ring into the wake field. - `?predators=a,b,c` URL param picks the roster: the first is the biggest, and each next one is 10% smaller. - Code layout: src/math.ts (clamp, rand, angleDiff, hash3, current), src/species.ts (prey params), src/world.ts (sim), src/renderer.ts (ASCII renderer), src/engine.ts (loop, observers, input, destroy()), src/react.tsx (a small <AsciiCanvas> wrapper), demo.ts, index.html. Use `npm run dev` (Vite) and `npm run typecheck`. Comment the "why" behind behaviours briefly, citing the biology (Reynolds, Couzin) where it applies. ## Done when Running `npm run dev` shows a black grid with dimly glinting prey groups that form different shapes, and 4 shimmering, shaded ASCII {PREDATOR} that move naturally (no jitter, no sharp folds), hunt stragglers, cause visible waves of panic and fountain splits, leave cyan wakes, and spark red on each kill. It should run at 60 fps on a laptop at 1440×900. Open it in a browser and check it visually before finishing.
1
181
I wasn't able to deploy to @Railway since yesterday. First time I'm experiencing something like this. How are you guys dealing with this?
1
4
167
it's funny that @render's founder @anuraggoel has liked this post lol
1
3
102
i think i understood the hint
1
35
is fable 5.5 in the room with us?
fable 5.5 is upon us.
1
156
Meet Gayrat. He recreates trending videos with himself in them. I gave him unusually big ears and a big nose on purpose. People can't scroll past a face like that.
🤖 Made with AI
1
3
185
Stack: I started on Higgsfield Genjutsu, then switched to Wan 3.0 because Genjutsu got expensive.
2
1
350
Most of Gayrat's videos after the switch were made with @Alibaba_Wan 3.0 Same character, way cheaper per video
8
Results, 8 videos: • 16.9M views, 8.7M unique viewers • 1.3M interactions • 99.7% of views from non-followers • Best reel: 8.6M views, 801K shares
1
2
119
The real lesson: views ≠ followers. 8.6M views + 8s avg watch time → 1,814 follows 7.6M views + 14s avg watch time → 2,918 follows Fewer views, 60% more followers. Watch time beats reach.
1
1
86