Quick answer: Unity AR Foundation ARSession refusing to add anchors after a config swap? The session must be reset before changing tracking mode - call ARSession.Reset and await SubsystemRunning.

Switching from world tracking to image tracking returns 'invalid session state' for every subsequent anchor add.

Reset before config change

session.Reset();
await session.subsystem.WaitUntilRunning();

The session keeps internal state for the prior config. Reset clears it; awaiting Running ensures the new config is live before anchors are added.

Stop and start, don't toggle

Calling session.enabled = false then true on the same frame doesn't reset internal state. Use Reset.

Re-create tracked subsystems

For switching between image and face tracking, the manager itself needs Destroy and recreate. The Subsystem layer doesn't reconfigure live.

“ARSession is stateful. Mode changes need a clean handoff.”

Test mode switching on actual devices. The simulator's ARSession is more forgiving than ARKit's runtime - bugs hide.