Skip to content

Instantly share code, notes, and snippets.

@gsingal
Last active September 16, 2026 12:13
Show Gist options
  • Select an option

  • Save gsingal/b7353547a6196f1a20e1e756f884056f to your computer and use it in GitHub Desktop.

Select an option

Save gsingal/b7353547a6196f1a20e1e756f884056f to your computer and use it in GitHub Desktop.
Hanuman recorder: character poses in the brush-ink language of the mark (brief for an image model)

Hanuman recorder: character poses in the brush-ink language of the mark

A brief for an image model. Paste the whole document, then attach the reference images listed in section 3, or fetch any of them directly: every file named in this brief is publicly served at https://gist.githubusercontent.com/gsingal/b7353547a6196f1a20e1e756f884056f/raw/<filename> (for example https://gist.githubusercontent.com/gsingal/b7353547a6196f1a20e1e756f884056f/raw/mark-black.png). This brief itself is https://gist.githubusercontent.com/gsingal/b7353547a6196f1a20e1e756f884056f/raw/DOSSIER.md. Sections 1 and 2 are background; section 4 is the character; sections 5 to 9 are what to draw and how we will judge it; section 10 is the history of what was tried and why each attempt fell short.

1. Background: the product, the owner, the brand

The owner. Gaurav runs a personal AI assistant called Hanuman. It reads his mail, keeps his worklist, prepares his meetings, and acts for him within limits he sets. It is named for the Hindu deity Hanuman: devoted, capable, fast, and famous for one act in particular. Sent to fetch a healing herb from a mountain and unable to tell which plant it was, Hanuman lifted the whole mountain and carried it back. That story is the brand mark, and it is the reason the mark fits the product: when the assistant cannot pick out the one thing that matters, it carries everything and lets the owner choose.

The device. A pocket voice recorder for the car, built on a Waveshare ESP32-S3 board with a 480 by 480 pixel round-cornered AMOLED, 39 mm wide, 314 pixels per inch, read at about 70 cm while driving. Three buttons: record and stop, pause and resume, page. Today it records meeting notes on the road, uploads them over the phone's hotspot, and the assistant turns them into notes. A new feature adds spoken instructions: the owner holds the button, says "email Lee the integration format", and the recording becomes an item on his worklist that he later sees closed with "I finished X. I did Y." The device therefore has states to show: idle, recording, paused, sending (with a 1 of 2 count), sent, needs-you (a recording needs the owner to pick which meeting it was), listening (hearing an instruction), on-it (the instruction was taken), queued (no signal, held on the card), plus a recordings list and a battery page.

What the screen is physically able to show. Text is rendered one bit deep: every glyph is thresholded at 128, so there is no anti-aliasing and thin strokes break up. Art is rendered at 4 bits of alpha, so brush edges survive but large gray areas read as smudge. The usable width is 432 pixels inside 24 pixel side margins and 36 pixel top and bottom margins. During recording the screen repaints one 432 by 98 pixel zone once per second; anything that animates while audio is being captured has to fit inside that budget or it steals time from the audio loop. Sending, sent and needs-you do not capture audio, so they can animate more freely.

The visual identity, as ratified for every Hanuman surface. Warm paper, never white; warmed near-black ink, never pure black; no cold grays and no dark theme. Structure from hairlines and whitespace, not boxes. One accent per surface, and one warm signal color rationed to a single cluster; the safe action never wears the alarm color. The seal red is #B23A20, used like a wax seal, rarely. Uppercase micro-labels with wide tracking are the only "system" typography. Restraint is the luxury: "adult, restrained, lighter, Zen, still gorgeous."

2. What the owner asked for, in his words

These are verbatim and they are the brief above any other instruction.

At the start: "we should start leaning into the chinese brush aesthetic and motif of the hanuman logo. we should use the logo. let's start branding the device as hanuman." And: "i want the font to be VERY readable to don't use some obscure hard to read font, but consider how and where we could incorporate this into the aesthetic."

After the first round: "1. typography needs to be clean and legible. i dont like the ink brush text. figure out a nice, clean, interesting font. give me a few options 2. i like the large logo on the load screen. we might also consider it in idle mode or something like that 3. i like the use of the small red brandmark. let's figure out how to use that. but we don't have to add it for no reason 4. i like the idea of a nice brush stroke but what you've sent is not it - it doesn't look anything like a brush stroke. you need to keep brainstorming ... get it to 9.5/10 and give me several options for each idea. think through the functionality we want and then how to brand it accordingly. we might also lean into the ink on paper color scheme (e.g., keep it light, maybe some interesting numerical representations, etc." Then: "also think through the 'hey hanuman' interface and UX - that is a great opportunity for branding/design" and "maybe some cool animations that represent things are working, etc."

After the second round: "these are terrible. stuff overlaps the fonts are bad the logos is not thoughtfully used the ink brush is bad."

Then a reference: a photo of the TORRAS FlashEye-Dot charger, whose round screen shows a character with two big eyes whose expression changes with the charging state (squinting with effort while fast-charging, calm when steady, sleepy on trickle, confetti when full). His words: "maybe something like this." That reference is the personality bar: the device should have a character that tells him what it is doing. It is not a style reference; ours is ink.

3. Reference images to attach

file what it is how to use it
mark-black.png The brand mark, 760 by 883 px, black ink on transparent, real dry-brush texture in the alpha THE character and THE brush. Every pose must read as this figure drawn by this hand.
mark-white.png The same mark in white do not draw from it; it shows the ink must work as a single value
seal.png The vermillion chop, Devanagari "हनुमान" not to be drawn; it is the one red element that sits beside your ink on two screens
device-photo.jpg The device as it shipped before this work, blue screen and pixel font the baseline being replaced, and the physical object
current-idle.png The mark on the device today how the figure sits on the paper at device size
current-sent.png The best of the cut-part poses (figure on the summit) the composition we liked and could not draw well
current-listening.png The listening pose that failed three times what NOT to do: the hand reads as a wave, not an ear
current-needs-you.png The hailing pose that worked the clarity every pose needs
contact-sheet.png All twelve device screens today where each pose sits and how much room it has
silhouette-proof.png The postures with the words removed the test each pose must pass: readable as a distinct state with no label
flasheye.jpg The charger with a face the level of personality wanted; do NOT copy the style
history-*.png One or two renders from each rejected round section 10 explains what each was and why it fell short

4. The character, described so you can draw it consistently

Read mark-black.png before anything else. The figure is a monkey-bodied Hanuman in a deep crouch, weight on one bent leg, the other leg folded, torso twisted toward the viewer, one arm thrust straight up holding a mountain overhead, the other arm braced low. The tail is a long single stroke that loops behind and up. The head is small, with a simple crown line and a beard suggested by one or two strokes; there is no drawn face beyond a dot or two. The mountain is a mass of five to seven ridge strokes with dry-brush breakup on the slopes.

The brush: one loaded brush, black ink, strokes of two or three widths. Thick loaded strokes for the torso and the mountain's base; fast tapering strokes for limbs and the tail; dry-brush breakup where the stroke runs out of ink. No outlines. No gray wash fills. No hatching. Negative space does the modeling. Ink is fully black at a stroke's core and breaks up to paper at its edges; nothing is mid-gray on purpose.

The paper is warm. Draw with edge, not with tone.

5. Hard constraints on every image

  • Square, 2048 by 2048 pixels, the figure centered with at least 10 percent margin on every side.
  • Transparent background. If transparency is unavailable, pure white with nothing else on it.
  • Black ink only. No color of any kind. We recolor the mountain indigo for one state and add the vermillion seal ourselves.
  • No text, no letters, no numerals, no speech bubbles, no icons.
  • One figure per image. No scene, no ground line, no shadow, no frame, no border.
  • The same character every time: same proportions, same crown, same beard strokes, same tail thickness, same brush. Do the character sheet first (section 7) and keep it in the conversation as the reference for every pose.
  • Nothing may depend on fine detail. The image is shown 480 pixels wide and read from 70 cm. A pose that reads only because of a small stroke fails.
  • Each pose must be a different silhouette from every other pose when reduced to a 32 pixel black shape. That is the test we apply. Two poses that differ only by an arm angle are one pose.

6. The poses, one per device state

For each: the state, what the device is doing, what the pose must say, whether the mountain appears, and what the previous attempt got wrong.

state the device is the pose must say mountain notes from the failed rounds
LISTENING hearing a spoken instruction "I am listening to you." Upright, leaning toward the viewer, head tilted, one hand cupped behind the ear, tail high and curled like a question mark. none Three failures. The hand must be BEHIND the ear on the tail side, open, fingers up. Not on the crown, not in front of the face, not a wave. The head tilt is the cue that survives at small size; make it strong.
RECORDING capturing a long meeting note "I am working quietly." Small, still, attentive: seated, hands on knees or one hand resting, looking slightly down. none Draw it calm. It sits beside a large timer and must not compete.
PAUSED recording paused by the owner "Resting, waiting." Seated on the ground beside the mountain, mountain set down, one hand resting on its flank, tail low. yes, set down beside the figure The cut-part version was the crouch turned sideways and read as a clump. Draw a real seated, resting body.
SENDING, half uploading, 1 of 2 Effort. Heaving the mountain up from chest height, knees bent, strain in the back. yes, at chest height The working state and our best animation. Two keyframes: half raised and fully raised.
SENDING, full uploading, 2 of 2 The lift completed, mountain overhead; close to the mark itself. yes, overhead May be the mark's own pose; if so, say so rather than redrawing it.
SENT the note is saved "There it is." Mountain set down, the figure standing ON its summit, one arm out at about 45 degrees presenting it, tail relaxed and low, weight easy. yes, under the figure The cut version could not stand: no leg part. Draw feet planted on the peak, paper visible between the legs and the slopes. This is the signature screen; the seal sits at the lower right beside it.
NEEDS YOU a recording needs the owner to choose "Hey. You." Facing the viewer, one arm straight up, hailing. small and far to one side, or none This one worked; keep its clarity. It must not share a silhouette with SENT.
QUEUED offline, holding the recording until online "Holding, patiently." Standing still, mountain held low at the chest with both arms, feet planted, no strain. yes, at chest height Distinct from SENDING half: no effort, no bend; a wait, not a lift.
ON IT the instruction was taken Triumph. The full lift, the mark's pose, chest open. yes, overhead This can be the mark itself.
IDLE and BOOT nothing happening; powering on The mark as it is. yes No new drawing needed.

Animation keyframes, optional but valuable: LISTENING (head tilts in, tail sways: 3 frames), SENDING (chest, shoulder, overhead: 3 frames), SENT (mountain lands, figure climbs on, figure presents: 3 frames), NEEDS YOU (figure turns to the viewer, arm goes up: 3 frames). Each frame is its own square image under section 5.

7. Prompts, in the order to run them

Run the character sheet first and keep its result in the conversation. Then one pose at a time, referring back to the sheet. Do not batch poses into one image; each is its own file.

Character sheet

Study the attached brush-ink drawing (mark-black.png): a monkey-bodied Hanuman in a deep crouch lifting a whole mountain overhead, painted with one loaded brush in black ink, dry-brush breakup at the stroke edges, no outlines, no gray fills. Produce a character sheet of this exact figure, same proportions, same crown line and beard strokes, same tail, same brush, showing him from the front, from the side, and from a three-quarter view, standing at rest with no mountain. Black ink on transparent, no text, no color, no background, 2048 by 2048. The sheet exists only so the following poses stay consistent.

Per-pose prompt template

Same character as the sheet, same brush, same ink. Pose: [the "must say" cell from section 6, verbatim]. [The mountain instruction from section 6.] One figure, centered, at least 10 percent margin, black ink on transparent, no text, no color, no ground, no shadow. The image will be reduced to 480 pixels and read from arm's length, so the posture must be legible as a silhouette; do not rely on small strokes. [The "notes" cell from section 6.]

The one pose to get right first

LISTENING. Same character as the sheet, same brush. He stands upright and leans toward the viewer, head tilted to one side, one hand open and cupped BEHIND his ear on the side away from the viewer, fingers up, the other arm relaxed at his side, tail high and curling behind him like a question mark. No mountain. Black ink on transparent, one figure, centered, no text, no color. The listening cue must be the head tilt and the cupped ear together; at 480 pixels a viewer should say "he is listening" before reading any word.

If LISTENING reads at a glance, the rest will. If it does not, change the pose before changing the style.

8. What we do with the images

We threshold the ink to 4 bits of alpha, place each pose in its device layout at 480 by 480, recolor the mountain indigo for SENDING only, and add the vermillion seal on SENT and ON IT. We run the silhouette test: each pose reduced to 32 pixels, thresholded, compared pairwise; any two under 15 percent different are one pose and one of them comes back to you. Then a fresh-eyes design review scores the set against the rubric in section 9; the bar is 9.5 out of 10.

9. Acceptance, in the reviewer's words

  • Each posture reads as its state at a glance, or it reads as a damaged logo. Damaged logo fails.
  • The set feels like one character with a personality, not a logo with articulated parts.
  • The ink reads as ink on paper, not a clip-art smear: real stroke edges, real breakup, no gray areas.
  • No seams, no notches, no ghost strokes: each pose is one drawing.
  • Silhouettes differ pairwise. SENT and NEEDS YOU in particular must not be a pair.

10. History: what was tried, what it looked like, why it fell short

Every round is on file. The lesson across all of them: the type, the color rules and the layout were solved by round three of the second series; the character was the thing no arrangement of the existing drawing could deliver.

Round one (first series). Three directions rendered at device size: "paper" (warm ground), "night" (dark ground with a large figure on the splash), and "seal" (the chop used on several states); a brush-lettered wordmark; three meter styles for the recording level. See history-round1-paper-sent.png, history-round1-night-splash.png, history-round1-composite.png. The owner kept two things: the large figure on the boot screen, and the small red chop where it means something. He rejected the brush lettering ("i dont like the ink brush text") and the strokes ("doesn't look anything like a brush stroke"). He asked for the ink-on-paper scheme, several clean legible font options, interesting numerical representations, a design for the listening interface, and animations that show work happening.

