Proxy card and AI art

A few months ago, shortly before my arm decided it wanted to try and tear itself off, I decided I wanted to understand how AI art generators worked. I knew people who used AI art tools like LeonardoAI and Midjourney but had no idea how they actually worked.

I’m not an artist by any stretch of the imagination and have the artistic abilities of a rock. I can’t draw to save my life. As a kid, I loved to color but that’s about as far as my artistic interests went. When I started working on publishing my books, I like the idea of including maps, character drawings, and things of the like to give them something to help them stand out against other books that were just words. Book 2 of my Ascension Legacy series includes some amazing character sketches from a young local artist I know named Josie Hanna but the process made me realize that I should have started working on getting art for my books a lot sooner. The time it took and the effort involved to get the art for that book was more than I anticipated because as a non-artist I had no clue how that worked. It made it difficult for me to facilitate and plan for future releases in accordance with my pre-determined publication schedule if I wanted to continue including art. The timelines and added costs conflicted with my times and budgets at the time.

Once I had finished publishing the books in that series in early 2024, the idea of using AI art to speed up creation while reducing costs for future books came to mind but since I knew nothing of AI art, I had to do some research. I chatted with several friends and family members that did use AI art tools and learned of some different options, costs, methods, etc. I spent the next several months playing with some of those tools for days on end. I probably generated at least 20,000 images between Perchance.org, Midjourney.com, civitai.com, OpenAI, and the LeonardoAI app between July 2024 and January 2025.

In the middle of all that, my son and I, who are both big fans and players of Magic the Gathering, started talking about creating our own proxy cards. (For those who don’t know, a proxy card is a fake version of a real card, often with custom art). He and I both own several cards that are worth a lot of money but are really good cards. We want to use them when playing but don’t want to damage them and reduce their value. A proxy card would be a suitable solution to let us use the abilities of a card we own without have to risk the card’s condition and value.

This notion of creating proxy cards meshed super well with my endeavor into experimenting with AI art. We even found a website, mtgnexus.com, that provides an interface to create a rather official looking MtG card with whatever text and artwork we wanted. Using that website, I could create high-quality proxy cards that could look and say whatever I chose. The downside of this website is that because I can put anything in the text that I could theoretically create proxies of real cards with slightly modified text that my opponents may not realize is wrong to gain an unfair advantage in our games. I’m not a fan of that. If I’m (or you’re) going to use proxies at my table then they better be the exact proper casting cost, card types, and with the true and unmodified abilities, power, toughness, and/or any other element of the card that might impact gameplay.

I don’t want anyone plopping down a fake card with fake stats at my table, especially not me. Well, one such incident showed me the err of my ways. I had created a proxy for a particular card I own but had unintentionally got something wrong in the card text that made the card do slightly more than it should. Whoops. That was a wake up call for me that while mtgnexus.com is a cool tool, it’s open interface that let’s creators like me freely edit card abilities means that anything created there is subjective to error or deceit.

With that risk in mind, I endeavored to do better. I tracked down a free templating program called Card Maker. This program runs locally on a PC and lets me create as basic or complex of a template as I choose. I spent a couple of days learning the tool and creating a template that encompassed every format of current MtG cards. With the template setup, all I had to do was attach a CSV file to the template and it would automatically consume the data for each row as a new card and create content per the template’s configuration.

All that was left to do was figure out how to create a CSV file for dozens of cards at once.

Programmer background was a go!

I whipped out my trusty Visual Studio IDE, created a new project, and set to work. Wanting to avoid the errors and risks of bad data like I ran into manually adding text to cards on mtgnexus, I opted to use a REST API offered by scryfall.com. Using their API, I can search for a card by name and they send me back the official card text, casting cost, power, toughness, type, and every other piece of information the legit card contains. Using this method, I was able to search for a card in my program, retrieve the data via the REST API and then store all of the pertinent data in a local data store that could then be used to export a full list to a CSV file my template could use.

Uh oh. That method only gives me the text for a proxy card. I still need the art. I don’t want to use the standard art on a proxy card. If I’m playing with AI art tools then I should be able to use AI art with my proxies.

Next, I added logic to my software to use the API from OpenAI to automatically generate AI art for a card when I successfully searched for one using the scryfall API. This did not work out well. The code to have the OpenAI API generate and return an image worked without fault. The issue was that there were key elements in what the OpenAI API would do. I was getting back images with the wrong orientation, wrong aspect ratio, and/or just bad artwork unfitting for the card I wanted to produce. The results from the OpenAI API were too inconsistent to be routinely useable and given that I was paying $.016-$.20 per image, I wanted that money to be usefully spent and not wasted on a 50% fail rate, a fail being an unusable image for whatever reason. When I’m talking about doing 100-120 cards for an entire deck, that’s $15/$20 bucks just for the art of which I’m going to have to replace at least half with something else. I couldn’t conceivably spend $30-$50 per deck to just create the art in enough repetition that I eventually got a useable image for each card.

OpenAI was not the path forward.

By this time, I had already spent considerable time with Midjourney and it had established itself as my favorite of the AI art tools. Simple to use, cost effective, browser-based for ease of access, and it produced quality results time and time again in whatever format I wanted. None of this random orientation or random aspect ratio BS that OpenAI was doing. Unfortunately, Midjourney does not offer an API like OpenAI does that would allow me to programmatically create and retrieve art through my custom software. I did find an API that worked with Midjourney but was an added cost ($30/mo) on top of my Midjourney subscription (less than $30/mo) and was not super user friendly. I would essentially have to call a webhook on a Discord server that would interface with the Midjourney engine (which used Discord exclusively back in its original days). The request would generate the images and then send me back the URLs for each image. This meant that my software would have to pull back each of the images from its unique URL, I would have to pick which one I wanted, and then it would be associated to the record in my CSV file. Why go through all of that with the added cost when I can use the web-based interface to generate images, pick the one I want, save only that 1 image to my local machine, and then associate that 1 image with the target CSV record? There was no value to spending an extra $30/mo for that API since the level of effort I would have to undertake would be the same but with more points in the process for something to break.

With the process settled, my software was complete. I would go on over the course of the next few weeks to tweak my software and template design to include a variety of options to streamline processes, create flexible template elements, and more. The end result was amazing. I could produce consistent card proxies using legit card details combined with custom art for the multitude of card types included in the game of Magic the Gathering. All that was left to do from there was figure out how to go from design to physical media. I had the card art but needed a way to produce the physical card with it. I tried printing cards on my inkjet printer but card stock didn’t produce the quality I wanted. Printing on photo paper gave me the quality but that meant having to stick that paper to a card stock core that would also have to be cut down to actual size. Just a lot of tedious manual labor with a high margin for errors. And then that was just the front of the card. If I wanted a back art I would have to reproduce the same efforts and the end result would be a single card multiple times thicker than a standard card. It would have looked hideous.

Luckily, I found a local printer that can print and cut large batch jobs like I needed for a reasonable cost. I could send them the front and back card arts, they could print everything directly on standard card stock, and then they could cut each card. The total cost was about $30-$35 for a standard commander deck with 100 cards in it. The printer would cut the cards with 90-degree corners so I would have to round them off to look more like a traditional MtG card but that’s a pretty small price to pay for all that they could do for the process at a reasonable cost.

And I say all of this to say, I’ve got a new website (www.i45designs.com) where you can go check out a lot of the unused art I created using the various AI art tools I mentioned in this post AND check out some of the cool MtG proxies that some of the art was merged with.

Leave a comment

Please note, comments must be approved before they are published