The first one I generated was a 1/1 creature costing 1 black mana, that had the ability "if you control 8 or more lands during your upkeep you win the game". It's been a while since I've played Magic, but that seems a little overpowered to me :)
That issue is likely due to a race condition when two images are generated at the exact same time. (I'm thinking it's due to how Python's subprocess module works, but it's not an easy thing to debug!)
> Putin ran away to the north pole while the ice was melting. then a huge car crashed and one person died. The other person then was injured while in the car. How long did it take for the ice to melt?
I think towards the end of the thread the initiator of the thread and some of the people in the impromptu community that formed around him started discussing how to generate illustrations and even did it to some extent.
This is remarkably more coherent than previous attempts at M:tG card generation with a deep RNN [1] but on the other hand, the ability text on the few cards I've generated so far seems oddly famliar.
In fact, I got one that is identical to an actual card.
Generated by GPT-2 [2]:
Tephraderm {1}{R} (common)
Sorcery
Each player sacrifices a land.
Actual M:tG card (copied by hand by me and keeping the same notation):
Tremble {1}{R} (Odyssey common)
Sorcery
Each player sacrifices a land.
Also, the names of cards don't seem to be generated by the RNN. "Tephraderm", above, is an actual Magic card (a red rare creature from Onslaught). I certainly did see a "Bontu, Primal Calamity" (which I didn't save) whose name was basically a mashup of the names of "Bontu the Glorified" and "Zacama, Primal Calamity".
I go into it more in the README but yes, GPT-2 overfits Magic cards very quickly despite my best efforts (usually it shifts the mana cost/rarity a bit more though than your example).
Hm. Sorry to hear that. I'm looking into the pregenerated dump you posted on github earlier and I'm seeing a lot of cards that are basically copies of existing cards.
These are from mtg-gpt-2-cloud-run/generated_card_dumps/temp_0_7/cards_0.txt and just the top few rows (also, only the ones I immediately recognised):
Shrieking Specter {6}{B} (common)
Creature ~ Specter (4/4)
Flying
Whenever Shrieking Specter attacks, defending player discards a card.
Luminous Bonds {2}{W} (common)
Enchantment ~ Aura
Enchant creature
Enchanted creature can't attack or block.
Mwonvuli Acid-Moss {3}{G} (uncommon)
Sorcery
Destroy target land. Search your library for
a forest card and put that card onto the battlefield
tapped. Then shuffle your library.
Druid'S Deliverance {1}{G} (common)
Instant
Prevent all combat damage that would be dealt this turn. Populate.
And so on.
Don't ask me why I immediately recognised Shrieking Specter.
It would take a bit of work to figure out which of the generated cards are mashups of existing cards, or the characteristics of existing cards with new names, and which ones are original. Do you have a way to figure this out?
Hey, this is an interesting project regardless. At least with M:tG cards it's very easy to see when GPT-2's output is identical to its input. Imagine trying to figure that out with arbitrary text...
To avoid copying the training set you can increase the temperature at sampling time. This should trade off between accuracy (maximum likelihood) and quirkiness (more stochastic background).
I'd imagine it'd be hard to avoid? There isn't exactly a lot of text on these cards, with so many parameters in the model it wouldn't be surprising that it overfits
Color pie violations are not an inherent bug, just an outcome of the inherent random nature of AI. This AI does a better job than previous ones of following the color pie.
> (For some reason, the text on the side says "Uncast" instead of "counter".)
That's how the source script encodes it (to differentiate it from "counters" like +1/+1 counters) but for some reason it's not fixed during decode. I'm tempted to manually add a fix.
4. Wait, the result of this card is that I do something pointless, then I give my opponent 7 cards from my library, then I put the rest of my library into my graveyard?
46 comments
[ 327 ms ] story [ 1507 ms ] threadThe first couple of cards I generated were way overpowered though. The first one was an uncommon 9/8 for 4 mana.
This worked for a couple of cards and then broke. The image is not related to the data listed to the side. https://i.imgur.com/HiuuPU0.png
Pretty awesome
https://www.mtgsalvation.com/forums/magic-fundamentals/custo...
I think towards the end of the thread the initiator of the thread and some of the people in the impromptu community that formed around him started discussing how to generate illustrations and even did it to some extent.
I'm not sure it's quite fair, as RoboRosewater is funnier when it's garbled. Some of its cards have been… memorable :)
https://andymakesgames.tumblr.com/post/167733819029/urzas-dr...
http://andymakes.com/urzasdreamengine/
https://twitter.com/jonathanfly/status/1124918657220534272
This person trained a nice cart art model: https://twitter.com/mkturkcan/status/1121228356899561472
Lastly just an amusing MTG card mashup:
https://twitter.com/jonathanfly/status/1120560055823347712
In fact, I got one that is identical to an actual card.
Generated by GPT-2 [2]:
Actual M:tG card (copied by hand by me and keeping the same notation): Also, the names of cards don't seem to be generated by the RNN. "Tephraderm", above, is an actual Magic card (a red rare creature from Onslaught). I certainly did see a "Bontu, Primal Calamity" (which I didn't save) whose name was basically a mashup of the names of "Bontu the Glorified" and "Zacama, Primal Calamity"._______________
[1] https://www.mtgsalvation.com/forums/magic-fundamentals/custo...
[2] https://i.imgur.com/PdHkBXr.png
Cards discussed above:
Tremble: https://shop.tcgplayer.com/magic/odyssey/tremble
Tephraderm: https://shop.tcgplayer.com/magic/onslaught/tephraderm
Zacama, Primal Calamity: https://shop.tcgplayer.com/magic/rivals-of-ixalan/zacama-pri...
Bontu the Glorified: https://shop.tcgplayer.com/magic/amonkhet/bontu-the-glorifie...
Sorry, can't link to the Gatherer for any of the cards above- it's down for me.
These are from mtg-gpt-2-cloud-run/generated_card_dumps/temp_0_7/cards_0.txt and just the top few rows (also, only the ones I immediately recognised):
And so on.Don't ask me why I immediately recognised Shrieking Specter.
It would take a bit of work to figure out which of the generated cards are mashups of existing cards, or the characteristics of existing cards with new names, and which ones are original. Do you have a way to figure this out?
Hey, this is an interesting project regardless. At least with M:tG cards it's very easy to see when GPT-2's output is identical to its input. Imagine trying to figure that out with arbitrary text...
Edit: Oh, the README. Reading it now.
The app uses a random temperature between 0.7 and 1.2 to prevent it from going off-the-rails.
Demonic Trade {1}{B} (common)
Sorcery
Buyback {2}
Destroy target artifact.
(For some reason, the text on the side says "Uncast" instead of "counter".)
That's how the source script encodes it (to differentiate it from "counters" like +1/+1 counters) but for some reason it's not fixed during decode. I'm tempted to manually add a fix.
Here's a Hacker News card:
https://imgur.com/a/vFI9CGw
https://www.fantasyflightgames.com/en/products/keyforge/
1. Haha, Javascript _is_ sorcery. Awesome.
2. Wait, Javascript is evil sorcery?
3. This card does a lot
4. Wait, the result of this card is that I do something pointless, then I give my opponent 7 cards from my library, then I put the rest of my library into my graveyard?
Internal Server Error