Skip to content

Refine profile dot-art: levels, edge-aware density, fg/bg motion#75

Merged
itamarwe merged 1 commit into
masterfrom
claude/dot-art-density-and-motion
Jun 29, 2026
Merged

Refine profile dot-art: levels, edge-aware density, fg/bg motion#75
itamarwe merged 1 commit into
masterfrom
claude/dot-art-density-and-motion

Conversation

@itamarwe

Copy link
Copy Markdown
Owner

Consolidates the dot-art refinements made after the initial version (PR #72, now on master) into a single PR against master. All verified headlessly.

Highlights / saturation

  • A "levels" rolloff (HL_DIM/HL_POW) dims the brightest tones before stippling.
  • A brightness cap (CAP_OUT ≈ 80% of the in-face max) applied smoothly outside a face ellipse, so the bright t-shirt no longer out-shines the face or saturates — it was blowing out to a white mass at phone size. Measured face vs. body brightness to confirm the body is no longer brighter than the face.

Edge-aware density

Density mixes tone with a blurred Sobel edge field:

rho = tone^GAMMA * (FLAT_BASE + EDGE_GAIN * edge)

so information-rich regions (face, hair, beard, collar) get many more dots than the flat t-shirt, while tone still gates the figure against the empty background.

Foreground / background split + background breathing

  • A flood fill of dark pixels from the image border separates the subject from the near-black backdrop — no transparent PNG needed (if a public/img/profile.png with real alpha is added later, the generator can prefer it). Each point carries an fg flag; the points file is now stride 4 (x, y, b, fg), and the component stays backward-compatible.
  • Background dots breathe much harder than the figure, swelling and contracting about its centroid, while the figure keeps its spring + curl shimmer + gentle breathing + cursor repulsion. (Replaced an earlier Brownian wander, which read as mostly foreground motion.)

Notes

🤖 Generated with Claude Code


Generated by Claude Code

Consolidates the dot-art refinements that followed the initial version
(PR #72) into one change against master:

- Highlight handling: a "levels" rolloff (HL_DIM/HL_POW) dims the brightest
  tones before stippling, plus a brightness cap (CAP_OUT ~80%) applied
  outside a face ellipse so the bright t-shirt no longer out-shines the face
  or saturates (it was blowing out at phone size).
- Edge-aware density: density mixes tone with a blurred Sobel edge field,
  rho = tone^GAMMA * (FLAT_BASE + EDGE_GAIN * edge), so information-rich
  regions (face/hair/beard/collar) get many more dots than the flat t-shirt.
- Foreground/background split: a flood fill of dark pixels from the image
  border separates the subject from the near-black backdrop (no transparent
  PNG needed); each point carries an fg flag (points file is now stride 4).
- Background motion: background dots breathe much harder than the figure,
  swelling and contracting about its centroid, while the figure keeps its
  spring + curl shimmer + gentle breathing + cursor repulsion.

Generator (research/profile-dots/stipple.mjs) is deterministic and
reproduces the committed points.json. tsc + lint clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017TDdCdTJbUkH7ZoWDhj7AV
@vercel

vercel Bot commented Jun 29, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
itamarwe-github-io Ready Ready Preview, Comment Jun 29, 2026 5:53pm

@itamarwe itamarwe merged commit 3fbbb11 into master Jun 29, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants