import io from PIL import Image from spriteforge.studio.models import Asset from spriteforge.studio.store import ProjectStore def test_shot_control_roles_replace_independently(tmp_path): store=ProjectStore.create(tmp_path/"s","ops","Ops");store.add_asset(Asset(id="a",name="A",kind="other",target_width=10,target_height=10));_,shot=store.add_shot("a","idle",0,0) image=Image.new("RGBA",(4,4),(255,255,255,255));out=io.BytesIO();image.save(out,"PNG");media=store.import_png(out.getvalue(),"control") store.attach_control("a",shot.id,media,"control");project=store.attach_control("a",shot.id,media,"mask") assert {x.role for x in project.assets[0].shots[0].controls}=={"control","mask"}