Round two (first series). Variants A to D, a voice-command set, synthetic brush strokes drawn by code (tapered capsules, an enso arc), a font ambiguity study. See history-round2-voice-listening.png (a black smear through the instruction text) and history-round2-brush-level.png (the tapered capsule). Verdict, verbatim: "these are terrible. stuff overlaps the fonts are bad the logos is not thoughtfully used the ink brush is bad." Two structural lessons came out of it and hold since: every ink element is cut from the real mark's alpha, never synthesized; and no design reaches the owner without an independent critique first.

Round one (second series, a different design lead). A written critique of both earlier rounds, then one full set: paper ground, Atkinson Hyperlegible Bold for words with Roboto Mono Bold for numbers, the figure as a painting on boot and idle, the chop only on ON IT and SENT, brush strokes cut from the mark's own ink, and numbers as design (large minutes with small seconds, "1 OF 2", a giant 82 with a small percent sign). See history-gpt1-contact-sheet.png. The type decision was made on measurement, not taste: at the device's 26 pixel cap height after thresholding, Atkinson Hyperlegible Bold keeps a 6 pixel minimum stem and the largest distinction among 1, l, I and 0, O of the five candidates; Roboto Mono Bold's unslashed zero avoids a reading as a crossed letter. Owner reaction: the reference to the charger with a face. He wanted the device to have a character.

Round two (second series). The character question, three ways on the same four states: (a) a brush face, eyes and brows cut from the mark; (b) the figure as the character, posture per state; (c) the figure at idle size with minimal change. See history-gpt2-face-options.png and history-gpt2-face-listening.png. The supervisor's verdict: the face failed (two square crops of the mark read as smudged stamps, not eyes; a vermillion eye on NEEDS YOU was the worst frame in the set); the figure as the character was the strong idea, with Hanuman carrying the mountain during SENDING as the motif doing real work; (c) added nothing.

Round three (second series). The figure as the character, built from four stored parts of the mark (figure, mountain, tail, arm) with cut lines documented so firmware could store the parts once and compose. See history-gpt3-contact-sheet.png. The wordmark left the working screens (the owner's "not for no reason" rule). The renderer scored itself 9.5; an independent reviewer scored it 7.7.

The design-review loop, five critique rounds and four render rounds. Each round a fresh-eyes reviewer who never saw the renderer's own score, using the same rubric (hierarchy, rhythm, typography, color discipline, the look-now moment, craft of the cut ink, containment, editorial quality, distinctiveness, the character system, the brush ink, the numbers, the animations, set fit). Scores: 7.7, 8.4, 8.7, 8.9, 9.1. What each round fixed, in order: chrome color discipline (green only where something is confirmed, vermillion only where the owner is asked, ochre only offline, indigo only for transfer); a real-ink level meter; a brushed mountain base; LISTENING rebuilt upright; SENT with the figure on the summit and an animation that no longer looked like PAUSED; NEEDS YOU with air and an entrance from the edge; "1 ITEM" as a count (a one-line spec that took three rounds); a silhouette proof that could actually fail; a real descent in the SENT animation. See current-*.png, contact-sheet.png and silhouette-proof.png for the final state.

The reviewer's closing judgment, which is why this brief exists. "Not with four cut parts. Three rounds of LISTENING passes prove it: the hand has been on the crown, then in front of the face, and the honest reason is that the stored parts are figure, mountain, tail and arm, so a hand to the ear is an arm part rotated until something near the head looks like a hand. PAUSED is the body turned toward horizontal; SENT is the same crouched body placed on a summit it cannot stand on because there is no separate leg part; LISTENING and NEEDS YOU share the raised arm because the arm is the only limb that moves. The set reads today because the state word, the caption and the mountain's position do most of the work, and the figure confirms rather than declares. That ceiling is about 9.2 to 9.3. The better structural change: get three or four additional poses of the same Hanuman drawn by the same brush as first-class ink assets, and use recombination only for the in-between animation frames. Every state the FlashEye reference expresses is a drawn expression, not a rearranged one; that is the difference between a character and a logo with articulated parts, and no amount of harness precision closes it."

Two side questions already settled, so you need not revisit them. A serif for the outcome caption (the identity document's "serif carries meaning" rule) was rendered and rejected for this surface: a second typeface on a three-line screen read at 70 cm is one more thing to parse, and Cormorant's hairlines vanish under the one-bit threshold; the set stays all-sans. The recording screen was rendered with and without the character; the reviewer recommends without, the owner has not yet chosen.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment