
Breakdown of why Scryfall blocked Tabletop Simulator (UnityPlayer agents)
Most importers weren't caching the cards at all. You can tell because the cards had direct links to Scryfall's image host, not to a third party cache. The Scryfall community manager confirms this was the direct cause here: https://bsky.app/profile/logan.scryfall.com/post/3mpbmcq7ncl2x
Most importers also chose to use the large version of the images instead of the normal size one, which is about ~50% more bandwidth. The normal size image looks the same as the large image after tabletop simulator does its rendering, so it's just wasteful. Technically they could have made a worse decision and used the png version, which is ~1,500% larger filesize than the normal size image.
Between those two things each four player EDH table hit ~1,600 requests to scryfall's image host for a larger than needed version of the card image in the span of a minute or two. The math is 4 players x 4 decks x 100 cards, because each client loads each card individually = 1600 requests.
All this is before factoring in API load, because most importers also use the scryfall API for card information. There are other options for that, like bulk downloads from scryfall or using mtgJSON for card data.
It's honestly a wonder they didn't block TTS permanently last time it got this bad.
Edit: I made a chart.