## What is this project?
GenerativeMagic is [Guilherme Silveira's](https://www.linkedin.com/in/guilhermeazevedosilveira) interpretation on generative magic,
the use of [Generative Design](https://en.wikipedia.org/wiki/Generative_design) for the magic art.
And what is generative magic? It is magic created, enhanced or suggested by a computer, a field of computer-automated design
and computer art coined by this project.
## How can a computer create magic?
Elmsley and many other magicians deduced formulas to create amazing effects. Now we can discover, combine and generate
infinite possibilities with generative magic.
Computers can aid in the creation process of magic in several ways. This project aims but is not limited to the following topics:
- a new effect can be created
- a new effect can be suggested to improve an existing routine
- generate new magical movements, routines and acts
- suggest impromptu effects
- generate unique routines every time a magician presents
- generate scripts using natural language processing for existing and new routines
- catalog magical movements
- create a computer understandable lexicon of magical effects, routines and acts
- generate control out of randomness by using computer vision
- generate control out of uncontrolled effects by placing boundaries on movements
- generate control out of randomness
- slowly get to know and control an entire set of items (i.e. cards) as they are revealed, "re-sequencing" live
- create improvisation for beginners, using techniques that they already master
- generating NLP based excuses for non-natural movements in magic
## How to begin using it?
- Explore the examples directory (or)
- Contact your favorite magician who uses GenerativeMagic
## It looks like you want control of the cards?
Yes and no. Once the computer knows the current state of the deck, it has the power to guide the magician.
So even a shuffled deck can be spread, recognized using - for instance - computer vision and we start the process of generation.
## Can I use with shuffled decks?
Yes, use computer vision or any other approach to encode the current shuffled deck into the generative process.
## Is this restricted to card magic?
So far the implementation is done based on card effects. Simple and gaffed cards can be used. Stacked, memorized, shuffled.
Anyone can jump in and add support to other props.
## Is this also a library for creating magic apps?
No and yes. GenerativeMagic will help you create something new, and then make use of that.
## What is runtime/showtime?
In computer science we say runtime is when the program is running.
However, GenerativeMagic will run before the show to set up the presentation and also during the show.
We make the distinction of those two performance moments by using the words *setup time* and *showtime*. Setup time is
not the best word, suggestions are welcome.
## Can you explain me how it works?
Magic effects are often taught and sold as fixed effects, but most of them are parameterized.
Those parameters come from a parameter space (the feasible region) which can be either explored
to find new magic, or to control the effect's output.
Magical movements are often random but can switched to deterministic, controlled or understood behaviour under
a few circumstances, for example:
- online live magic sessions allows the magician to capture the current setup of a volunteers deck
- parametrized inputs can guarantee deterministic output even in random selections
- picking up packets of cards can be controlled instead of randomized
Parametric design rules can be used to generate simple rules and complex effects.
## Where is the human-readable routine description for each magic effect?
Most of the routine description for magic effects are in their respective books, dvds etc.
## What do I need to do after I generate a new effect, routine etc with Generative Magic?
- Let us know about your creation, we would be very happy to see it being used by more and more artists
- Remember to give credit to Generative Magic, as you would do with any other magician.
- Contribute with your code, customization etc, if possible
## Why make its code public?
I grew in a community of open source and shared knowledge. I am the founder of a school, so I was heavily
involved in education. Both approaches value sharing its knowledge with others interested on it.
I understand knowledge will growth faster if shared, and more people who would
not have access to it now can have it too. I am not sharing it with spectators, but with those who want
to learn it.
## Do I have to pay to run it?
No. Let me know when you make use of it ;)
## Can I execute the routine you created?
Just like any art form, if you use a tool, and your own input to create an art piece, it is your art.
If I used it first, with my input, to create a magic routine, it is my art.