Skip to content

Custom Parts 1: draw a headpiece into the Part Library and apply it #1211

Closed

Description

@DoodleBears

Parent

Part of #1209.

What to build

A Human opens the Custom Part editor and draws a headpiece with front and back layers, using pencil, eraser, flood fill and mirror while watching a live 1× preview on their real Avatar. They save it to their Part Library and apply it to a PersonaBot. The part recolors when they change hair or body color, and it moves with head turns and gaze as a Window Companion. This is the first path for Custom Parts: BotPixel part data, validation and rendering → Host-owned Part Library → Avatar Appearance embedding → Client editor.

Acceptance criteria

  • BotPixel defines a bounded Custom Part for the new headpiece slot with front and back layers around hair. Each cell is empty or holds a color source (appearance color slot or fixed color) plus a tone step on the rig's shade ramp.
  • A Custom Part's identity is a content hash of cells, color references and slot. Name, author, origin and parent are metadata outside it, and content is immutable.
  • The editor offers pencil, eraser, 4-connected flood fill and mirror locked to the Avatar centerline (mirror works with every tool). It has a slot-appearance × tone color grid with fixed colors, integer zoom with grid and slot bounds over the dimmed Avatar, a fixed 1× preview, and one-stroke-per-step undo/redo.
  • Hair occlusion of the back layer is visible in the preview.
  • The Part Library is Host-owned data in the current DSH Profile. It survives Client cache clears and restart, and marks parts drawn here as such.
  • Applying a part embeds a copy in the Avatar Appearance. Editing the library part afterwards creates a new part and never changes the applied copy.
  • The applied part follows its slot anchor through head motion, gaze and left/right turns using the slot's shift and far-side rules, in the roster and in a Window Companion.
  • Recipes with Custom Parts carry the raised version and fall back to the snapshot on older Clients. Existing golden output is unchanged.
  • Unit tests cover fill boundaries, the mirror axis, content-hash stability and validation bounds. Runtime acceptance on an isolated DSH Profile shows the part on a speaking Window Companion.

Blocked by

Activity

  1. added this to the v1.2 milestone on Oct 8, 2026
  2. added
    ready-for-agentFully specified, ready for an AFK agent
    area:ui-uxInteraction and visual experience; may accompany a code-layer area
    feature:avatarPersonaBot avatar media and activity frame
    area:fullstackEnd-to-end Host and Client implementation
    scope:tracerHuman-testable implementation slice
    on Oct 8, 2026
  3. DoodleBears commented on Oct 8, 2026

    @DoodleBears
    ContributorAuthor

    Claiming this tracer bullet. The BotPixel half (Custom Part data, content hash, validation, headpiece front/back rendering, fill and mirror algorithms) goes first in BotHarness/BotPixel; then the Host Part Library, Appearance embedding and the Client editor land here on claude/festive-gauss-gv7xu2 once #1235 merges.

    Agent-Task: claude/cloud/session_01MozvQ2eMvqX1MzSqm9G2o8


    Generated by Claude Code

  4. added
    agent:activeOne or more coding-agent tasks currently claim this issue; see claim comments for task IDs
    on Oct 8, 2026
  5. DoodleBears commented on Oct 8, 2026

    @DoodleBears
    ContributorAuthor

    Delivered in #1237 (squash 369a325) with @botharness/pixel-avatar 0.5.0 (BotHarness/BotPixel#11).

    • Editor: a new Drawn headpiece category in the avatar editor.
      • Tools: pencil, eraser, 4-connected fill, and centerline mirroring that works with every tool.
      • Front and back layers, one undo/redo step per stroke, integer zoom over the dimmed Avatar with the slot bounds shown, and a 1× preview.
      • Colors: appearance color slots × five tones, plus fixed colors.
    • Part Library:
      • Host-owned, stored in the avatar-part-library module (Profile schema Generation 73) and keyed by content hash, with origins and parent.
      • Two new Bridge methods: partLibraryList and partLibraryAdd.
      • It survives restarts.
    • Wearing a part:
      • Applying a part embeds a copy as an asset version 3 recipe.
      • Editing a worn part saves a new part that records its parent; Avatars already wearing the old part don't change.
      • The worn copy travels in bot.json and Bot Zips.
    • Rendering: the back layer sits behind the hair and recolors with the hair color. Both layers follow turns, and the part shows on a speaking Window Companion.
    • Review follow-ups:
      • the Part Library is now in the module diagrams;
      • the library load retries after a failure;
      • Stop drawing is disabled while a part is saving;
      • storage errors return storage-unavailable.
    • Evidence: docs/assets/pr/1211-custom-parts/. The speech in the recording is simulated.

    Agent-Task: claude/cloud/session_01MozvQ2eMvqX1MzSqm9G2o8


    Generated by Claude Code

  6. removed
    agent:activeOne or more coding-agent tasks currently claim this issue; see claim comments for task IDs
    on Oct 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:fullstackEnd-to-end Host and Client implementationarea:ui-uxInteraction and visual experience; may accompany a code-layer areafeature:avatarPersonaBot avatar media and activity frameready-for-agentFully specified, ready for an AFK agentscope:tracerHuman-testable implementation slice

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions