 Oh, welcome. This is the add-on development panel. So there's been a lot of talk about community. And up to about five or so years ago, add-on development has not had too much of a community. There's been small pockets. But we really wanted to start forming a more official community of add-on developers so that we could talk about some of the problems that we run into to encourage and support new developers to come in, add-on developers, to show the artists that some of the problems that need to get solved are not too hard, that you can come. Maybe there are some additional functionality in Blender that, if added, would make it a little bit easier. But bring in them this ability to create in a different way. So we are here to talk about some of the stuff that we have done and to have a bit of a discussion with you all about what problems did 2.8 solve when it comes to scripting. It's done a tremendous amount of work toward UI and for the artist side. But what has it done for the add-on development side? And maybe there are still some places that need a little bit more work to make it easier for new developers to come on and grow. So is there anything else? I think this would definitely be a spirit. The hope is, the spirit of this is a discussion, not necessarily feature requests. So we're not here to tell the Blender dev, the core dev development team, here are some things that we want. But here are some kind of sticky points that make it a little bit more difficult to develop. Maybe some small features will kind of come from this. But that's not necessarily the point of discussion. So I don't think there is any particular reason why we need to stand. But if you want to sit, we'll just go down the row. Maybe if you know us and some of the work that we've done, but for those that don't like to give just a short introduction. So I am John Denning. I work with CG Cookie. I'm also a professor at Taylor University teaching computer science, computer graphics, computer vision, all sorts of computer things. At CG Cookie, I've worked on an add-on called Ritupaflow. So re-tapologizing 3D models. So some of the problems that we've run into, that we needed to solve were having quick access to vertices and edges and faces, and in particular, a surrounding. So we do a lot of painting, the relax and tweak look at surrounding vertices. So we needed real quick access to what vertices were visible and what are their connectivity. Bmesh does some good stuff. BVH, the bounding volume hierarchy, has some good acceleration structures, but didn't quite meet some of the needs that we needed. We also wanted to use some special rendering. So when the symmetry mirroring was turned on, there was a clear indication of where that symmetry was happening. And so we do some very specialized rendering. We also render the target or the low version, the re-tapology mesh, on top of the source, which required some specialized shaders. So we do lots and lots of very specialized rendering. We collect a lot of data, and we wanted to make it feel like it was its own editor, its own mode. So we created our own UI and kind of built up from there. So much of the problems were some fundamental, or not fundamental, but low level stuff dealing with the meshes and the topology, but also a lot of rendering. So I'll start, or I'll end there. There'll be lots more discussion, but I want to give the other panelists some time to talk. Hey, I'm Christopher Gerhardt. At this point, I've worked on at least one to two dozen add-ons. So I started off doing LEGO animation. I run a YouTube channel. And that led into being very interested in developing Blender add-ons for those who are doing LEGO animation and using Blender as well. So I made an add-on on the Blender market called Bricker, and that was the first big add-on that I made. And it converts 3D objects and even smoke and water simulations into LEGO bricks and LEGO simulations. And then those can be constructed in real life. So that's where I started, and I made a whole suite of LEGO animation tools from there. And then I got to work with John Denning on Rotopa Flow, on some CG cookie work. And then I got to work with Patrick Moore, who gave a talk yesterday on his dentistry add-ons, worked with him on some really interesting problems that we've released a lot of these add-ons on either Blender Market or GitHub as free open source add-ons. And yeah, I'm now working at Crane doing add-on development, pulling a bunch of software packages into Blender using the Python API. So that's what I've been working on. My own microphone. Hi. My name is Vibran van Koelen. I am the creator of The Grove. This is a natural tree growing add-on for Blender. I started out as an architectural visualization artist. I've been doing that for maybe 15 years and five years ago. So I'm really an artist turn coder. So five years ago, I had a couple of weeks off, and I just thought, well, I need better trees. Let's give it a try in Python. And what I can do was more like a joke. I've got some free time on my hands. So before you know it, when you start coding in Blender, it's really addictive. It's one of the most rewarding things to do. It's more than art, even for me. And so I have a little bit of a coding background. But even then, it's a lot of problem solving, and you build upon something that grows bigger and bigger. And yeah, well, here we are. Hello. I'm Sieber Instugel. I work at the Blender Institute. Well, the biggest add-on that I've made so far is the Blender Cloud add-on. So thank you. That combines a whole lot of different parts into one big add-on. And I think the first thing I did was work on the Texture Browser, which connects to the network, connects to Blender Cloud, loads all those textures in, allows you to browse through all that there is on the cloud, and you click on it, it downloads the texture. You can use it in your project. And you can then also easily switch between different resolutions of your images. And another part of that is Flamenco, which is our render farm software. So you can just click on a button, render on Flamenco, and then we'll pack the Blant file together with everything it needs. So if it links in characters from other Blant files, it will also take those other Blant files into consideration. That link into yet other Blant files that use certain texture files, they all come along into what we call a BATPACK, the Blender Asset Tracer Pack. And this is also a point where there was a lot of issues with how do you bundle external stuff into Blender itself. Because BAT is a separate project, so I wanted to have that developed in its own repository with its own buck tracker and its own life, basically, because you can use it as a standalone tool. But it's also used by the Blender Cloud add-on. So it should also be able to be loaded from other pointing code, but it's not bundled with Blender itself because the Blender Cloud add-on is not bundled with Blender. So that was a whole trickery of how do I load it from what turned out to be a wheel file? Load that into Blender's memory. My approach that I thought of is now giving some problems when other people copy it, but we can go into more detail later on. So now that we have most of the people, hopefully, that are in here, I'm assuming that because of the description and the title of the talk, most of you are developers or are thinking about being add-on developers, but I was just kind of curious. How many have written a script in Blender to do something? Good, good. Now, how many have written an add-on, so like an operator or a menu item? Good, good, good. How many use the Blender text editor as a primary way of writing scripts? We'll start there. What about an external editor? Should be the rest, right? So like VS Code, Sublime Text, Notepad, Emacs. Atom. Atom, yes. OK, Vim, yes. I had a good friend, Vi, so Vi and Vim, they're cousins. He said you can never spell evil without Vi. OK, another question. How many use regularly the Blender console? And is there something specific that you use it for? Do you like execute a specific thing or what do you use it for? Finding the functions, yes, thank you. Very good idea, thank you. So it was to be able to, going from 279 to 280, there were some changes in the structure or the organization of some of the functions. And so using the Blender console to be able to find, because without a complete, it's pretty convenient to start typing BPI dot and then get a list of all things and drill down to finding that one function. Good. Anything else or is that it? So it outputs every action so you can reverse engineer some of the functionality or, yes, OK. Debugging, how so? Yeah? So rather than printing out all of the output or, I'm here now, I'm here now. It hasn't broken yet along the way. You can execute line by line in the console and see where it breaks and play around with a couple of different parameters and see visually how everything modifies. Good. Anything else or those the primary? Reloading stuff. Reloading? Yeah, so just import lib, import lib dot reload some module. Just reloading specific parts of my code. That's what I also use it for. OK, OK. I tend to always reload everything completely. I also tend to use it when I've messed something up with my add-on development. Like if I've overwritten some parameter and I can't change it, I'll just go into the Python console and change the parameter myself. That happens too often. So I hope that even though this is a panel, we're going to talk about some of the stuff that we've done. We're very interested. I mean, this is a community thing. We just wanted to get this started. So the intent of this is to be much more discussion. So hoping that we can have some conversation there. So what are some of the other? Those that have just done a couple of scripts, do you feel like doing the scripts is enough for solving the problem that you're looking for? That you don't quite cross over to making a full-on add-on or an operator? Or is there something else that's keeping you from moving from scripts to full-on add-ons? Basically, it's nervousness because I started trying to add-ons based on the templates that come in the Blender text blocks. And because they have no real explanation of why they work, I always feel like I'm fumbling my way, tweak it a bit. Oh, it hasn't crashed yet. Good, I'll keep that. And that doesn't really inspire self-confidence. Thank you. Yeah, so that's mostly a documentation thing. And I think, oh, sorry. Mostly a documentation thing? Thank you. Time. So when you have some specific tasks that you need to script because it will save your time, a lot of time to script it, but making it an add-on takes another amount of time, which is sometimes not worth the effort, not worth the effort because you only have a specific task and will have another specific task next year or so. Yeah, for me also, when I tweak the script to be just specific to that particular blend file, I don't want to generalize it and I don't want to have extra input parameters. I mean, I'm a developer myself. When I write it for myself, I often just put it in the blend file in the text block and just run it there. Also, maybe I would say that when you do something that is very specific to something, it's good to be an add-on. But when you're working for something that will change in time and grow and everything, you have the option either to do a very big one with everything or a big town of thousands of add-ons. So I tend to lean in the direction of trying to have something very generic that just loads outside the definition and stuff. So I'm using, I think about using the add-on system as one single entry point for everything we'll do in Pipeline and stuff because these things are moving like by the hour, you can't manage thousands of add-ons, four thousands of use. So you would go a little bit the same approach that I did with the Blender Cloud add-on and just have one add-on that has loads of different functionalities. Yeah, yeah. And that's also easier to share code between other DCCs and contexts. I also have a new answer to the previous question. About using the console. So I often use it for batch processing of objects, pure modeling or of vertices or whatever. Okay. Who wants a microphone? I do have other questions. So, yeah, I have a question because it was mentioned to share code between add-ons and basically I don't know if there are any plans to have like a dependency graph for Blender add-ons because I stumbled upon that quite a couple of times to have like stuff I would like to rely on but it's very hard for the user to get it that you have to install this add-on in this version to get this add-on working. Don't know if there's a solution plan for that. I don't think there are plans currently for that but I do think, it sounds interesting. I mean, I keep saying the same thing. I have that with the Blender Cloud add-on as well because it depends on the Blender ID add-on for authentication. And I would love it if you just enable the Blender Cloud add-on and then it says, okay, now I enable also the Blender ID add-on. Shouldn't be that hard to do. Yeah, this feature. Yeah. Okay, right now we're in the corner of feature request but how I handled it was I checked for the functionality of the desired plug-in I wanted to have and then output it to the user in my panel. So, okay, this, for me it was images as planes because I don't want it to rewrite it in my own code. So I said, okay, please install images as planes or activate it because it's included. And then it's a workaround but for someone who wants to do it, I want to share. The good thing about Blender is that it's all scriptable anyway. So an add-on currently could already activate other add-ons. And if you just want to have some functionality inside your add-on that another one provides, you can import it even when it's not activated. So you could say from images as planes import some useful function and then use that useful function in your own code. Good to know, but the add-on itself has to be important. So it has to be there, so otherwise. One thing that I always try to tell people when they're writing code and add-ons and everything, they write their own operators. I generally say put your functional code in a separate function and then call that from your operator and then you don't need to activate the whole add-on, you don't need to register all the operators in order to just get access to that useful bit of code. And if you structure it more in that way, it becomes easier as well. It's not applicable to every case for sure, but it can help. Sometimes the add-on is just maybe a very good menu or something. Oh yes, that's better. It's a good way to work, it does not solve the issue. I think one of the big chance we have with Open Source is the experience form of the project. We should look at the Python packaging authority and the mess of every package dependency history, what they are doing in the past few years to solve this and we should just take the same route and have a Blender PIP install for add-ons. Just straight forward. One of the key problems I see with interdependency and all dependency graph is that a lot of the time the version heavily can heavily change the function names and the IP overall. So the only solid way I see of using other plugins in your work is by including the code of it into your plugin. You can make it into a sub-module in Git and use it like that. That is the only solid way that I found at least. That is, of course, a possibility, but I think it would be a better one. Or if you can rotate the microphone a bit. Yes, I think what would be a better one is to actually contact the author of that add-on that you want to import and discuss with them on how to deal with sharing code and making sure that the interface is stable. Because if other people don't know that their code is being used in that way, they also won't make it as stable as you'd like. So I think collaboration here is the primary thing. Collaborating big add-ons is a very hard thing. And you usually don't want to be chained down by other people saying that, well, we use that stuff so you can't change that story. That's complicated. Of course, but then again, if nobody knows that it's being used in that way, even if they want to help out, they're not able to. You don't want to be chained down, but at this point you don't want to use other work either. It's a matter of choice, it's collaboration. Hi, so now let's go into a little bit of different direction for me, at least. I've been waiting for a while to be able to ask that kind of question. And I know you said you don't want to hear feature requests and I tried to formulate it in a way that it's not going to be a feature request. I've been thinking for a while about a way to implement truly parametric objects into Blender like building a cube or whatever and being able to change all of the properties later down just like in Cinema 4D or 3ds Max or whatever. And I was thinking maybe the modifier API would be a good way to plug that in because you could basically take an empty mesh object and generate the desired geometry via a modifier. But that brings me to the actual question, is there any specific reason why the entire modifier API is not exposed to Python? Speed, the way it currently works is that they take in a complete mesh and they possibly output a completely new unrelated mesh and there's a lot of data going through the system. So that's the main reason. But I think I know somebody who's working on a parametric system under the guise of everything nodes. So I'm not working on parametric modeling right now but that's the plan after particles. Another thing with having access to implementing new modifiers using Python is not only that the Python code itself might be slow but also that it can only be single threaded that can be solved by maybe calling some C code from Python again to unlock the global interpreter lock. But we try to avoid getting this API now because we want to replace the entire system anyway. So doesn't make too much sense to add this functionality right now. If you need it for some studio so it's really easy to add a new modifier and get this kind of hook into Blender. It's actually done already. There's some thread on DevTalk where someone has done it but I think it's not something that will end up in Blender anytime soon. To add to the speed thing with Python, actually if you look at some of the objects, if you add an object in Blender, some of the objects are actually generated with Python and you can notice that sometimes it can be slower to add an object than to just completely make it with modifiers. So if you add a sphere like UV sphere and make it super high res and then you make exactly the same sphere with the same resolution with just one vertex and two screw modifiers, the two screw modifiers will be faster to generate that mesh than just adding it. So I don't think that Python is really suitable for this kind of mesh generation stuff. So I have kind of another question. We'll see how long this one goes for. So we had a lot of hands for those that have written scripts or an add-on. Is there anybody here who either hasn't written a script but is interested or has just started writing or doing add-on development or scripting? Okay, so my question to you and anybody else if you can remember, maybe you've been doing this for years, but if you can remember back, was there anything that was really a sticking point for starting that development and learning? It may be just learning how to write Python code, learning how to program, but are there other things with development that were causing a sticking point that if that were made easier or better, maybe it's more templates or more description, more comments or something like this? Is there something that could be done that helps bring in new developers faster? I write, I have written several things, but I remember back at the time there was this huge problem of operators being context dependent, and you see that Blender does this, then you try to write it as a line and it doesn't do anything, it just throw the narrow like, sorry man, wrong context, try again. Yeah, I've been writing and developing scripts for quite a long time, but I'm also active on Blender Stack Exchange and the problem that I see with a lot of new uses that perhaps the documentation could be improved and common problems that I see are, for instance, the restricted context problem. So people try to call code before the add-on is properly registered and they don't realize that that's, for instance, something that's not possible or shouldn't be done, accessing BPI data before it's actually properly loaded and also the context thing because I think that's still sometimes a bit tricky because you have to figure out how exactly to set a custom context and that's not always really obvious, obvious thing to do. First of all, finding out that you can and are able to set a custom context and how it's supposed to be and I think it would be a lot easier for new users if this is probably documented. I mean, we already have like lots of threads on Blender Stack Exchange, so if you search for it, you'll find an answer but like in the official documents. How many people here have actually added something to the documentation because they found it lacking in an area? Thank you so much. Thank you. For me it's sometimes the tooltip, the Python tooltip don't say really where you have to, I mean the path is truncated, you know? And sometimes you don't find, it's hard to find the end points of the attributes you are going to change and sometimes also another thing is I want to throw a panel somewhere or append a panel and it's really hard to know what is the name of the area to append the panel to and you look like an edit source to find the stuff or look online sometimes, for a long time before finding, that's my... I think the edit source trick is actually pretty handy, I use it also all the time and one thing for sure that you know is that it's not out of date and that's what I really like about it. When I see your t-shirt, it's every import BPI, in the beginning, starting developing scripts, you do it from within the console or the text that you're from within Blender because you don't have otherwise access to BPI and so when I started having longer scripts and so on, I started to do it in my own environment and independent of Blender so I could debug things really thoroughly and that meant I had to compile the whole of Blender as an independent BPI module and that happens not to be always easy, I noticed because at least in Linux, it can take some time until you get everything fixed. There are good, let's say not documentations official but well guys, I can't remember Campbell maybe or one of those guys gave like a recipe to do it but it's not working all the time depending on your... So I was wondering other plan to maybe ship an official BPI module with... I don't know if there are any plans in that area it has been made simpler now I think you can just do make BPI and then it builds it as a Python module there was also people who generate Python stubs from BPI so that your IDE can load the stubs and you have the code completion without having to actually load BPI but there's all kinds of problems with IDEs and importing Blender stuff I have a ticket open at the IntelliJ at the PyCharm guys about reloading if some name in locals, some name is reload the thing and otherwise import it that thing that you see all the time in our scripts PyCharm doesn't understand any of it even though it's valid Python and I think I filed a bug in 2016 I haven't fixed it yet Okay then it's me So I guess many coders who are very into Blender would say well as a beginner you can research a little and everything's there so if you want to find out how to use a certain or how to categorize a panel it's there look in the code of Blender also but I think when I started coder Blender what I was missing was a place where it's all put together in a way that non coders can understand it so people who never visited a university class or so and where all these things at least links to how are the panels called how what is the anatomy of a operator and what does it have to do with OOP and what doesn't it so like all these things and these things may be also documented by some non professional coders because that's how people who are new think about it you don't have the mindset of a professional coder Maybe I can just take an addition to this because I remember that what helped me a lot was the examples given by Campbell so back in 2016 or even longer there have been some examples how to create a panel how to create an operator how to create this and that and this really helped me out because the code was very good documented and a lot of people when they start code they don't know exactly how code works and how semantics works but they take examples and then they fill their way up so what we really would benefit from is like a bigger source of examples maybe also a repository with example plugins doing simple stuff or just bringing in the bare bones and the structure you can build upon So what's the gap then between in the text editor go to templates, Python and have that whole list of examples and what you want where's the disconnect between what we have right now and what you're missing So just to quickly add to that I don't know if this already exists or not but is there like a source of recipes like I say for example I want to iterate through all the objects in the scene or I want to start from an object and iterate through all of its children or just kind of things where it's like okay I'm starting to integrate Blender to my pipeline and I know how to do all this stuff in Maya how do I do a lot of these kind of common operations in Blender I think maybe also there's a lot of examples hidden throughout the whole BPI documentation and for sure even if you're an experienced Blender add-on developer there's still areas that not that you don't know how to code but it's just the way that things work they're not explained so there's problem areas like BGL the OpenGL drawing in the 3D viewport and problems in the new status bar you can now add icons I've spent hours trying to add the icons but there's some kind of function that you have to write I don't know what it returns documentation and there's a lot of examples already in the BPI documentation but I think also for me during the years I've created a lot of there's a lot of things in my code that could definitely be code snippets that I could drop into there so I need to push myself to do that also it's so easy to just keep on I'm problem-solving every day but it's very hard to not just continue coding after you've solved it, yeah, and then go on we need to add that back to the documentation I was going to say to that end because I have the same thoughts I'll be coding for a long time and realize this is interesting stuff that I should probably share so I've created on GitHub a add-on skeleton that basically has all of the parts that you need to build an add-on and all you need to do is drop in a piece of code into the operator and then you've got the entire add-on already written for you and in addition to that along with some code that I've implemented from Retopoflow's code and some other add-ons is a repository of common functions that are often used across any kind of problem that you may be encountering like sampling pixel data from a UV texture or from generated texture coordinates or handling images like anything that could be like cross-platform from 279 to 280 like for example, grabbing the context or the dependency graph or updating the scene all these things just calling a simple function that handles both the 279 and the 280 context so yeah, that is open source on GitHub and I think it would be really cool to continue to build on that and I mean it could be this or it could be something else but yeah, involving the entire community and developing like a source of tools that are very common in many different problem-solving contexts and this is something that John Denning has worked on through the cookie-cutter API for user interface and that's got a lot of common functions as well so I think that's a worthwhile goal as well Yeah, so maybe I just come back to the beginning because I remember the wiki being quite hard to use and it's a bit daunting to put in examples and what mostly works really well for coders is like having a repository and then pushing a PR with a new example so instead of maintaining documentation which is always out of date we might focus on maintaining code as it is because it's faster and mostly it's with pull request and merge request it's much better integrated for developers I don't know if that's an idea maybe But like you were mentioning the cookie-cutter API would this be something that we should have in Blender itself then rather than having it somewhere also your examples on a GitHub somewhere shouldn't we have it like in Blender itself that would be part of that structure For example as a template or maybe something else that is being set up by Rodin I think from a template standpoint a lot of these functions would be excellent examples just in terms of I mean this is already available in some resources online but how to integrate an add-on with 279 and 280 to be able to support 279 users as well and then the great thing about this is with GitHub especially is like you can have this whole community of add-on developers working on this API and helping to document it and helping to add functions that they find might be useful for other developers and then I think I would very much agree that that would be very helpful to have in the templates at least Hi Here There are some stuff that I think when I was starting developing add-ons it was a bit hard for me at the beginning and you mentioned it but I think autocomplete is something really important in the I think yes autocomplete is a really important thing for beginners because for instance when you develop Unity games for instance you don't look at the documentation you have the documentation right below your cursor with the method name and you can search through all the math stuff and the usual function that you use for developing stuff you don't need to go to a web browser and come back to the code and this speeds up the things and you are more motivated by what you're actually doing so I think that's a really important stuff in vendor that could be added and one other thing is I think the math API there are stuff that are for beginners a bit like the add sign for the matrix stuff or like that's just under Python nowadays yeah but those are stuff that maybe could be explain a bit like right away maybe in the Python console log or stuff like this well that's tricky because lots of people don't need it so if we start explaining too many things up front in your face then you don't see it anymore that's a problem and the last thing maybe the control z in Blender often you control z and it changes the scene and sometimes it removes part of the code in the editor I think everybody had this issue yes just to say about the recipe things we were talking about I thought about the same thing and I made a snippet library addon where you just select a bunch of code and you save in your own library and I thought maybe for the future I wanted to do the thing like an online repository where people can push their own recipes for like little stuff or big stuff like a full operator or just for loops to iterate on objects so yeah I just wanted to say that so maybe I think it shouldn't be too hard to create an addon that actually integrates with developer.blender.org because that also has like a paste bin kind of feature where you just go developer.blender.org slash paste you paste your code as a gist in github you get a p something something number and then you have something that you can share so maybe some addon could integrate with that and then it stays within the Blender infrastructure I think if we want to talk about some templates that exist within Blender I think we've lost to I think you've lost track of what they're for if they're there for beginners if they're there to sort of help you map your first steps then the comments in them need to be far more explanatory about why things are being done the way they are and what they reveal about the architecture that you are within Blender that you are manipulating with this script because at the moment they basically say here's the function you need here's another function you need here's another function you need I will completely disagree with you here because this is not something you do only for beginners I think this is something that needs to be done throughout all the code all the addons all the C code all the C plus plus code for everyone I'll take that so one of the things I ran into when I first started doing addons was coming at it from an artist the way you develop addons is backwards from the way that I would normally think so addons are developed functionality first you have the function does a thing and then you figure out where that goes in Blender's interface normally the way I would think I make a button and when I push the button then I figure out what the button is supposed to do I have in my mind what it's supposed to do but I need to know where it's going to go it's not a design first approach so that was really a daunting thing for me from a conceptual standpoint I always try to explain it look it's data first if you think about the data then the UI and everything flows from it but people say I want to have a slider and I say yeah but that influences some property of some object and that has a minimum and a maximum value and maybe it's a distance so you want to express it in whatever distance unit that user selected then you just say to Blender draw that property and all of a sudden today you have your slider and it works but indeed it is something that yeah it needs to be explaining a lot along the lines of the developer and artist interaction as well I think a lot of it can be on the artist to reach out to the developer and suggest things like this or even reporting bugs along these lines as well but I think something that I learned when working on the rotoboflow addon is how important it is to provide an easy route for an artist to communicate with a developer say for example there's something like this that you think could be improved or tweaked and maybe you've never heard of github before something that I've implemented now having worked on the rotoboflow addon and seeing the infrastructure that's there is whenever the user encounters a bug or encounters something that could use some sort of route to a way to communicate to me I've implemented like a button that opens up and it'll say like report error and in fact this is on the addon skeleton that I mentioned before it'll send basically it'll send the user into a context where they've got a text editor with information about how to report the bug or how to request a feature and then it'll have a link to either a forums page or something like that so I think that could help to bridge the gap between artists and developers and help to continue the interactions that help us become more design artists. Hi sorry pass it along again designer turn developer a lot of the things that people said about templates and the skeleton that would be great for someone who's just beginning and is not coming from a scripting programming background I did feel like the learning curve was really not adapted to someone like me like someone that is not coming from that background and it's part because the documentation is not complete the API has some inconsistencies there a lot of stuff that is just not well documented but also just when I did start to write code at the beginning it was really bad code because I just didn't have like best practices I didn't know how to write code well and I think that's true for all of us yeah but that's something that even if we all experience maybe we can have like a repository of just like best practices aside from the templates that could help everyone just stuff like what you said about keeping some of the code outside so you don't have to load everything like how to use parameters in a smarter way small stuff like that I think could really help a beginner and if it's in one place and you don't have to go through the internet to look for the one advice that you actually need maybe even in the blender act like the official documentation that would be really helpful for a beginner I think I think something I've found as I've been trying to approach these problems because yes I'm an artist turn developer I've been digging through repositories of experienced coders like John Denning here digging through a topoflow code when I was working on that I found that often times examples and like just seeing repetitive uses of certain practices you just kind of start to absorb that and so I think in some ways I think repository with like like a complete like different methods you can use to solve different problems just a skeleton of the best layout that we've found as a community to start based on and then including best practices in the way that it's used I think a lot of that could be absorbed via osmosis just as you're coding in this infrastructure and as you start to and I mean some of it comes with time as well but as you start to see these things repeated over and over again both in your own code in the skeleton and perhaps other people's code that you're digging through for examples I think some of this comes naturally through that process I'd like to respond to that the idea is nice but perhaps this is not a great idea for somebody who's just starting out as an artist and not as an artist as a coder and start as an artist because they might not be able to judge what's good code and what's bad code and there's a lot of code out there a lot of add-ons being developed and when it comes to best practices probably a better idea to have somebody either from the blender foundation or somebody who's really experienced who writes best practice because otherwise it's really hard to find what's good code because I mean we have a lot of stuff on blender artists on the stack exchange all these forums and not everything is good so if you're absorbing the wrong practices that's perhaps not a good idea I'm just trying to be mindful of time I know there's lots of other questions I will certainly be around I think everyone else will be around you look around there's lots of developers so I don't think that even though we're going to be closing down this particular panel we should stop this conversation this actually ended up being way richer than what I expected which is great I think there's still a lot more to discuss how do we start collecting the snippets for the newcomers for those that have been around for a while start sharing ideas about unique ways that we're using ray tracing for example to solve all sorts of different problems I think there's we should definitely form a community and grow this and make blender add-on development hours so thank you all I do want to be mindful of the next group starting here in just a couple minutes but thank you for the discussion and we'll be around to answer more questions