Ë
    ÿ`gjž'  ã            
      óœ   — U d Z ddlmZ ddddddd	d
ddœ	Zded<   dddddddddœZded<   dZd'd„ZdZd(d„Z	dZ
ded<   d d!d"œd)d#„Zd d$œd*d%„Zy&)+a  Prompt builders for pet generation.

Two prompt shapes: a *base* prompt (prompt-only, produces the canonical look the
user picks between) and per-*state* *row* prompts (grounded on the chosen base,
produce one horizontal strip of N poses). Prompts stay concise and
sprite-production oriented; the identity lock and "one transparent row" framing
matter more than flowery description.

We generate the full petdex/Codex nine-state set (see
:data:`agent.pet.generate.atlas.ROW_SPECS`) so a hatched pet is a valid
``petdex submit`` spritesheet.
é    )ÚannotationszOa calm idle loop: subtle breathing, a tiny blink or gentle bob, no big gesturesza sideways walk/run locomotion cycle moving to the RIGHT: the character faces and travels right with clear directional steps, a smooth gait loopzŸa sideways walk/run locomotion cycle moving to the LEFT: the character faces and travels left with clear directional steps (the mirror of the right-facing run)zOa friendly greeting: raising a paw/hand/limb to wave, clear up-and-down gesturezKa happy celebration jump: anticipation, lift off the ground, peak, and landuU   a sad or deflated reaction: slumped, dejected, small frown â€” readable but not noisyuw   an expectant 'waiting on you' pose: looking up/out as if asking for input or approval â€” distinct from idle and reviewzŒfocused active work, staying IN PLACE (NOT walking or foot-running): leaning in, concentrating, busy 'thinking / processing / typing' energyzJcareful inspection: a focused lean, head tilt, studying something intently)	Úidlezrunning-rightzrunning-leftÚwavingÚjumpingÚfailedÚwaitingÚrunningÚreviewzdict[str, str]ÚSTATE_ACTIONSux   Style: crisp 16-bit PIXEL-ART game sprite â€” visible square pixels, a small limited palette, clean dark outline, flat cel shading, chunky chibi proportions, like a classic SNES/JRPG party member or a petdex.dev mascot. Absolutely NOT 3D-rendered, NOT a smooth painted or vector illustration, NOT photorealistic â€” no soft gradients, no realistic lighting, no figurine look.zY Render in clean 16-bit pixel-art style with visible square pixels and a limited palette.z Render as a soft plush toy.z. Render as a claymation / soft 3D clay figure.z$ Render as a glossy die-cut sticker.z$ Render in flat vector mascot style.z Render as a glossy 3D toy.z" Render in a soft painterly style.)ÚautoÚpixelÚplushÚclayÚstickerzflat-vectorz3d-toyÚ	painterlyÚ_STYLE_HINTSu/  Center the character on a SINGLE flat, uniform, high-contrast chroma-key background â€” pure hot magenta #FF00FF (only if magenta appears on the character, use pure green #00FF00 instead). The background is ONE continuous even color that completely surrounds the character with NO gradient, vignette, texture, pattern, scenery, shadow, ground line, frame, border, panel, comic cell, gutter line, grid, or divider of any kind, so it keys out cleanly. The background color must not appear anywhere on the character. No text, no labels, no speech bubbles, no UI.c                ón   — t         j                  | xs dj                  «       j                  «       d«      S )Nr   Ú )r   ÚgetÚstripÚlower©Ústyles    úM/root/.hermes/venv/lib/python3.12/site-packages/agent/pet/generate/prompts.pyÚ
style_hintr   M   s+   € Ü×Ñ˜Uš_ f×3Ñ3Ó5×;Ñ;Ó=¸rÓBÐBó    i   c                ó€   — t        d| «      }t        |z  }t        |dz  «      }t        dt        |dz  «      «      }||fS )u"  (per-pose width px, gap px) for a row of *frame_count* poses.

    Pixel counts alone don't hold â€” the model fills each slot edge-to-edge with
    the full wingspan, so neighbors touch even when bodies are spaced. The lever
    that works is proportional containment on a wide canvas: give each pose its
    own equal cell and keep the ENTIRE silhouette (wings/tail/halo included)
    inside it. On the 1536px landscape strip ~70% occupancy still leaves a
    generous gutter, so the pet stays a normal, good-looking size â€” no shrinking.
    é   gffffffæ?é0   g333333Ó?)ÚmaxÚ_ASSUMED_STRIP_WIDTHÚround)Úframe_countÚslotsÚslot_wÚpose_pxÚgap_pxs        r   Ú_spacing_specr(   W   sG   € ô ;Ó€EÜ! EÑ)€FÜF˜S‘LÓ!€GÜ”U˜6 C™<Ó(Ó)€FØFˆ?Ðr   )r   z2a distinctly different colour palette and markingsz7a heavier, broader silhouette with sturdier proportionszka different facial structure and expression matching the concept tone, with unique accent/accessory detailsz5a leaner, taller build and an alternate colour schemezRbolder, more saturated colours and a stronger expression matching the concept toneztuple[str, ...]ÚBASE_VARIATIONSr   r   )r   Ú	variationc          	     ór   — | xs dj                  «       } |rd|› dnd}d| › d|› dt        › t        |«      › S )z–The base look: a single, clean, centered full-body mascot.

    *variation* differentiates one draft from the next (see :data:`BASE_VARIATIONS`).
    za distinctive mascot creaturez Make this design distinct: ú.r   z!A stylized mascot pet character: aœ  . Honor the requested tone and mood exactly (cute, eerie, scary, menacing, whimsical, etc.) while staying non-graphic. Compact, whole-body silhouette that reads clearly at small size, clear readable facial features, simple consistent palette. Neutral front-facing standing pose, upright and symmetric, arms/limbs relaxed at the sides, feet together on the ground, any cape/accessories hanging straight and still.ú )r   Ú_BACKGROUNDr   )Úconceptr   r*   Únudges       r   Úbuild_base_promptr1   v   sY   € ð
 Ò9Ð9×@Ñ@ÓB€GÙ;DÐ*¨9¨+°QÑ7È"€Eà
+¨G¨9ð 5&ð ˆ'Üˆ-œ
 5Ó)Ð*ð
	,ðr   r   c               óÆ   — t         j                  | d«      }|xs dj                  «       }t        |«      \  }}d|› d|› d|› d|› dt        › d|› d	t
        › t        |«      › S )
uÆ   A row strip: *frame_count* poses of the SAME character, leftâ†’right.

    The attached base image is the identity source of truth; the prompt locks
    species, palette, face, and props to it.
    za simple idle posez
the mascotzúUsing the attached reference image as the exact same character (same species, face, colors, markings, proportions, and props), preserving the same emotional tone/mood (e.g., scary stays scary, cute stays cute), draw a single WIDE horizontal strip of z animation frames showing z. LAYOUT: arrange u#   poses in ONE horizontal row at equal spacing, each pose centered in its own imaginary equal region. Draw NO panel borders, NO comic cells, NO boxes, NO vertical divider/gutter lines, NO grid, NO frame outlines between poses â€” the backdrop is one unbroken flat field behind all of them. Fill the WHOLE strip with the SAME single flat chroma-key color as the attached reference image's background (identical hue in every frame, no per-pose color shifts). SPACING (critical): draw each pose at a consistent, healthy, clearly visible size (roughly zpx wide on a u£   px strip) â€” do NOT shrink it tiny â€” but keep its ENTIRE silhouette (wings, tail, halo, horns, cape, every appendage) fully INSIDE its own cell. Leave at least u?  px of empty chroma-key background between neighboring silhouettes at their closest point (wingtip to wingtip), and the same empty margin before the first pose and after the last. If a wing, cape, or tail would reach into a neighbor, FOLD or angle it inward rather than letting it cross the gap. Silhouettes must NEVER touch, overlap, share a shadow, share a ground line, share motion trails, or merge into one connected shape. REGISTRATION (critical): the character is the SAME height and SAME width in every frame, drawn at the SAME scale, centered over the SAME point, with all feet aligned to the SAME invisible horizontal baseline across the whole strip â€” this baseline is conceptual ONLY: draw NO ground line, floor, platform, horizon, or contact shadow beneath the feet. Keep the body's center, size, and stance fixed frame to frame â€” ONLY the limbs/features the action needs may move. Capes, cloaks, bags, and scarves stay in the SAME place and shape every frame (no swinging, flowing, or drifting) unless the action itself requires it. No pose is cropped at the strip edges. )r   r   r   r(   r!   r.   r   )Ústater#   r/   r   Úactionr&   r'   s          r   Úbuild_row_promptr5   Œ   sš   € ô ×Ñ˜uÐ&:Ó;€FØÒ&˜,×-Ñ-Ó/€GÜ# KÓ0O€GˆVð2ð 3>°Ð>XÐY_ÐX`ð aØ&˜-ð (!ð ") 	¨Ô7KÐ6Lð M ð !'˜xð (/ô$ ˆ-œ
 5Ó)Ð*ðA 	,ð"r   N)r   ú
str | NoneÚreturnÚstr)r#   Úintr7   ztuple[int, int])r/   r8   r   r6   r*   r8   r7   r8   )
r3   r8   r#   r9   r/   r8   r   r6   r7   r8   )Ú__doc__Ú
__future__r   r   Ú__annotations__r   r.   r   r!   r(   r)   r1   r5   © r   r   ú<module>r>      s¼   ðòõ #ð ^ð	Sð	ð `Ø\Øeð	8ð	Rð [ñ-!€ˆ~ó ð:	]ð iØ+Ø<Ø5Ø9Ø+Ø5ñ! €ˆnó ð(4ð óCð Ð óð*$€ó ð <BÐTVõ ð, Y_ö +r   