Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Show HN: Make your own AI-generated Magic: The Gathering cards with GPT-2 (minimaxir.com)
126 points by minimaxir on July 9, 2019 | hide | past | favorite | 43 comments


I chose the name "Javascript" and let it choose: https://imgur.com/a/mlqJmjK


When I generated it:

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?


Nah, you show them 7, and they pick 0 to go to your hand, and 7 to go to the trash.


The best part is that you have to also choose a card name, but it doesn't do anything.


Seems like Javascript is broken.


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".

_______________

[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.


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...

Edit: Oh, the README. Reading it now.


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


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).


See the dumps for various sampling temperatures. Even at 1.2 (versus 0.7), there is some evidence of overfitting.

The app uses a random temperature between 0.7 and 1.2 to prevent it from going off-the-rails.


I think I found another bug of some kind. For "Demonic trade 1B", I got the following, but black shouldn't have artifact destroyers.

Demonic Trade {1}{B} (common)

Sorcery

Buyback {2}

Destroy target artifact.


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.


I asked for "Thought Pull" casting cost UU and it gave me "Counter target spell unless its controller discards their hand." Not bad!

(For some reason, the text on the side says "Uncast" instead of "counter".)


> (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.



This is really great. Is there any other AI similar to this one? Maybe one that generates AI illustrations for the cards...?


I tried to make full cards, text and cart art and card structure, all in the same model but it didn't work:

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


I've also released an interface for a Reddit-based GPT-2 API: https://minimaxir.com/apps/gpt2-reddit/


> 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?

Pretty awesome


There is this project that used an RNN to generate cards' text:

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.


That project turned into RoboRosewater (https://twitter.com/RoboRosewater), which has unfortunately been defunct for several years.


Ah, thanks. I didn't remember whether RoboRosewater was this, or one of the HMM-based projects.


As a LoadingReadyRun (and Desert Bus) fan, I was waiting to see if RoboRosewater came up.

I'm not sure it's quite fair, as RoboRosewater is funnier when it's garbled. Some of its cards have been… memorable :)



Sweet. Is there a way to test this?


I like it! https://imgur.com/a/2IthWGz

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


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!)


Oh hai Max, I remember you from the TC comment section :)

Here's a Hacker News card:

https://imgur.com/a/vFI9CGw


Would be awesome if you added the ability to choose the card's image in the render (like source from imgur or something).


The punctuation in your title is jarring. "Make your own AI-generated Magic cards with GPT-2" would be a lot better.


You don't want to deal with litigation by people who thought the generated cards are magical in nature.


Really cool!

The first couple of cards I generated were way overpowered though. The first one was an uncommon 9/8 for 4 mana.


In my testing it generated more underpowered than overpowered cards, which was interesting.


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 :)



Not far off these days. Might not see play in most formats. Would be cool in standard or limited though.


Too weak in modern, basically like any other bomb in limited but less interesting, and too non-interactive in standard.


Amazing. I wonder if there will ever be a CCG comprised entirely of AI-generated cards.


I don't know how they're created, but I know that Keyforge is randomized somehow.

https://www.fantasyflightgames.com/en/products/keyforge/


This is really cool. Very entertaining.


Not working for me

Internal Server Error


really great!




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: