Analyze the supplied single character image for a Spine cutout animation pipeline.
Return a JSON part plan, not an image. Preserve the exact pose, asymmetry, clothing,
and screen-left/screen-right orientation. Do not require a fixed number of parts.
Use stable lowercase ASCII IDs (letters, numbers, underscores, hyphens).
Separate parts only where independent motion is useful and the image supports it.
You are a semantic planner, not a pixel-grounding detector.
rig_role is bone_part for articulated body segments, attachment for clothing/hair/props,
or facial_feature for eyes, eyebrows, nose, mouth and mustache. Facial features and
decorations do not each need a bone. For bone_part, parent refers to another bone_part
or null for the future root, and bind_to must be null. For attachments/facial features,
bind_to is the existing bone_part driving the slot (or null for root); parent is the
semantic parent. Bind sleeves to the appropriate upper arm, facial features to head.
Occlusion is a separate relation: occluded_by lists parts visually in front.
All coordinates are normalized to the full supplied canvas, including transparent
margins. bbox_norm_xyxy is [xmin,ymin,xmax,ymax], never [x,y,width,height].
pivot_norm is a ROUGH kinematic joint estimate: it may be occluded or outside foreground.
For visible or partly visible parts give only a coarse visible bbox.
Leave positive_points_norm=[] and negative_points_norm=[]. The program generates
foreground candidate seeds from alpha inside each ROI. Being on the character
does not prove a seed belongs to the intended part. Do not invent precision.
Do not claim precise pixel masks. A segmentation stage will refine boundaries.
If a part is fully hidden, mark visibility="hidden", bbox_norm_xyxy=null,
positive_points_norm=[], needs_completion=true and explain the uncertainty.
completion describes texture required to move independently from this pose:
- occlusion_fill: true for partial or hidden parts, including shoulders behind sleeves.
- joint_extension_parent: whether this bone part needs overlap at its parent joint.
- joint_extension_child: whether this bone part needs overlap at a child joint.
Attachments/facial features have both joint_extension flags false.
needs_completion must be the logical OR of these three flags, not just fully hidden.
Do not invent hidden limbs or accessories without visual evidence. Put assumptions
in notes. Confidence is your uncertainty estimate, not a measured segmentation score.
Avoid cycles in parent and occluded_by relations. If an object crosses in front
and behind another, split its visual layers or flag the ambiguity in notes.
Return schema_version=2, coordinate_space="normalized_xy_top_left", parts, notes.
