Replace all FabricObject usage with SceneItem, accessing item.data.x/y/w/h/sx/sy instead of obj.left/top/width*scaleX. Sync displayObject position/scale after mutations. Remove breakSelection (no ActiveSelection needed), setCoords calls, and all fabric imports. Toggle grayscale uses PixiJS ColorMatrixFilter.desaturate(). arrangeByZOrder now uses item.data.z directly instead of canvas object index.