Skip to content

feat(avatar): import plain PNG pixel art and derive parts from others' parts - #1252

Merged
DoodleBears merged 1 commit into
mainfrom
claude/festive-gauss-gv7xu2-1219
Oct 9, 2026
Merged

DoodleBears merged 1 commit into
mainfrom
claude/festive-gauss-gv7xu2-1219

Conversation

@DoodleBears

@DoodleBears DoodleBears commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Closes #1219

Stacked on #1246 (#1217). Merge #1246 first, then retarget this PR to main.

What changes

  • PNG import. You can import a plain PNG that is the size of a part slot, or a whole-number multiple of it (up to ×16, 1 MB, 256 colors).
    • You see the image's size and color count first, then choose how many colors to keep. Each color snaps to the nearest kept color, with no dithering.
    • Replace color maps the imported fixed colors onto appearance colors and tones.
    • The PNG reader is in packages/core/src/bots/part-image.ts, and the bridge has a new partLibraryImportImage method.
  • Built-in headpieces. Opening one gives you a flattened copy to start drawing from.
  • Derived parts. A part saved from a library part records its parent and keeps the original author as parentAuthor.
  • Library filter. Two new origins: derived and imported-image.

Evidence

Screenshots and a recording of the flow are in docs/assets/pr/1219-png-import/.

flow

Checks

Human QA

Please check the import flow in the recording.

🤖 Generated with Claude Code

https://claude.ai/code/session_01MozvQ2eMvqX1MzSqm9G2o8


Generated by Claude Code

@coderabbitai

coderabbitai Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 21 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 6b1fba3d-a5bc-408b-b039-5c26e6d99319
📥 Commits

Reviewing files that changed from the base of the PR and between 69c366c and aaa76b8.

⛔ Files ignored due to path filters (3)
  • docs/assets/pr/1219-png-import/png-import-flow.gif is excluded by !**/*.gif
  • docs/assets/pr/1219-png-import/png-import-flow.mp4 is excluded by !**/*.mp4
  • docs/assets/pr/1219-png-import/source-tiara.png is excluded by !**/*.png
📒 Files selected for processing (30)
  • CHANGELOG.md
  • CHANGELOG.zh.md
  • docs/architecture/botharness-architecture.en.md
  • docs/architecture/botharness-architecture.md
  • docs/assets/pr/1219-png-import/README.md
  • docs/assets/pr/1219-png-import/builtin-flatten-en-light.webp
  • docs/assets/pr/1219-png-import/derived-en-light.webp
  • docs/assets/pr/1219-png-import/image-count-en-light.webp
  • docs/assets/pr/1219-png-import/image-recolor-en-light.webp
  • docs/assets/pr/1219-png-import/image-reduce-en-light.webp
  • docs/assets/pr/1219-png-import/image-remap-en-light.webp
  • docs/assets/pr/1219-png-import/image-worn-en-light.webp
  • packages/client/src/client/actions.ts
  • packages/client/src/client/avatar-appearance-editor.tsx
  • packages/client/src/client/bridge.ts
  • packages/client/src/client/custom-part-editor.tsx
  • packages/client/src/client/locale.ts
  • packages/client/src/client/profile-header.tsx
  • packages/client/src/client/styles.ts
  • packages/client/test/avatar-appearance-editor.test.ts
  • packages/client/test/bot-sidebar.test.ts
  • packages/client/test/custom-part-tools.test.ts
  • packages/core/src/bots/avatar-appearance.ts
  • packages/core/src/bots/part-image.ts
  • packages/core/src/bots/part-library.ts
  • packages/core/src/bridge/methods.ts
  • packages/core/src/bridge/rpc.ts
  • packages/core/test/bridge-rpc.test.ts
  • packages/core/test/part-image.test.ts
  • packages/core/test/plugin.test.ts
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@DoodleBears
DoodleBears force-pushed the claude/festive-gauss-gv7xu2-1219 branch from 11ff9ab to 2d4acf2 Compare October 9, 2026 04:52
@DoodleBears
DoodleBears changed the base branch from claude/festive-gauss-gv7xu2 to main October 9, 2026 04:52
A plain PNG of a slot's size (or a whole-number scale) imports after the
Human sees its size and color count and chooses how many colors to keep
(nearest color, no dithering); its cells are fixed colors that Replace
color remaps to appearance colors and tones. A built-in headpiece opens
as a flattened starting canvas. A part saved from a library part records
its parent and keeps the original author as parentAuthor, with the new
derived and imported-image origins in the library filter.

Issue: #1219
Agent-Task: claude/cloud/session_01MozvQ2eMvqX1MzSqm9G2o8
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MozvQ2eMvqX1MzSqm9G2o8
@DoodleBears
DoodleBears force-pushed the claude/festive-gauss-gv7xu2-1219 branch from 2d4acf2 to aaa76b8 Compare October 9, 2026 04:54
@DoodleBears
DoodleBears merged commit ce559a8 into main Oct 9, 2026
2 of 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.

Custom Parts 4: plain PNG import and derived editing

2 participants