Hazel performance analysis · ^report(3) · 2026-10-11

A day of requests from M and N

Two players asked for features in Messed Up Dress Up today: M (my daughter) and N (my son). As in ^report(2), each one went first into the game, a single HTML/JS file they play with, and only then toward the Hazel slides. This report is what they asked for, what it looks like, which parts reached Hazel today, and what those parts cost there.

Three scenes: a green witch with a hooked nose, a tuxedo cat on her shoulder and a broom, on a beach with palms and sand castles; a tiger costume with wrapped stripes in a forest meadow under sunshafts; a deer costume under water beside a shipwreck and two sharks at a picnic table, forks in their fins.
Today's game: a witch at the beach, a tiger in the forest, a deer under the sea.
14
deploys of the game between 14:39 and 16:10, each feature live as soon as it was ready
1–5 ms
the game redrawing its heaviest pictures (100 claws, 99 alien fingers, a scene)
0.4–32 s
a Hazel slide redrawing after one of today's hand sliders
hands, mouth
the features already formulated in the Hazel slides; costumes, stripes and backgrounds are next

From N

How many claws, how many star points: 1 to 100

The human and alien hands already had a slider for their fingers. N wanted the same for claws and for a star's points, and every count to go to 100, not 99. Up to four, claws keep their usual spacing. More of them fan out, nearly all the way round at 100, and get thinner, outline and all, so each one still shows. One star point is a teardrop, two a lens.

A raised claw hand with 4, 20 and 100 claws.
4 claws (the default, unchanged), 20, and 100.

A star then got an angle: 0 to 2π/n radians, the turn to its next point, where it looks as it began. The other hands have no such symmetry, so each of them got an angle all the way round, 0 to 2π. Every default looks exactly as before.

A one-pointed star hand (a teardrop), an eight-pointed star turned halfway to its next point, and a human hand turned a quarter turn.
A 1-point star; 8 points, turned halfway to the next; a human hand turned 90°.

Longer arms and claws, "so we can see our face with 100 claws on each hand"

Arms now reach 600 (they stopped at 300) and claws 900% of their usual length (300% before). The picture's frame grows to take everything in.

A figure with arms 600 long, a ball of 100 claws on each hand; then the same with the claws at 900%.
Arms at 600, 100 claws each side; then the claws at 900%.

Backgrounds

Four to start: none, a forest with a meadow and sunshafts, under the sea with a shipwreck and sharks at a picnic table (facing it, forks in their fins), and a beach with umbrellas, chairs, blankets, palms, sand castles, the sun, and the ocean next to the sand. A scene is a stage of its own, wide, with room at the sides for the scenery and in front of the feet for flowers, castles and blankets. The figure stands on its ground at a size and place of its own: drag it, or use the size slider and a small picture of the stage to tap.

The default figure in the forest, under water with two sharks facing their picnic table, forks in their fins, and at the beach.
Forest, underwater, beach.

Two more came later in the day:

The witch with her cat and broom in the witch's woods: a hut on giant chicken legs behind a skull-topped palisade, her cabin, a bubbling cauldron, skeletons in the ground, a giant dead tree, a moon and bats. Then the default figure in a peaceful cemetery: Celtic crosses, a dark stag stone, yews, a willow by a brook, flowers and clouds.
The witch's woods; the cemetery.

From M

Tiger stripes, as Daniel Tiger wears them

The tiger's stripes were a pattern tiled over everything. M wanted them to wrap round from the back, over each part's side, and stop before its middle. Now each part gets its own stripes: the body (its belly hides their tips), each arm (a shallow V from both edges), each leg (from its outer edge and, below the crotch, its inner one), and the hood's sides.

The tiger costume before and after, arms down and arms out: tiled stripes, then stripes that come in from each part's edges.
Before and after, arms down; before and after, arms out.

Witch, wolf and deer

The wolf and the deer are suits, like the tiger. The wolf has tall pointed ears, a bushy tail with a dark tip, and claws. The deer is spotted like a fawn, with antlers, long ears, a short white tail, and hooves on its hands and feet. The witch is the first costume that isn't an animal:

A wolf suit, a deer suit, a green witch with a hooked nose, a tuxedo cat and a broom, a witch in black with a white web and an orange cat, and a close-up of the tuxedo cat.
Wolf; deer; the witch with her cat and broom; the same witch in other colors; the tuxedo cat up close.
The witch's cat and broom at 30%, 100%, 500% and 1000%, the picture growing to hold them.
Cat and broom at 30%, 100% (the default), 400–500%, and 1000%.

And while they played

These came up while they played. They are smaller fixes and additions, most of them found by just looking at a picture.

Raised arms go in front of the face

Hands had moved in front of the face, but the forearms still went behind the head. Now the arms are drawn again after the face, wherever they are outside the body.

Arms raised to cover the eyes: before, the forearms vanish behind the head; after, they cross in front of the face.
Before and after.

The mouth moves down, out of the way of big eyes

The game measures, along the mouth's top curve as it is drawn, how far each eye reaches down right above it, and moves the mouth until it is 8 below. A plain eye's edge is an oval. A star, a heart or an X is a box tilted with the eye, because their points reach its corners. Measured in Firefox, a star or heart emoji reaches 1.97 eye-radii below its middle, not the 1.5 the game had assumed. The usual eyes never move the mouth, so the default face is pixel for pixel the same.

A face with very big plain eyes, before and after (the smile moves below them); a face with big star eyes, before and after.
Plain eyes at 300, before and after; star eyes at 250, before and after.

A wide nose stays between the eyes; a witch's nose

A side nose used to widen from a fixed point, so a wide one ended up under one eye. Now it widens from the top of its bridge, which stays between the eyes. The witch's nose is a kind of nose of its own: filled, with warts, pointing left, straight out (C), or right, at any length. A long one pushes the mouth down. The witch's green skin has its own row of feelings: witchy, cackling, spooked, hexed, never sick. The skin swatches that mean something now say so: 😀 😡 🤢 👽 🧙.

A wide backwards-L nose before (its top under the left eye) and after (its top between the eyes); a long witch nose pointing straight out, and one pointing right, both on green skin.
A wide nose, before and after; witch noses, C and R.

Hands that differ; full screen

The hand on the left can wear a style of its own ("same" by default; Surprise me makes them differ about one time in four). A button at the picture's top right makes it fill the screen, the controls hidden. An X or Escape brings them back.

A figure with a human hand on the right and a claw hand on the left.
Human on the right, claws on the left.
The picture filling the window, an X at its top right.
Full screen.

In Hazel so far

Two groups of these reached the Livelit Playground slides today, on both livelits branches (#2635 and #2597):

The Hands slide's torso with claw hands: 4 claws, 20, 100 claws at 900%, and an 8-point star turned halfway.
The Hands slide in Hazel: 4 claws, 20, 100 at 900%, an 8-point star turned 50%.
The Hands slide: a one-point star, human hands turned 90°, alien hands with 30 fingers turned 180°, and arms 600 long.
A 1-point star; human hands at 90°; 30 alien fingers at 180°; arms at 600.
Full Body slide heads: the default; plain eyes at 300 with a smile, then open; iris and whites; star eyes; heart eyes; X eyes. The mouth sits below the eyes in each.
Full Body in Hazel: the default face, then big eyes of each style, the mouth below them.

A new test checks that every playground slide comes out of statics with no error marks. The port also turned up a stale cap: Hazel's alien hand still stopped at 99 fingers, so 100 drew the same picture as 99.

Not yet in Hazel: the wrapped stripes, the witch, wolf and deer, the backgrounds, full screen, the left hand's own style, the noses, and the cat. The witch, her nose and her cat, and the skins, have since reached Hazel: see ^report(4).

What it costs

The game redraws the heaviest of today's pictures in a few milliseconds. The Hazel slides take from under half a second to half a minute, and the cost grows with how many shapes a hand has.

ChangeHazel slide redrawGame draw()
Star points 5 → 8, star turn 0 → 50%0.65 s, 0.46 s1–2 ms
Hand angle 0 → 90° (human); arm length 95 → 6001.36 s; 1.39 s
Claws 4 → 202.11 s3 ms at 100
Claws 20 → 100; then claw length 100 → 900%8.19 s; 7.52 s
Alien fingers 3 → 206.21 s2 ms
Alien fingers 20 → 5014.06 s
Alien fingers 50 → 9932.30 s5 ms
Full Body: eye size 50 → 300, smile, mouth open3.2–3.9 s1–3 ms

The alien hand is the clearest case. Each finger is a capsule and a round pad, built point by point and drawn twice, outline and fill, on each of two hands. The redraw grows with the finger count, about 0.3 s per finger. 100 claws cost about a quarter of that per claw. This hasn't been profiled yet, so where that time goes is the next question. ^report(2) found the heaviest slide spending its time printing points; whether that holds here is what a profile would tell.

These are single runs, one per change, so read them as sizes rather than precise numbers. Earlier reports saw a few tenths of a second between runs of the same change.

What next

How these were measured