1 00:00:11,662 --> 00:00:18,240 MODERATOR: Hello, everyone. Welcome back to the  platypus theater and PyConline. Next up is Sam   2 00:00:18,240 --> 00:00:32,800 Bishop. He loves Python, Django, cats, working on  personal and professional hardware, playing games   3 00:00:32,800 --> 00:00:46,000 of all kinds and tinkering with 3D printers. >> I am Sam I am presenting this talk. This talk   4 00:00:50,747 --> 00:00:56,880 is going to be a bit of a rush in places but I  think there should be enough time to get through   5 00:00:56,880 --> 00:01:04,240 everything. We will start off with faker. If  you are trying to get random data maybe you   6 00:01:04,240 --> 00:01:09,840 came across this but testing or any of these  other scenario. It has a Pychess plugin.   7 00:01:13,840 --> 00:01:22,000 It let's you generate all kinds of fake  information. Names, jobs, credit cards,   8 00:01:23,040 --> 00:01:29,520 whole profiles even. It is very  powerful and a lot of data in it. It is   9 00:01:31,440 --> 00:01:37,520 more data than you think. It has a number of  plugins that allow you to generate extra things   10 00:01:37,520 --> 00:01:45,520 like social security numbers, ISBN books, and all  these community of plugins. It's got localization   11 00:01:45,520 --> 00:01:50,240 and the ability to get all kinds of extra  character sets and things like that.   12 00:01:51,600 --> 00:01:55,600 Interestingly, compared to the next  one, the ability to do unique sets   13 00:01:55,600 --> 00:01:59,120 which is handy if you want to get a whole  bunch of things and not have overlap.   14 00:02:00,400 --> 00:02:09,440 Then we have mimesis it is a fast data generator.  You will be generating lots and lots and don't   15 00:02:09,440 --> 00:02:15,200 mind about things like uniqueness you can use  it to get a large amount of fake data cooked   16 00:02:15,200 --> 00:02:21,840 up for whatever you are trying to build. Fake  census. I want thousands of names or jobs or   17 00:02:22,400 --> 00:02:30,640 cars. It can put them a lot of interesting  information like political views and occupations   18 00:02:31,680 --> 00:02:38,400 and addresses and geography and it can do  food which isn't something in faker and a   19 00:02:38,400 --> 00:02:44,800 few of the other ones. Drinks and ingredients and  dishes. We have our trucks I mentioned earlier. We   20 00:02:44,800 --> 00:02:50,480 also have cars and airplanes. Those of you who  are a bit of an airplane nerd may have spotted   21 00:02:50,480 --> 00:02:57,680 two that don't exist so it making fake airplanes.  There is no such thing as an Airbus 50.   22 00:02:59,280 --> 00:03:12,120 We have a couple phones. We have CPUs, GPUs, fake  resolutions. They are real but it made them up. We   23 00:03:12,120 --> 00:03:20,880 have programming languages. OS licenses. Operating  system names. It's got a very comprehensive set of   24 00:03:20,880 --> 00:03:26,160 things it can generate for you. Not all this stuff  is stuff you will think of getting when you are   25 00:03:26,160 --> 00:03:32,000 making creative content but if you are trying to  think of something in the middle of writing and   26 00:03:32,560 --> 00:03:38,400 get stuck it is a great way to unblock if you  need a name of a person while writing a story   27 00:03:39,200 --> 00:03:45,040 and can't think of anything. You can reach for  a tool like this and say give me a name, job   28 00:03:45,600 --> 00:03:53,920 or place and it can push through that kind of  scenario. It has bunch of locale settings. You can   29 00:03:55,840 --> 00:04:06,640 have English spelling and French and German. It  has country-specific generators to do things like   30 00:04:06,640 --> 00:04:17,280 I want a European ID number. And a schema-based  tool to create specific generators for your own   31 00:04:17,280 --> 00:04:20,480 purpose. It is definitely worth looking  at if you haven't looked at it before.   32 00:04:22,560 --> 00:04:29,080 On from that, there is more focused tools that I  have come across and put in the presentation. We   33 00:04:29,080 --> 00:04:39,680 have Sarah's entry from 2014. In case you didn't  know nano was a contest where they were trying   34 00:04:39,680 --> 00:04:51,840 to generate the content. Seraph was impressive. He built a complete nanoscript generator. He took   35 00:04:51,840 --> 00:04:59,680 a bunch of text generators and ran them through  and produced a whole book that can be poked and   36 00:04:59,680 --> 00:05:06,960 produced randomly variations on. His book is this  variation. You can use the tool to generate your   37 00:05:06,960 --> 00:05:14,000 own version of this quite easily. It is a very  impressive output. If you are building up some   38 00:05:14,000 --> 00:05:21,840 kind of a world and want mystery text, content,  cryptic cipher stuff, it is pretty and impressive.   39 00:05:23,840 --> 00:05:31,440 He is using the flicker API and image conversions  and processing to color patch backgrounds and   40 00:05:32,080 --> 00:05:36,960 patching dual font. It is very impressive and  worth the read. He has put it all online in   41 00:05:36,960 --> 00:05:42,880 the links you saw in the earlier slides. OK.  On from that. We have the Pantheon generator.   42 00:05:45,520 --> 00:05:54,000 I am going to do this as an interactive demo.  This one is really fun. Here we are pulling it in,   43 00:05:57,680 --> 00:06:06,400 get it started, loaded up, get a first God and  a second God. The way this works is you have to   44 00:06:06,400 --> 00:06:15,760 have ones biologically set based because this  is a genetic program. You need an XX and an XY.   45 00:06:16,320 --> 00:06:22,560 There is a bunch of stuff under the hood where  there is separate between gender and sex. It is   46 00:06:23,120 --> 00:06:29,840 fascinating when you look up how it is combining  multiple attributes. We have our two primary   47 00:06:29,840 --> 00:06:35,520 gods to start things off. We will make our  Pantheon and ask to create 10 generations.   48 00:06:37,840 --> 00:06:45,360 It will create a whole sequence of gods for us.  We get a whole bunch of them progressing down,   49 00:06:46,080 --> 00:06:51,600 losing their powers as they sort of get younger  and further down in the way a lot of classic,   50 00:06:51,600 --> 00:06:59,680 sort of Greek and Roman era stuff tends to have.  Once that's done producing our 10 generations,   51 00:07:00,240 --> 00:07:03,760 I will scroll up and show a few more  of the interesting ones along the way.   52 00:07:06,160 --> 00:07:15,840 It is a fairly large pantheon.  These Gods have been very busy.   53 00:07:17,200 --> 00:07:24,640 Yup. If you look further back up in the top, you  see that all of them are very much gods to begin   54 00:07:24,640 --> 00:07:30,160 with. As you progress, it starts smattering  in the ones that are sort of partial. It is   55 00:07:31,040 --> 00:07:37,840 crossbreeding and losing the powers in that  sort of gradual sense. We have demigods and   56 00:07:39,920 --> 00:07:48,880 further down here we have got -- there was a  semi-divine. Right down to an ordinary women. It   57 00:07:48,880 --> 00:07:56,720 is this progress of becoming a very Greek myth  pantheon here. It is all sort of built off the   58 00:07:56,720 --> 00:08:03,680 back of this taking each generation, combining  them, and producing an output iteratively giving   59 00:08:03,680 --> 00:08:12,800 us this rich pantheon. We end up with various  hierarchies and just to illustrate how it built   60 00:08:12,800 --> 00:08:25,840 this whole pantheon with connections whose parents  and all of the relationships we will graph it out.   61 00:08:30,720 --> 00:08:38,800 Has to think why it graphs it out. As you can see,  it is a very, very rich set of connections here   62 00:08:38,800 --> 00:08:44,160 with all the various intergenerational steps  and relationships between them all and whose   63 00:08:44,160 --> 00:08:50,480 parents produced which. All of this is available  in that library. It is quite a powerful tool to   64 00:08:50,480 --> 00:08:56,080 sort of create this kind of basic world building  background material for either a story or a game.   65 00:09:05,200 --> 00:09:13,840 The earthlike procedural planet generate  with produce really neat things.   66 00:09:18,400 --> 00:09:25,120 I put two seed values in here to show how we  get two distinct planets based on that input.   67 00:09:26,080 --> 00:09:30,160 It takes a while to render these but they  come out looking pretty nice if you ask me.   68 00:09:32,800 --> 00:09:42,320 On that point, there is another planet generator.  Now this one produces an actual whole 3D world.   69 00:09:45,360 --> 00:09:50,640 This is all done in Plotly but it is producing a  height map for the whole world based on the input.   70 00:09:51,200 --> 00:09:54,720 You can easily convert this into  whatever format you want since the   71 00:09:55,280 --> 00:09:59,920 tool produces the raw grid and you  can work with it from that point.   72 00:10:03,280 --> 00:10:14,080 After that planet generator we have our  crossword composer. This allows you to fire   73 00:10:14,080 --> 00:10:18,880 up the GY and you can put them in there and  it will crunch out a crossword puzzle based   74 00:10:18,880 --> 00:10:25,760 on the words and the grid. Here is an example  of it running. You can see how it is taking the   75 00:10:25,760 --> 00:10:32,400 words it is modifying and fitting them in so  they have to match up and you would obviously   76 00:10:32,400 --> 00:10:36,880 take the words and make up your own questions  if you were actually making a crossword with it.   77 00:10:39,360 --> 00:10:45,920 We have our spaceship generator. The spaceship  generator is a blender plugin. It is a relatively   78 00:10:45,920 --> 00:10:52,480 easy one to use. You just pop in here and then  you can go in and you can add a spaceship. Easy   79 00:10:52,480 --> 00:11:00,400 as that. But what's interesting is the variety you  can get. You can get a number of different outputs   80 00:11:01,520 --> 00:11:08,080 based on just the input being completely random.  It doesn't ask for any parameters. You just   81 00:11:08,080 --> 00:11:15,360 give me a spaceship and it produced an actual  completed object with colors, little bit on it,   82 00:11:15,360 --> 00:11:22,160 you can see it has things like antennas and little  arrays and guns and engines and it is a very   83 00:11:22,160 --> 00:11:28,560 impressive amount of detail being placed into  these and completely randomly generated. It is   84 00:11:28,560 --> 00:11:37,200 trivial to start using. It is definitely quite  an impressive free plugin produced by someone who   85 00:11:37,840 --> 00:11:41,840 put a bit of time into actually making something  come out really well with very little effort   86 00:11:43,520 --> 00:11:52,560 and very wide variety of outputs from the long,  sort of narrow. It is a very impressive plugin.   87 00:11:58,080 --> 00:12:08,400 Not a heavy blend user. After the spaceship  generator we have the tree generator which   88 00:12:09,360 --> 00:12:15,760 is another blender plugin used for procedurally  creating trees. There is a lot of power and   89 00:12:18,800 --> 00:12:34,080 it was produced as someone's undergrad. I have  a bamboo to show variation. If we customize the   90 00:12:34,080 --> 00:12:40,560 parameters, we can end up controlling that growth.  Do we want a shorter plant? A taller plant?   91 00:12:40,560 --> 00:12:49,680 Or one that is not going to spread out as  much. That makes it look less like bamboo   92 00:12:49,680 --> 00:12:56,160 and this is important with other trees where you  want to control their growth. It takes a while to   93 00:12:56,160 --> 00:13:01,200 render them out and construct them. It doesn't  texture them so they come out without colors.   94 00:13:02,880 --> 00:13:08,880 Without a lot of work, it is possible to produce  some very impressive results. I asked someone who   95 00:13:08,880 --> 00:13:15,840 knows how to do the blendering and coloring and  shaders and without a lot of work they were able   96 00:13:15,840 --> 00:13:26,640 to convert this out within one day and they  produced this absolutely marvelous Cambridge oak   97 00:13:27,920 --> 00:13:34,720 from just a few hours to color that up. And most  of that was working out what I handed them. They   98 00:13:34,720 --> 00:13:41,600 said it was pretty easy. They did that with no  complex, just basically the 3D equivalent of the   99 00:13:41,600 --> 00:13:49,280 old paint bucket fill in the Photoshop or paint  and it comes out looking pretty impressive. It is   100 00:13:49,280 --> 00:13:55,120 a very powerful plugin. If you need to generate  anything tree-plant like worth looking at.   101 00:13:57,760 --> 00:14:04,720 We have got weld engine. This one is a big one.  I keep going past this page. You may have been   102 00:14:04,720 --> 00:14:18,560 wondering what it is. What it is is a full  plate tectonic generation tool. Participation   103 00:14:20,960 --> 00:14:24,800 and temperatures. It allows you to generate  these and save them all. Here is one I have   104 00:14:24,800 --> 00:14:30,000 already got generated. You can see it  has a temperature banding, we have got   105 00:14:30,000 --> 00:14:35,920 average global temperatures, we have got things  with higher terrain. I am not actually being   106 00:14:35,920 --> 00:14:41,600 as warm. We have rain shadowing and similar  things we switch back to precipitation view.   107 00:14:43,760 --> 00:14:49,680 It is pulling this in from a 100 meg  protobuff file. You can see how these   108 00:14:49,680 --> 00:14:56,160 land forms are producing rain shadows.  It is an incredibly detailed simulation.   109 00:14:56,160 --> 00:15:02,720 It is quite powerful to be able to create these  things. It does a full biome. It allows you to   110 00:15:03,680 --> 00:15:10,560 plot out how much of the planet is covered by  various types. The more useful one is the biome   111 00:15:10,560 --> 00:15:16,960 view itself which gives you a sort of layout of  what all the different biome areas look like.   112 00:15:18,000 --> 00:15:23,600 You can do a satellite view that sort of shows  you what does this look like in real color.   113 00:15:25,360 --> 00:15:31,680 Just wait for that one to pull itself up. This  one starts out with an actual plate tectonic   114 00:15:31,680 --> 00:15:36,320 simulation. It generates a bunch of land forms  and does a fiction simulation of them -- physic   115 00:15:36,320 --> 00:15:43,200 simulation of them colliding with each other to  build up the continental and ocean crust. You put   116 00:15:43,200 --> 00:15:48,880 in how many plates you want and it does a number  of iterations which is the slowest part of the   117 00:15:48,880 --> 00:15:53,840 process. It takes a lot longer to do the plate  simulation than it does to do anything else.   118 00:15:57,360 --> 00:16:01,840 This is one of it larger files -- the large  files I generated and it produces more detail   119 00:16:01,840 --> 00:16:07,280 in terms of rivers and things like that. It  might take a while to load it up but if it   120 00:16:07,280 --> 00:16:14,800 keeps going we will skip past it. I think that  might be stuck there. We will skip over it.   121 00:16:15,760 --> 00:16:20,560 But it is online. I have produced a fork of that  one. If you want to look for that one in mind   122 00:16:20,560 --> 00:16:26,240 it is definitely worth a look at. Yeah. Ah,  there we go. You can see it as produced the   123 00:16:26,240 --> 00:16:35,840 color terrain and we have deserts and river  valleys and various places there. OK. After that,   124 00:16:36,800 --> 00:16:41,680 how are these actually put together? What  is under the hood of the Python tools?   125 00:16:46,000 --> 00:16:53,920 If you want to modify one or build your own, where  do you even start? The first few I showed a fairly   126 00:16:55,040 --> 00:17:01,920 random. Everyone sort of starting out does the  pick one from a list basic random choice problems.   127 00:17:01,920 --> 00:17:09,280 That's what they are built up for. Even the nano  Jenn mode entry is heavily built are randomness.   128 00:17:09,280 --> 00:17:16,427 It is additive to the image processing and  matching the colors but under the hood it   129 00:17:16,427 --> 00:17:23,760 is go to the flicker API and get random pictures  and pick random pictures, pick some random text,   130 00:17:24,640 --> 00:17:30,640 adjust it to match the font, not put that in.  It is still randomness driving that process.   131 00:17:31,280 --> 00:17:35,840 You can go quite a long way with randomness. You feed to step it up if you want to   132 00:17:35,840 --> 00:17:41,440 create richer things -- need. Get into  the genetic algorithms which was in the   133 00:17:41,440 --> 00:17:48,640 pantheon generator. That takes these things  and combines them. There is a complex   134 00:17:49,200 --> 00:17:52,080 set of things that are and  aren't genetic algorithms but in   135 00:17:52,800 --> 00:17:58,080 essence what they are is the process of  taking the properties of one generation,   136 00:17:58,080 --> 00:18:04,800 mixing them and producing a new generation and  rather or not that is one kind or another really   137 00:18:04,800 --> 00:18:11,520 isn't important at this level. It is a very  powerful way for you to get a combination output.   138 00:18:11,520 --> 00:18:17,440 You know, take properties of multiple things and  produce a whole plethora of outcomes that gives   139 00:18:17,440 --> 00:18:24,080 you things like that whole graph you saw where  from just two inputs we ended up with hundreds of   140 00:18:24,080 --> 00:18:30,320 different Gods all of their own various domains  and specialties. We went from at the very top,   141 00:18:30,320 --> 00:18:46,080 we started out with, you know, Goddesses. We  have Curtis God of depends. It is going from   142 00:18:46,080 --> 00:18:51,440 to the the other end is a generative process and  a genetic algorithm is a great way to build that.   143 00:18:52,960 --> 00:18:59,520 On top of that we have noise processes. This is  the bread and butter. The noise processes are a   144 00:18:59,520 --> 00:19:05,280 way you would have seen with there visual tools.  These are heavily built on noise processors.   145 00:19:09,040 --> 00:19:13,760 I will cover three noise processors. We have there  diamond square. It is the simplest and one of the   146 00:19:13,760 --> 00:19:20,400 oldest. That is the whole program right there.  When you adjust the property, which it only has   147 00:19:20,400 --> 00:19:28,000 one, the F property, what you end up with is  a variety of noises. Random. If you actually   148 00:19:28,000 --> 00:19:36,080 change them up or down we change the scale of that  randomness. Les course. Change it down and it gets   149 00:19:36,080 --> 00:19:40,400 less course. All of the way do you know there  -- all of the way down there shows a very smooth   150 00:19:41,680 --> 00:19:56,320 spread out randomness. We have perlin noise  which is what that is. It is a fairly simple   151 00:19:56,320 --> 00:20:02,560 noise process. I am not going to show the actual  implementation. It takes a whole screen. Not   152 00:20:02,560 --> 00:20:08,560 worth really showing. But Perlin noise is fairly  understandable. You change the parameters and   153 00:20:11,040 --> 00:20:18,160 end up with changes in the noise. It depends  on the input. It won't generate different noise   154 00:20:18,160 --> 00:20:23,600 without changing those inputs. If you do change  the inputs, you can adjust what you get in terms   155 00:20:23,600 --> 00:20:28,880 of the output. If we make the area bigger even  though the ratio is the same we get different   156 00:20:28,880 --> 00:20:34,960 inputs. If we increase the area, you will  notice it doesn't change. That's a double   157 00:20:35,520 --> 00:20:43,280 picture. The grid is twice as big. The noise  is the same more blended out because that's   158 00:20:43,280 --> 00:20:50,560 one of the parameters that changes the noise  versus the data output. And Perlin noise is   159 00:20:51,200 --> 00:20:57,120 one of the stables. It is used in a lot of places.  Stepping out from Perlin noise is simple simplex   160 00:20:57,120 --> 00:21:08,640 and open simplex noise which is one of the more  interesting ones. You can generate multiple noise.   161 00:21:14,480 --> 00:21:22,320 I am not going to dig too much into open simplex  because open simplex is the one I can show you and   162 00:21:22,320 --> 00:21:27,920 get into it. That's the whole thing. I am not  going to bother trying to even explain the   163 00:21:27,920 --> 00:21:34,800 process. That's the most readable implementation  I could find. It is a bigger algorithm than you   164 00:21:34,800 --> 00:21:41,280 think. It is pretty powerful. If you do want  to dig into it, there is a fantastic paper   165 00:21:43,200 --> 00:21:49,760 on simple simplex noise which is applicable to  open simplex because once you understand how it   166 00:21:49,760 --> 00:21:55,680 works by getting to the end of the paper you will  see it is pretty much flipping around which way   167 00:21:55,680 --> 00:22:04,000 they work. It is a weird way but patterns, yeah.  Let's see it in use. What we have is open simplex   168 00:22:04,000 --> 00:22:12,000 noise. It is just chucked in the parameters there.  Obviously setting it up there. The feature size   169 00:22:12,000 --> 00:22:19,280 is set to 24 pixels. We get noise of this size. If  we have that, the noise gets more grainy. It has   170 00:22:19,280 --> 00:22:27,920 been shrunk. If we change it to a smaller  one we get another step. We half the size   171 00:22:27,920 --> 00:22:33,920 and set it down to 8. If we shrink it you  can see it is getting grainy and granular but   172 00:22:34,880 --> 00:22:41,920 at the same time it is one of these things that  let's you control what text you get out of the   173 00:22:41,920 --> 00:22:48,480 noise process. Tuning these parameters  is the skill in using the noise process.   174 00:22:48,480 --> 00:22:53,840 It is basically what you can use to control  the how of the output being useful to you.   175 00:22:56,720 --> 00:22:59,760 This is a version I have run through  numpy which makes sense in a minute.   176 00:23:00,880 --> 00:23:06,640 You are able to run this in a vectorised  fashion and run it in parallel.   177 00:23:10,080 --> 00:23:14,960 When you want to generate thousands of pixels  worth of it, it starts to become relevant. Or   178 00:23:17,200 --> 00:23:23,280 when you want to do it in 3-4 dimensions. Numpy is  better that -- at that than a couple four loops.   179 00:23:24,000 --> 00:23:30,560 I turned a 3D array into a GIF. You can think  of it as panning up through the layers of   180 00:23:30,560 --> 00:23:36,240 noise and you can see how the noise pattern is  smoothly evolving up through the layers and the   181 00:23:37,120 --> 00:23:47,680 black and white areas are not moving just at  random. Moving on we have constraint solving.   182 00:23:48,400 --> 00:23:55,200 If that sounds unfamiliar, you probably have  come across it and not known about it. These are   183 00:23:55,200 --> 00:24:05,760 constraint solving games. Crossword games are an  example of this. Human brains are good at this   184 00:24:05,760 --> 00:24:12,880 without thinking. Scrabble, again, a constraint  solving game. Constraint solving problems with   185 00:24:12,880 --> 00:24:20,000 complicated. It is hard to teach a computer how  to do. If you want to dig into understanding it,   186 00:24:20,000 --> 00:24:25,200 I would recommend starting on the Wikipedia page  and finding the specific topics you want to study   187 00:24:25,200 --> 00:24:32,800 and dig into them that way. On top of that  there is wavefunction collapse which is an   188 00:24:32,800 --> 00:24:39,920 awesome algorithm that let's you take starting  seed samples and it generates out stuff based on   189 00:24:39,920 --> 00:24:45,600 those seed samples. A good example on the slide  is we have the little plant, sample goes in,   190 00:24:45,600 --> 00:24:51,360 and you get varieties of plants coming out after  by tiling and moving across the algorithm. It is   191 00:24:51,360 --> 00:24:56,400 a pretty interesting algorithm that's worth sort  of reading through. It would honestly be a whole   192 00:24:56,400 --> 00:25:02,400 presentation by itself. I can only really show  you the high-level example here of how it is   193 00:25:03,040 --> 00:25:07,280 iteratively building up the process.  There is a fantastic explanation there by   194 00:25:08,560 --> 00:25:17,200 Robert Hedan. I definitely recommend reading it.  It is a really easy to follow explanation and it   195 00:25:17,200 --> 00:25:26,880 would take more time than I have in the talk to  walk you through it. It is really awesome. As you   196 00:25:26,880 --> 00:25:31,760 can see from the output in that GIF you can do  so much with this algorithm. It is fantastic.   197 00:25:33,600 --> 00:25:40,560 After that one we get to the big one --  Generative Adversarial Networks. They are   198 00:25:40,560 --> 00:25:48,320 being used for a lot of things now. You may have  seen a number of things out there at the moment.   199 00:25:52,000 --> 00:25:58,400 This is something from the -- this Anime doesn't  exist. I picked one at random there. Well,   200 00:25:59,680 --> 00:26:07,200 they picked one at random and I picked one. They  do solve a lot of problems and more every day   201 00:26:07,200 --> 00:26:12,800 really. But they are complicated tools. While  you can apply them to just about any problem,   202 00:26:13,360 --> 00:26:19,200 many problems are not going to be useful for  you as someone trying to get content out of it   203 00:26:19,200 --> 00:26:25,520 unless you really understand what's going on. You get artistic pictures like this one but you   204 00:26:25,520 --> 00:26:33,920 can get a huge variety in output depending  on what you put in. If you were aiming to get   205 00:26:33,920 --> 00:26:39,360 images of people created for your world or game  or whatever you are trying to do with a tool,   206 00:26:40,000 --> 00:26:44,080 you would probably be looking for more like  the left. But if you get parameters wrong   207 00:26:44,720 --> 00:26:51,280 you will end up with abstract art like on the  right. It might not be as straightforward as   208 00:26:51,280 --> 00:27:01,120 creativity. If you are using a complex GAN it  can be hours of work that needs to be redone   209 00:27:02,000 --> 00:27:07,920 every time you make a change. If you  are trying to dig into GANs I definitely   210 00:27:07,920 --> 00:27:12,880 recommend studying up on it. Examples of how  they are useful in the out of the box form   211 00:27:13,600 --> 00:27:22,400 is this house-GAN that generates floor plans. It  is someone's research paper. What you get out of   212 00:27:22,400 --> 00:27:28,880 it is hundreds and hundreds of floor plans which  can be a cool way to get inspiration for levels   213 00:27:28,880 --> 00:27:35,280 in video games or other content where you need  to generate a floor plan to lay things out in   214 00:27:35,280 --> 00:27:41,760 the world. There is this library can is great  library for actually generating content for   215 00:27:42,400 --> 00:27:47,840 statistical samples. It will actually let you  take a spreadsheet in. You can give it a CSV   216 00:27:51,520 --> 00:27:56,480 and it will study it and produce a model for  you automatically which is a lot more useful for   217 00:27:56,480 --> 00:28:01,840 someone trying to get started. It is also pretty  handy if you need to generate statistical samples.   218 00:28:03,920 --> 00:28:08,960 Yeah, that's all the stuff I was trying  to cover over. If you are curious about   219 00:28:08,960 --> 00:28:16,320 digging deeper into anything here is some stuff  I actually cut because I was very fragile or more   220 00:28:16,320 --> 00:28:22,640 explanation required than I had time for. So if  the remaining time has any questions, I am happy   221 00:28:22,640 --> 00:28:27,760 to sort of go back and talk on any of them. >> Hello. We do have questions. Yes.   222 00:28:28,880 --> 00:28:32,240 Feel free to drop more questions in the  question chat. If we run out of time here,   223 00:28:32,240 --> 00:28:37,120 we can answer them in the text channel  afterward. The first is will slides   224 00:28:37,120 --> 00:28:42,000 and links be shared online? >> Yes, I will put the links   225 00:28:42,640 --> 00:28:51,360 in a cohesive document and share the slides >> The video is recorded and it will be up on   226 00:28:51,360 --> 00:28:59,680 the PyCon AU YouTube channel I think. >> Yup. I see the one about the air pressure   227 00:28:59,680 --> 00:29:06,320 and how random the data is. Yeah, that one  definitely has some interesting details in it.   228 00:29:06,880 --> 00:29:12,400 If you saw on the range shadow one, I don't  know if it will switch fast enough, but if you   229 00:29:13,120 --> 00:29:18,640 see on the precipitation one, what it does is it  actually uses terrain height to affect things like   230 00:29:19,760 --> 00:29:23,680 it doesn't have a pressure simulation but it  definitely has thing thinks like rain shadowing.   231 00:29:23,680 --> 00:29:29,360 There is a large mountain area here. You can see  it is affecting how much rain we get in these   232 00:29:29,360 --> 00:29:38,560 areas around it. It is definitely got a lot more  variables in there. They do cascade. In fact, you   233 00:29:38,560 --> 00:29:44,320 can't generate these things until after earlier  layers are generated so it is folding these   234 00:29:44,320 --> 00:29:51,680 different kind of data into each process. It is  definitely taking those kind of data into account.   235 00:29:53,520 --> 00:30:00,366 Since there is just a tiny bit of time I guess  if I am going to answer the GAN question --   236 00:30:00,366 --> 00:30:07,840 >> The question is what's your favorite GAN? >> Yeah. At the moment it would be style GAN   237 00:30:07,840 --> 00:30:14,320 because there is a lot of very interesting stuff  coming out of it like you saw with the pictures   238 00:30:14,320 --> 00:30:20,000 there. You know? It is very amazing you can get  such a huge variety of output from a simple,   239 00:30:20,000 --> 00:30:25,760 sort of tunable process. It is for the  same data you have got everything from,   240 00:30:25,760 --> 00:30:33,120 you know, water color artistic on the left  to very, very abstract line art almost   241 00:30:33,120 --> 00:30:39,920 engraving sort of style patterns on the  right. It is fascinating to see how the same   242 00:30:40,800 --> 00:30:48,640 core data and model can produce a huge variety of  output. That's just the only one at the moment.   243 00:30:50,080 --> 00:30:55,360 MODERATOR: Thank you so much, Sam. There were  a couple questions left that I will paste in   244 00:30:55,360 --> 00:30:59,600 the hallway text that version of Platypus  afterwards if you want to answer those.   245 00:30:59,600 --> 00:31:06,560 >> Happy to answer those. >> Next up at 3:30 AEST we have "Python   246 00:31:06,560 --> 00:31:12,880 VS Space Junk" with Mars Buttfield-Addison.  Have a nice break and thanks for hanging