**Created**:: [[2024-11-09 Saturday]]
**Link**:: https://youtu.be/uOic5TLcoGE
**Duration**:: 93:58

# Summary
In this video, Zsolt introduces the Techno-Visual PKM Community, a members-only club focused on learning and sharing knowledge about visual personal knowledge management through tools like Obsidian, Excalidraw, and automation scripting. He discusses potential topics for exploration, including automating tasks in Obsidian and developing plugins, while emphasizing the collaborative nature of the club. The kickoff session features a live discussion, scripting issues, and solutions related to Excalidraw, illustrating the value of community-driven learning.
# Key Takeaways
- The Techno-Visual PKM Community aims to foster collaboration around visual knowledge management tools, specifically Obsidan and Excalidraw.
- Members will have the opportunity to learn scripting and automation to enhance their productivity and creativity.
- The community will collect and share resources, scripts, and knowledge through platforms like Discord and GitHub.
# Content
Hey everyone, it's Zsolt here. I have a special video for you today: this is the raw recording of the Techno-Visual PKM Community kickoff session. This is something that I wanted to do for such a long time—a club where we develop and learn Obsidian scripting and automation together, scripting like Dataview, Templater, Excalidraw, Obsidian API, plugin development, and anything else that people bring to the table. I'm thinking that this is going to be a members-only club, which means that I'm not going to be publishing future videos here. So please follow me on Twitter, on Discord, or here on YouTube, and I'll be publishing information about how you can join this club later on. For now, this is the kickoff that was available only to the students and alumni of the Visual Thinking Workshop. I hope you like it! Let me know in the comments if you are interested in joining, what other topics you would bring into this discussion, and what would make this even more helpful for you. Enjoy! [* ](https://youtu.be/uOic5TLcoGE?t=0)
Uh, I just want to mention that I'm going to be recording this session, and then we will see if I'm going to use this or not. My idea was that I'll record this as a pilot session for what might in the future be techno-visual PKM, which would be this idea of exploring Obsidian, Excalidraw, Dataview, Templater, and anything else that comes to mind to achieve PKM as a type of stuff with automation. This is what I call techno-visual PKM. I was thinking that maybe this could be a course; I'm not sure if I want to build a course around it, but maybe a club. We have been chatting about this with Nadav, and he came up with this idea for a script, and I thought, why not let’s have a bit of a community session and see if we can create this? So that's why I'm recording the session. If it goes terribly, then we'll just quietly close the discussion. If it goes mildly well or good, then I will probably publish this on YouTube, so yeah, just for you to know what I'm planning to do. And I would say let's jump in. [* ](https://youtu.be/uOic5TLcoGE?t=45)
So I think Nadav, if you can explain the script you had in mind, and then let’s see how we can progress. Yeah, let’s see where we get to with the conversation. Um, yeah, wonderful—I’m glad to see everyone here. I’ve been working a lot with the Excalidraw plugin, and one thing that I’ve noticed is sometimes, when I’m working with different groups, for example, the size guide is made up of smaller rectangles, sometimes it's difficult when I’m working with a lot of layers to be able to grab the whole thing and move it. You end up having to do workarounds. So I was thinking if there was a way to take some elements and group them permanently, almost like the metaphor I was using was baking them together. It’d be great to have that because then instead of dealing with a bunch of grouped elements, you can create one big one and never have to go back to grouping and ungrouping and figuring out which layer you’re on when you’re moving things around. [* ](https://youtu.be/uOic5TLcoGE?t=78)
Yeah, so that was the idea. So help me, because there are two questions that immediately come to mind. First of all, let me—am I sharing my screen? Not yet. If I look at the size guide—so this is my size guide. If I look at the size guide, this is already grouped. So, help me, what’s the... So if I add certain elements on top, be it whatever, so I've added a couple of elements because this is grouped, I can select it. So what's the... So sometimes what I'll do is I'll duplicate all of it and then I'll have, let's say, like four, you know, that and then I group those together. So let's say I'm trying to find it in order to unlock and lock, and if I double-click on them, sometimes it ends up selecting the individual... [* ](https://youtu.be/uOic5TLcoGE?t=173)
Yeah, I mean, so double-clicking will select the individual item. Yes, but—yeah, so one thing to keep in mind, and I think that’s an important point that I can—we'll look into the script as well. I think we are going to be doing some scripting, but I think it’s also good to just explore what other options we have. So first of all, if I select everything here and click lock all, so now everything is locked. You can only—well, you can unlock everything, so there’s the unlock all, which will unlock everything, or you can unlock groups. So, in terms of the circles, I can only unlock them one by one because I didn’t group them, but the size guide in the background I can right-click and ungroup in one go and then manipulate it and then lock it back. So I think in this regard, this is not bad. Now, in terms of the circles, I will need to go one by one and unlock them, which, yeah, is not great. So, before I lock things, I like to group them based on some logic and then lock them because that's going to help me unlock in group. So, now I have two items—actually, many items locked, but groups I can unlock in one go. So I think that’s something to keep in mind. [* ](https://youtu.be/uOic5TLcoGE?t=348)
The other bit that occurred to me is there’s a super powerful script—many powerful scripts—but let’s consider this situation, and I can see your grouping problem emerge in such a situation. Imagine this: that you have all these elements in a drawing, and maybe I have some red arrows here like this, maybe and some black arrows, etc. For whatever reason, I want to change the color of the black arrow. Actually, let’s just look at it. I only want to change the black arrows and not the red ones. There can be many situations like this in terms of selecting lines of a certain length or whatever. Of course, I can hold down the shift and select elements—that's one way to go—but I also have a script called Select Similar Elements, and here I can choose. So I need to select one sample before running the script. I need to select a sample that is going to be the basis of my selection, and then select Similar Elements, and here I can choose the properties of what I want to select, in this case, I want to select the black arrows. This is a relatively simple setup, and if I click run, then all my black arrows are now selected. So if I’m able to define the type of object based on some properties, then I have this selection approach, and then I can change their colors to whatever color I want. So, help me, the D and of course others as well, feel free to chip in. This is not just a discussion between Nadav and I, but he was the trigger for the topic. So help me if these approaches get you closer to what you need and what you’re still missing. [* ](https://youtu.be/uOic5TLcoGE?t=455)
Yeah, I need to—I’m actually—let me pop into my Excalidraw and see if I can replicate the thing real quick. Give me a few minutes—I’m just gonna see if I can... Yeah, because I actually use this pretty extensively. So here’s a typical, well I wouldn’t say typical situation, but something I did recently. So I created this grid for myself, so I had this custom length lines like this and I had another grid—well, it was a grid, so I had these lines as well. And so in this case, what I wanted to do is I want to select all the horizontal lines, and so that would again be shift click, shift click, shift click... that if you have many lines, it’s difficult. Select Similar Elements—I can select that I want the lines, and it also has the... um... does it not? Interesting. Why don’t I see the... interesting width? Huh, let’s see... Did I not see... [* ](https://youtu.be/uOic5TLcoGE?t=627)
I’m surprised because I was—I wonder what I'm now doing wrong here. But I think whenever you’re ready, I do have one of the size guides that I can show. I can share my screen if you can—that's... yeah, okay, let’s see is there a difference between width and stroke width? Again, is there any difference between... I think there was an option which said height and width, but there was also stroke width. Um, yeah, the stroke width is the boldness of the line. So okay, so I see and the width is not the length; that’s not what you were looking for? That is the length, but I wonder why it’s zero. So that’s where I’m surprised to say the least. I really don’t understand. Let’s reinstall this script um... [* ](https://youtu.be/uOic5TLcoGE?t=704)
Because I’ll look at your screen in a second—let me just select similar... I’m just going to reinstall this and let’s see... still no width. We’ll check out the width as well—hold on. I’m... let’s first look at Nadav's screen and then I’m going to check out what’s up with this width because that is very strange. Oh boy! Yeah, so I have this size guide, which you can see is made up of these smaller elements, and I was having this issue a bit when I was trying to erase the size guide when I was doing the Visual Workshop cohort 10. What I ended up doing was some—I guess I’m to replicate exactly what happened, but sometimes it was difficult for me to figure out how to select, and once I was unlocking it, how to select the entire grid. And then if I tried to, let’s say, there were a bunch of elements in the foreground, this would select all of them. Although I see now that it’s allowing me to do this, but basically what I ended up doing was I would go through and kind of delete each element, you know, one by one. CU! I was having problems getting the whole thing selected. Um, so what I was thinking about was if there’s a way to, you know, to have the whole thing together, then there won’t be any memory of it being constructed of these individual small elements. Does that make sense? [* ](https://youtu.be/uOic5TLcoGE?t=861)
It does, it does! And so, what I’m thinking is—we can still see value in doing the script idea that I had. But I think—so in this case, if I ungroup this, I’m going to unlock and ungroup these lines, so now everything is unlogged, ungrouped. So this is the type of situation you’re in. I’m going to delete these so everything is an individual item here, and you want to just select the grid and nothing else. That’s your fundamental issue. [* ](https://youtu.be/uOic5TLcoGE?t=909)
Yeah, so in this case, actually, the Select Similar Elements would work well because I can choose select similar elements. You can see it has a width—it's amazing—what the heck was going on previously? Why didn’t it have a width? I'll still experiment, but in this case, I can just simply say stroke color and type line and then, of course, you need to play a little because sometimes you might have the same stroke color and line, but it’s rare that you have all the properties the same—so opacity especially if you have something like the size guide where it’s generated content, it will have the same width, the same opacity, etc. But in this case, I would just select stroke color and type line, click run, and with that, I only selected those type of elements. And then I can group it, and I’m back with my grouping. So actually, this is pretty powerful. But what I was thinking is we could still tag elements with a custom name and allow you to select based on that name, and I can see the value. So I can see that in certain drawings, you might have types of elements that you want to tag with a certain value and be able to select only those, and it might be various types of elements with different properties, but it has the same value tag, and that helps you. So that’s the script that I was thinking we could create together. But I thought before going there, it’s just useful to understand this. [* ](https://youtu.be/uOic5TLcoGE?t=1046)
Now, back here, let me just see what’s going on. So I created this line—that’s... create—and why doesn’t this have a width? That's the super interesting thing! So, I just tried it out as well and the lines I’m drawing do have width and heights. So... yeah, what the heck is going on here? But let’s take a look at this. So now this is the developer console, and I thought—I usually start with defining my Excalidraw automate object, and whenever I develop a script, I first develop it in the developer console and then move it into a script file. I find this interactive way of working with Excalidraw scripts, but also Obsidian, super helpful. But so I start with defining the EA object and then I will set view—this function just simply connects Out Extreme Excal id raw automate with the drawing that I’m looking at. Let’s just look at the element, EA get view–selected element. So I have this function that will return the selected element in the view, and we can take a look, and it has a width, but interestingly the width is a very small number! I wonder what if I turn off Snap to Object and try it like this... now it has a width! What if I turn Snap to Objects back and look at it this way? Huh... frankly, there’s definitely somewhere a bug! So I don’t understand why an element doesn’t have... now, it has a width! But if I create it with Snap to objects turned on, then by default, it doesn’t get a width, so you can see the... why I know it doesn’t have a width is because it’s 10 to the minus 7... so this number is so... so there’s... and I’m pretty sure this is not an Obsidian bug; this is from the Excal package anyway. So we understand what was with the width. But if we were to create this script in a way that we want to custom tag elements, so that’s my mindset now. We want to create a script where I can tag elements, so let’s maybe talk a little bit about what you see here. [* ](https://youtu.be/uOic5TLcoGE?t=1134)
So, the element—so all I did so far was query the active view and looked at the selected element, and here I can see all the properties of the selected element, and there’s a property in Excal called custom data that is what the name says. So it’s custom data—it’s data that will be also preserved if you copy paste to ExcalDraw.com, but ExcalDraw itself doesn’t use it for anything. You can add data to it, and by the way, just a fun fact—if I have this text here, let me maybe... oh this is good! Okay, so sample text, I'm going to zoom in or enlarge it so you can see it. So I have this sample text, and if I make this black, so I have this text here. If I take my highlighter pen, for example, and I highlight this... so this is when it’s in the background. Then, or maybe if I take the mind map style, organic line—the logic I have built around this line—let’s just look at this EA get view selected element. If you look at this line, you will see that I’m actually here using the custom data for this line, and the stroke properties of all the properties of how the stroke should look like are defined here. So this is just to highlight that some elements have custom data, and that custom data is used. So why am I sharing this? Because we can easily add custom data to an element and then select it. We're going to do it in a second, but I need to keep in mind that custom data might be used by scripts or even functionality in the plugin. So you need to add and remove custom data in a way that you preserve the existing custom data. If you overwrite it, then nothing is a disaster, but it will have potentially consequences. [* ](https://youtu.be/uOic5TLcoGE?t=1490)
And by the way, stop me—I’m super familiar with these tools here, so stop me if you need guidance on what you’re seeing here. So I’m moving fast but I’m also happy to slow down and explain what you’re seeing here. So I thought, yeah, go on. Okay, sorry, just a quick question—can you select by angle? I did not see the angle property in that... yes, you can. You can select by angle, but you need to have an angle that is non-zero. So if I select this line and turn it like this and then go to Select Similar Element then huh, I don’t see the angle. Then you cannot—but we can look at... I thought you could, but we can... Yeah, I saw it on the list of properties in the console and I thought it might be interesting. Yeah, yeah, so for sure we will. Anyway, look at this script, and yeah, I don’t have the angle here, but I’ll show you how you can add that to the script, and we can even update the script. So, that’s the... but keep in mind the angle is... So this line, if I select this line... now, EA select... get view selected element. So if I take a look at this line here, the angle is going to be zero, right? Even though the line has a slope, and that is because the angle is not about the slope of the line but the angle of the rotation of the object. So if I rotate it like this, then it’s going to have an angle because then you will see that it now has an angle, but that is not the angle of the line. You can calculate the angle of the line based on, I guess, the width and the height. So if you wanted to generate an angle, and again, you can update the Select Similar Elements based on that, but so here, if I would draw a line like this again, come on, if you connect the line and look at this, then of course, the angle, as I explained, is zero. But with simple trigonometry, you can calculate the angle from these two values. It’s slightly trickier than that, and that is because you need to understand how the points are processed because... because the... so imagine this line, and then I’m going to make a copy of this line and flip it horizontally. This line will have the same height and width, but points are... so Excalidraw will always have... will always consider height and width in an absolute manner. So this also has the same height and width, but the points will be negative points. So you can see here that, how the... so it requires a bit more thinking. So if you calculate the angle, of course, now assuming that this is maybe 45 degrees, then this would be 135. Of course, this would also come out to 45 unless you do the logic to understand how the points slope—the first and the last point—and based on that, you calculate. And also you would need to think about what do you do if it has three points? How do you calculate the... so the angle is not such a trivial thing, but with these data, it’s a beautiful project to work on. So long story short, I think... yeah, I was just wondering if we could quickly select objects that are parallel to each other or something like this, which is why I was curious about the angle being available. It’s fascinating! I also see a minus zero there, which I haven’t generally encountered, so that’s probably a rounding issue. [* ](https://youtu.be/uOic5TLcoGE?t=1862)
But yes, so minus zero is... Yeah, okay, this was fascinating! Thanks so much! Sorry to take you on a tangent, but... Yeah, yeah, yeah! Since we’re talking about angles, tangent is actually rather meaningful! Okay, so, but back to the custom data! So, let’s as a first step to get us started, add custom data to this text here. And then let’s see how we can select it! By the way, so here I have what you can observe—the way I’m doing this is, if I start to type EA and press the dot, I get all the available functions and properties here. And for the most part, if you want to get help on any of these functions, you can type EA help, and then you can type EA get view selected elements, for example, and you don’t—in this case, I don’t have the opening and closing brackets; I just type in the name and press enter, and there you go. I get a response—a help that gets the selected element in the view. If more are selected, it gets the first. So if your... so the way I’m using — well, the developer consort has this awesome property that it will prompt you with the available functions. And I have this help feature built that you can type EA help for any of the functions, and that is going to give you feedback on what that function is about. And I think that’s just... that’s just good. But, let’s copy—let’s add the custom data to this! [* ](https://youtu.be/uOic5TLcoGE?t=2058)
So what I’m going to do is I’m going to first of all run EA clear. What this does is it clears anything I previously had in EA. When you’re doing an Excal script, you don’t need to do this—Excal Automate comes empty, but if you were doing something before in Excal, it’s just healthy to clear the memory. Because you might end up with unexpected results otherwise. And what you need to understand is you cannot directly modify elements in the view. That is going to cause unexpected results. So the way Excalidraw is built, it assumes that an object stays unchanged, and there’s a process for changing objects on this screen. And this is important because this is a core element of making sure that Excalidraw is fluid as you update the scene because otherwise, it would always need to update each of the elements and it would be super slow. So the way you can change the properties of an element is you need to first copy it into Excalidraw Automate where you can—it’s like you take the part out of the engine, you put it on the workbench, you work on it on the workbench, and then you place it back into the scene. That’s what we’re going to do! The way you do it is the following: I’m going to run EA copy view elements to EA for editing, and I’m going to set which elements I want. I want the EA get view selected elements. So the difference between EA get view selected elements and elements—note the plural: the S is elements, it will return all of the selected elements. It’s going to return an array. Maybe before we do this, let me just show you the difference. So EA get view selected elements returns a list of elements, while EA get view selected element returns an individual item. So this is the same item, but in this case, it’s a list, and of course, if I have multiple elements selected, then selected elements will return all of them and selected element will return the first one in the sequence. In this case, it seems it’s the line that it returned. So that’s what we read here also in the description. And why am I showing you this? It’s because copy view elements to EA for editing requires a list to be provided as input. And again just—and I won’t show you this each time, but just to show you, so if I run the help, you will see that copy view selected elements is looking for a list of Excalidraw objects. And here’s what it does! So I’m going to do this with this. I moved both of these elements over to my workbench. So if now I look at EA get elements, it will have two items. This is also a point to understand that probably you noticed that here I have in the function name, I say get view selected elements, and I can also get EA get view elements, which is going to return all the elements—all the 502 elements in the view. So then I have the view in the function name; it talks about the view that you’re seeing here. It talks about the scene; then I don’t have the view in the function name, so get elements, then I’m looking at what’s on my workbench. So, this is everything in the car. And so, get view elements is everything in the car, and EA get elements is everything on my workbench. Now I can do the following. For now, we're going to mess up this line as well, so you will also see another what happens when we change the custom data without considering what was the previous custom data. I’m going to update the... well, maybe before we go there—let’s—no, that’s good. So I’m going to take all the elements and for each of them, I’m going to do the following: I’m going to take the element, and I’m going to set custom data to have a value of, I don’t know, 'groups', and let’s imagine we will have a solution where you can have multiple groups. So this is going to be group A, like that. So now, I’m going to update all the elements in Excalidraw, so these two elements, I’m going to update to add this custom data to each of the elements. So let’s just take a look here. You can look at my free draw—the free draw now has this custom element, custom data. We are going to overwrite that. So if I press enter here and again take a look at EA elements, then you will see that my free draw line now has a single custom data called ‘groups’, and it says 'group A.' So we’ve done this, and if I now want to move this data back into the view, I need to run EA add elements to view. And if I press enter, then, in this case, of course, we would see more with a thin thick line because this straight line has—it doesn’t change so much with this setting. [* ](https://youtu.be/uOic5TLcoGE?t=2364)
But, so what happened now is if I select this element in the view, EA get view selected element, then that element—the text element—will have this custom data. So now I can do my simple script to select all the elements in the view that have custom data groups—group A. And the way I will do it is EA get view elements, and I’m going to filter this list. And each element, I will decide if it’s in the filter or not based on the following criteria. So I’m going to say this: does the element have custom data? Then does the element have custom data groups? And if it has custom data in groups, then I want to check if it includes group A. This way, we can also—and you can see it prompts me that there are going to be two results with this. So you can see here these are my two results. We can do a second round and maybe add Group B to an element here—maybe to this arrow. So if we want to do that, just to repeat ourselves, so I’m first going to clear EA because EA now on the workbench, I still have the previous elements. So let me just show you that! If I get elements here, I still have the two elements. Adding the elements to Excal doesn’t clear the workbench. You can still continue to work on it, so I need to first clear my desk. So clear! Then I’m going to EA copy view elements for editing—EA get view selected elements—and then we’re going to I’m pressing now the up arrow so the up and down arrow helps you navigate your previous script. So I want to go here, and here, this element, I’m going to add to Group B, like that. And then let’s add this back to the view. Okay, it would be faster, EA add elements—not to view, but not to frame, but to view. And now if I run my filter, Group A is going to return the single element, and Group B is going to return one element. So Group A returns two elements, and you can see I can even write this like this. I can also say that—and/or group B—and this should return us three elements, because now what I’m doing is filtering for elements that have IDs—group IDs A and B. This is the basic architecture that I’m thinking we can build. We can create a script that helps you attach IDs to elements—custom IDs that help you delete them. From then on, if you standardize on these group names in your drawings, then you will be able to pick and choose based on additional dimensions. I mean, this could even be the base of a script there. So for example, let’s do this! This is going to be interesting. And then I’m going to stop and let you ask questions because I can get carried away, but I see a bit of an opportunity here. So imagine the following: I actually am going to take the negative—the script I want to write—and this is a request I get oftentimes. That it would be great to have layers in a way that I can select which layer I want to work on, and everything else is either hidden or locked so it doesn’t get in the way. And we can build that script now because we can do the following: I can create this list of elements; I’m going to add an exclamation mark here, which means I’m negating the value. So the exclamation mark means it’s not the value, so I’m looking for all the elements that are not in Group A or B and that do not have custom data, etc. I want all of these elements, and so these are going to be the elements to lock, for example. So I’m just going to put this in a list, and then I’m going to do the following. I’m going to again clear Excalidraw Automate. I’m going to do EA copy elements for editing—elements to lock, like this. And then I’m going to EA get elements. For each element I want to think element locked equals true, like this. And then EA add elements to—it’s always the elements to view. And hopefully now only these items are selectable; everything else is locked. Of course, I could also have set their opacity to something, but this can be pretty helpful because this way, you can have a script where you have a drop-down menu; you select which groups you want to lock or unlock. And I can definitely see that this is a powerful tool. But yes, I promised I’m going to stop here, so I’m stopping here and let me know questions, because I can imagine that this is already quite deep in the details. This might sidetrack again, but like, I can see how that can be really powerful; but if I imagine having maybe two, three, four groups, and then being able to choose to select basically one group and lock everything else, how hard would it be to make that hot-keyable, for example? So I don’t know. [* ](https://youtu.be/uOic5TLcoGE?t=2763)
Oh, it’s extremely doable! Yes! Because like from a power-using perspective, if you could have like groups one to five or whatnot and could easily with one or two buttons switch between the groups and lock everything else, I mean that’s incredibly useful! So let’s build—I mean, we have limited... we have as much time as we want, but we still have limited time! So I think I don’t want to get in too much detail too quick. But yeah, so the way you would do this is you can assign a script—you can assign hotkeys to Excalidraw Automate scripts—and that way, I think we could actually create our script of Group A, B, or C, or D and play with that. It requires a bit of thinking, but let’s create a script that will for now have a hardcoded group ID that it will lock and unlock everything else and just leave the element there. Then you can work on this further on. So, yeah, I can see that one hour goes extremely quickly here, but let’s look at the following. So I’m going to create a new script now, so I’m coming here to my Excal scripts folder, and this is going to be my new note. And the new note is going to be, I don’t know, power lock one, because we said that we are going to assign various keys to lock two, lock three, lock, unlock... maybe that’s... oh! I cannot have lock and unlock! [* ](https://youtu.be/uOic5TLcoGE?t=3047)
Whatever! Now, the way I like to start all my scripts is this little hack of just adding this JavaScript comment at the top, because from here on, the script is going to be syntax highlighted. By the way, I’m doing the same—so Sidetrack—but let me open a Templater script for you for example. So I’m doing the same with Templater scripts; I turned off the Templater auto, so Templater has a syntax highlighting, but with large files, it slows down. So if I have a large Excal file open in markdown view, then because of the Templater syntax highlighting, it becomes slow. So instead, I’m doing the same trick with Templater scripts that I just add this comment at the top of the script; it creates a code block, but because it’s in a JavaScript comment, it’s disregarded, and then I get a nicely colored syntax highlighted text. But so let's start to write here. So I think we are going to just have a group and we’re going to call this Group A as a constant, and we’re going to actually copy all of these nice scripts from here. So I’m going to, by the way, if I type here EA.dot, then I get all the functions here. So I have a tool tip in here, and you can also see that here I also have immediately the description—the same description you can get with help, and when you’re writing an Excal Automate script, you have the utilities package that you can use to create an input prompt, long description, a suggestor, and find out which script file you’re in. So there are some utility features here as well, but for now, I want to bring elements to lock here. And here instead of Group A, I’m going to type group and we don’t need the “or,” so this is—and we don’t need this—and this. Okay! Let’s pull this like that! [* ](https://youtu.be/uOic5TLcoGE?t=3144)
So, I’m selecting the elements to lock, and then I can EA copy elements to view for editing—elements. I think you’re missing one closing parenthesis right after... Yes, I am! Yes! Yeah, thank you! But we now missed the great debugging opportunity, but I'll show you that as—sorry! No, it wasn't on intention. So, um, because by the way, the debug in this case—my debugging, so I would get an error and I would have no idea where the error comes from. So I would copy-paste this script here and press enter, and I would get this error: unexpected token or whatever. I can click on this link, and it would show me the semicolon, and I could figure out what’s the issue. But so when I have a syntax error in the script, the easiest is to copy-paste that script over to the developer console, press enter, and it will automatically give you the syntax error. Clicking on this, you can navigate to the point in the file. So that's a pretty powerful approach! But so this is our script, and then we want it to... um, not this, but or we wanted to lock and unlock! So let’s do this! So I’m going to... um, for now, I'm going to do this very simple approach. First of all, it’s always good to check so if elements to lock do length equals 0, then new notice “nothing is selected” and return! So we don’t want to run! And I’m going to create a const isLocked as mine, and I'm now going to do a brute force approach. I’m going to take the first element and take it and apply the locked value. So this way I know if I need to… So this is going to... maybe this is rather toggle lock and unlock. And I’m going to put a dash here, as this is Group A or Group 1. But so I copied that here, and then we had to get elements here—we had that? Otherwise, I’m just going to write it. There we go! [* ](https://youtu.be/uOic5TLcoGE?t=3314)
Um, anyway I think it’s faster to write it, so EA get elements. For each element, I want to element locked = not isLocked. So I’m toggling the value, so if it was locked, I’m unlocking—if it wasn’t locked, then I’m locking. And then all I need to do is to EA add elements to view, and we are done! I think we have our script! So if I open Scratchpad—won’t work! You remove the parentheses, the closing one, to show the debugging and you didn’t put it back. There we go! All right! So... um. So now if I now... I cannot select this. But now if I run toggle lock all lock, then I should be able to... what happened? Did I get an error here? Let’s clear this just let’s come over here! So what did—or... well, let’s just see. EA EA set view, and EA get view selected element—just want to see. Oh, Group A! That’s... good! So what’s the issue? [* ](https://youtu.be/uOic5TLcoGE?t=3582)
There’s a mess spelled correctly, right? That seems like the same thing! Elements to—so let’s do this. So we are going to do a bit of debugging. The best approach, I found, for debugging is I’m going to add debugger—that’s a command that will only execute if I have the developer console open under on the right-hand side. So now, if I run the script, I’m going to toggle, lock, unlock—it doesn’t even execute! So what’s going on here? There’s an error on C. Oh, there’s a syntax error! We have here constant... is okay. So I didn’t need debugging; I just needed the equal sign there. So this was missing! Again! Toggle...” Lock and unlock, and why—why—why? Hold on! There’s still something in promise element to lock that’s not defined! I’m sure I misspelled! [* ](https://youtu.be/uOic5TLcoGE?t=3822)
Where do I use that? Element to lock... still there! You go! Do you have a statement? And now everything can be selected. And now, if I toggle again, then only this can be selected! And then what I would do is... So let’s spend a few minutes on this still in terms of how I would... so, so, because this is good for one script, and then my idea is you can—I mean, I have lots of ideas here, so one idea is I could even add... but so the basic idea is I can copy-paste this script three or four times and assign my hotkeys to each of them. So of course, I can toggle lock, unlock one. I can come to Obsidian hotkey settings, and I can type here toggle lock, unlock, and I can bind a hotkey. Maybe I’m going to bind Control Alt One... That’s not good because it’s already taken, but Control Shift One! What about Control Shift One? That’s good! So Control Shift One is the lock all! Lock one now; we would probably need a hotkey for adding and removing something from Group One. And then of course, if I copy-paste this script and have two, three, four, etc., then I can replicate the same idea! But so let's now write a second script for ourselves, and the second script is going to add - toggle to add to Group One, maybe like this. This is going to be our script, so I’m going to... as a starting point copy this entire script here. So what this script is going to do, and maybe it’s a good practice to—that’s what I typically do—here you can write your short description. So this script will lock/unlock all elements in the scene that are not in Group A! Actually, let’s just Group A—and here I can add that this script will add or remove Group A from selected elements. So the way I’m going to... so this is again, I have Group A. What I was thinking recently is... [* ](https://youtu.be/uOic5TLcoGE?t=3960)
Here in the script file, I could take the base name of the script file, and I could actually either use the entire script file name or I could—I would rather take this—so I would split the script file name at Dash like this, and would take the first value, and that’s going to equal to one, and use that as the group name. And then I wouldn’t need to update the group constant in each of my script files! But okay, so that’s now taking us on a tangent! So here, what I’m going to do is I’m going to const selectedElements = EA get view selected elements. Again, I'm going to take here a notice if selected elements dots length is zero, then we can just add this here. So this is good! We have our basic controls here! And then what I want to do is EA—actually we have this line here, I want to move these elements here. And for I think for each of the elements, we are going to do this! So EA get elements for each element, I want to do the following: I want to first of all check if the—so const has group is the first question. So how do I decide that? This is how I decide it! So I create this variable for me to help decide if I need to remove or add the value, and then we’re going to add the value, which is going to be a bit of a tricky goal. [* ](https://youtu.be/uOic5TLcoGE?t=4080)
Maybe this will be the right time to play a bit with GPT! I think that can be also an interesting side quest! So let’s do this! I'm going to play with ChatGPT a little to help with a function! Okay! Before that, I have an object that has a property called custom data. Custom data may be empty, may be null, or it may have values! Write a function that will add a string to an array in custom data groups! Write the function that will add or remove a string from an array stored in custom data groups! Note that custom data groups might be undefined. Find if custom data groups includes a string! If it does not include a string, then it should remove it from the list! If it does not include it, it should add it! Let’s see what happens! [* ](https://youtu.be/uOic5TLcoGE?t=4230)
Okay! So that’s very good! So if the object doesn’t have custom data, it creates it! If it’s not an array, groups is not an array, then it will create an empty array! Then it will check if the group is there! If the group is not there, then it will add the group! If the group is there, then it’s going to remove that group! This is excellent; this is exactly the function we needed! So I’m going to copy this function over, and I’m just going to add it here. Not like that but like this! So this is exactly what we needed! And so the way we need to... and then I actually don’t need the hasGroup either! It’s going to take care of this for me! So all I want to do is toggleGroup, and I want to push the element and group; that’s all I need! And with this, and actually we can even just make it shorter like that! [* ](https://youtu.be/uOic5TLcoGE?t=4295)
And this we don’t need; this is all we need! Question? [* ](https://youtu.be/uOic5TLcoGE?t=4319)
Yeah! The get element... does this return all elements in the view or in the scene, right? This gets not only the selected ones! No, so get elements is in Excalidraw Automate. So this is what I explained: that the workbench is basically—yeah! So the logic for Excal Automate is you have your scene—that’s the car—and you have the workbench—that’s Excalidraw Automate—and you always need to take the pieces that you work on, place it on the workbench, do your magic, and then place it back. [* ](https://youtu.be/uOic5TLcoGE?t=4335)
And this is your fun! And by the way, you can create new elements in the workbench and add it to the view—but it’s always this mindset of I need to move it to the workbench, I do my stuff, and then I need to move it back! I think this is going to actually work! So let’s just see! Let’s remove this! [* ](https://youtu.be/uOic5TLcoGE?t=4350)
Not here, but here! Toggle add to group maybe? It should give me some feedback of how many elements were added. But EA get view selected element, it should no longer have the group. And the array is empty, so you can see that it doesn’t have the group because the array is zero length! And if I run it again, toggle add to group, then now it should have the value and it has one element—it added the group! So this way I can now maybe ungroup this, and I can... Oh, I need to Control Shift One! I need to unlock everything! Yes! So I can select these elements and maybe let’s add this toggle add to group to a hot key as well! So I’m going to come to hotkeys, toggle add to group, and this is going to be... oh boy! Control Windows One! That was not a good choice; it opened something on Windows! [* ](https://youtu.be/uOic5TLcoGE?t=4470)
So Shift Windows One—that’s also not a good choice! So I think the Windows key is not good, so Shift Alt One! That’s good! So Shift Alt One is going to add elements to the group and remove them! And Control Shift One is going to unlock and lock. So I have these elements here, so I’m going to add this to the group, and now I’m going to lock, and hopefully these elements are selectable, and nothing else is selectable! Yeah! Now maybe to close off, we can... so I do want to spend some time just getting some feedback if this is at all meaningful and works for you, but before we do that, I thought let’s add a little bit of feedback of what’s happening! So first of all, I’m going to change this and return true! [* ](https://youtu.be/uOic5TLcoGE?t=4500)
And return false! So what I’m doing is, I’m going to be... um, returning true if I added an element to the group and returning false if I didn’t! Here, I’m going to create this value of let added and deleted equal one! I’m not sure if I can do this, but let’s see what happens if I do this! You can do this! Yes! So, um, and here I’m going to do the following: that I’m making this into a bit of a function! So result, if this is true, we can hear that this is not good practice, but we can be ugly here! So if true, then we added something; else, we deleted something! Right? So that’s all we need to do! And here at the end, I can post a message that new notice... and we can write, so this is the back tick. I like the back tick! It’s a more concise way of writing a string. Um, added elements, and removed deleted elements from... um, group. I think this is now a proper message here! And probably the other message we need here is we should actually add the message here that new notice... and in this case is locked! Depending on the value of is logged, I’m going to... uh, so if it’s locked and I’m unlocking! So if it’s locked, unlocked elements, or locked elements! Like this! I think that’s enough feedback! Um, right? So, if it was locked, then I unlocked it! If it—so this is the short form for the if-else, the question, so here’s the condition: question mark is the if, and this is if true, column if false! So let’s look at what happens! So first of all, I unlocked elements so that everything is now all logged! That’s great! I can now lock elements now—only Group A can be selected! And then let’s maybe remove sample text and instead add these two lines because this is going to toggle! So here the response should be removed—one added, two... but I got an error! Token else... okay, where’s... this doesn’t like this approach? Why? I have no idea, but so we are going to probably—I need to take this... I don’t have the column there; I think that’s the issue! Let’s just take—I’m not sure, but we’ll see! [* ](https://youtu.be/uOic5TLcoGE?t=4852)
Yes! Added! Didn’t add and remove two elements; that’s interesting! So there’s still some... that’s interesting! But let’s—we will—so lock elements! Okay, so there is an issue here! Let’s return! [* ](https://youtu.be/uOic5TLcoGE?t=4875)
False! We can do that, but I’m not yet understanding what’s going on here! Let’s make this—but this is not the issue! But... uh... looks... nicer! Why was it none? Am I misspelling something? Oh, by the way, it starts with zero! [* ](https://youtu.be/uOic5TLcoGE?t=4896)
Um, I wonder—I’m just going to go the old-fashioned way, but I don’t think this is the issue! Let’s try again! So I’m going to unlock, I’m going to take these elements here, and added one element, remove two! Now it seems to work! And then I can lock, and everything can... yeah! So I think we have a script. So let me pause here! First, let’s see if you have any questions in terms of the script we created! I think actually this is an extremely powerful script, so I’m going to play with this because I can certainly see a power user here that’s going to help my workflow! But let’s see if you have questions on the script and then let’s have a bit of feedback! So is this meaningful? Can you see this as an ongoing thing? What we could call Technov Visual PKM? How would you improve on this? Any feedback? But let’s first look at the script itself! [* ](https://youtu.be/uOic5TLcoGE?t=4954)
I mean, from my standpoint, I’m very much still learning a lot! I’m very much a beginner! So, but I’m getting a lot out of watching you do it! So I’m sure there are more experienced people might have more specific feedback! But I’m just enjoying, you know, as I’m learning as a very beginner about scripting! So thanks! That’s helpful to watch! [* ](https://youtu.be/uOic5TLcoGE?t=5028)
Yeah! And also I guess having a recording of this is also pretty helpful, but yeah, Max, I see you came off mute! Do this automation thing, and I am very, very interested in having also a copy of these scripts here to exercise a little bit! And if you can put it somewhere, it would be fine; it would be great! So that we can... I can try it out and experiment a little bit! By my own! Yeah, absolutely! So, I am going to share this! And if I think about techno-visual PKM, then the way I imagine it will work is we would have a shared workplace where each of the videos and scripts would go! For now, I consider this video and session rather on the success side than the flop! So I am going to publish this video and I’m going to also include the links in the video! But right after this session, I’m going to drop it in our Discord, so you can actually find it and play with it if you want immediately! But probably later today or tomorrow, I'm going to push this video to my channel, so there you can dive back into to see some details, and I’ll also have a link to GitHub, where you can find the scripts that we created! Good! Any other questions or comments? Anything? Well, first again on the technical bit, if there’s anything for me! Technically, it’s pretty clear! So I’m not a JavaScript developer, but I have a developing background, so that was easy to follow! [* ](https://youtu.be/uOic5TLcoGE?t=5080)
Cool! Start to get into more scripting with Excal Automate! And I would love the idea of having such sessions! I think I could imagine the interesting part is how to get a common entry level of some sort, because I would assume it’s easy to go very deep into some stuff, and then if you don’t have some foundation, that’s hard to follow! Or, but I might be mistaken on that! [* ](https://youtu.be/uOic5TLcoGE?t=5110)
Yeah, so that’s where I’m with you! So that’s my fear as well, that we can very quickly dive very deep! But maybe the question to Max and MAV and others as well—my other assumption is if we have a repeating cycle of these sessions and we always pick up a topic that’s interesting, maybe next time we could talk about the angles and how you would calculate that! I think it’s actually pretty simple with a bit of help from GPT; I think it is fully doable! But my hope would be that through these cycles of going through these scripts, you can also build up a basic understanding, and of course, there’s always the chance to ask! And then this can become a kind of a workflow! [* ](https://youtu.be/uOic5TLcoGE?t=5157)
Yeah, I think I also found this quite helpful! I think I’ve done a little bit of Dataview scripting! I haven’t really used—I mean, I’ve used Excal in a very... I guess in a very low-tech fashion—just really as a UI! I haven’t taken advantage of some of the scripts that are already there! But I haven’t tried to make any of my own, so I’ve always been curious about that! So I think this would be really nice! Especially that it’s recorded, and you can go back to it! Again, I’m not an expert, but between ChatGPT and Co-Pilot, I’ve managed to somehow get what I want most of the time for Dataview and other—I mean, I’ve even—something that I couldn’t imagine doing a couple of years ago, I’ve been able to write my own little Obsidian plugins for very niche requirements that I have! And it’s been fun playing around with that! So I’m very intrigued and generally interested! I’ve been using Obsidian Canvas a little bit for getting a bunch of stuff done; I think it would be maybe offline! I could share what I’m doing with Canvas and how I find it limiting and maybe if that’s easier to do in Excalidraw, that would be very nice for me, for example! [* ](https://youtu.be/uOic5TLcoGE?t=5229)
Yeah, off the cuff, I can say it’s going to be easier in Excalidraw! [* ](https://youtu.be/uOic5TLcoGE?t=5244)
Right, I can imagine! [* ](https://youtu.be/uOic5TLcoGE?t=5260)
Yeah, I have no doubts in that! Obsidian Canvas is extremely limited! I mean, I can see how some people enjoy limited options because it simplifies stuff, but if you want to get anything done, I think you’re better off... [* ](https://youtu.be/uOic5TLcoGE?t=5280)
Yeah! Yeah! I think it’s the Canvas interface is like a little less intimidating! And, um... it’s, yeah, like you said, I think it’s just a little more user-friendly to get started and to begin with! I think I had simple requirements, but then I realized that, okay, maybe I want to align these things together in a certain—like even very simple things—you realize that it’s a fair amount of manual work! And I found myself thinking that maybe if I had started this exercise in Excalidraw that automation would have served me well at the later stage of that exercise! But at least I now have a sense of what I want, and that I think it’s easier to come into Excalidraw with a concrete set of goals, I guess! [* ](https://youtu.be/uOic5TLcoGE?t=5320)
So, yeah, I’m happy to take my words and share in the Discord group! I guess ideas for things that may be useful to script out, I guess... Awesome! And we have a channel for the—what is it? The techno-visual PKM in our Discord, so that’s a good place to start! I will spam there if it doesn’t make any sense! But just in case it’s a prompt that others find useful, then maybe we could pick it up for a potential future session! But thank you so much for today! [* ](https://youtu.be/uOic5TLcoGE?t=5350)
Yeah, awesome! Okay! Any other questions or comments? [* ](https://youtu.be/uOic5TLcoGE?t=5368)
Uh, hello—do you hear me? Yes? Uh, thanks first of all for a great presentation! It was easy to follow! Uh, I would like to ask how you would like to organize it? Could we have like another Git repository where we could contribute on and test things out and discuss maybe in the future sessions? That would be great! [* ](https://youtu.be/uOic5TLcoGE?t=5381)
Yeah, so there are many questions here! So my basic idea is this would be sort of a club with a fee, so you would have some sort of a monthly or quarterly or whatever club fee, and then they would have regular sessions in terms of prioritizing what we talk about! Now it was easy because I had a chat with Nadav and we had a single idea to work on, so there wasn’t much room for competition of ideas! But we would need some sort of a voting and backlog approach as well as a repository! I would want to indeed keep this to some extent exclusive! Or so, this definitely requires time and effort, etc. So I wouldn’t want to open this up! So in this respect, what goes on Git or how we manage it in Podium, we can create or maybe on Discord—the practical details that we need to work out! But first of all, I wanted to have this pilot run of how such a session would look like! But, yeah, and by the way, any ideas? Absolutely welcome! So please in Discord, share your thoughts! Let’s have a discussion about how this could work—what would work for you, and how you would organize it! [* ](https://youtu.be/uOic5TLcoGE?t=5460)
Yeah, sure! Sounds great! Thank you! [* ](https://youtu.be/uOic5TLcoGE?t=5480)
Okay, so then if there’s nothing else, then I think we’ll close here! It was a pleasure! I enjoyed it! It seems that you enjoyed it as well, so I think we can call that a success! And, yeah, I’ll keep you posted on the next steps! [* ](https://youtu.be/uOic5TLcoGE?t=5496)
Great! Thanks! [* ](https://youtu.be/uOic5TLcoGE?t=5506)
Thank you! [* ](https://youtu.be/uOic5TLcoGE?t=5512)
Bye! Thank you! [* ](https://youtu.be/uOic5TLcoGE?t=5613)
Bye-bye! [* ](https://youtu.be/uOic5TLcoGE?t=5631)
Thank you! [* ](https://youtu.be/uOic5TLcoGE?t=5634)
Bye! Thank you! [* ](https://youtu.be/uOic5TLcoGE?t=5636)
# YouTube Details
## YouTube Description
📽️ ✏️ Sign up for the Visual Thinking Workshop: https://www.visual-thinking-workshop.com/
Scripts from the video: https://gist.github.com/zsviczian/701e7ca2d36415f15f3aa3c908b61871
------
I am launching the Techno-Visual PKM Community. This is the recording of the pilot session. My vision for Techno-Visual PKM is a community of Visual Thinkers who like to play with scripting and automation of Obsidian.md. This will be a membership based community for people who want to learn Dataview, Templater, ExclidrawAutomate, Obsidian API, AI for Templater, Plugin development and more.
---
If you find my videos helpful, please say thanks by buying me a coffee: https://ko-fi.com/zsolt
📩 If you want to connect, you can reach me: (@zsviczian) on the Obsidian Members Group (OMG) on Discord, or on 🐦 Twitter: https://twitter.com/zsviczian
-----
Timestamps
[0:00:00](https://youtu.be/uOic5TLcoGE?t=0) Introduction to Techno-Visual PKM and the Pilot Session
[0:03:12](https://youtu.be/uOic5TLcoGE?t=43203) Nadav presents the automation problem to be solved in the session
[0:04:26](https://youtu.be/uOic5TLcoGE?t=93604) Exploring non-scripting solution options
[0:11:23](https://youtu.be/uOic5TLcoGE?t=82811) Unexpected issues with the "Select Similar Elements" Script
[0:14:03](https://youtu.be/uOic5TLcoGE?t=10814) Nadav's presentation of the problem (screen sharing)
[0:18:22](https://youtu.be/uOic5TLcoGE?t=79218) Troubleshooting Select Similar Elements script not picking up element width for ne line elements
[0:22:11](https://youtu.be/uOic5TLcoGE?t=39622) Presenting the script solution idea: custom tag elements
[0:25:59](https://youtu.be/uOic5TLcoGE?t=212425) A tangent on element.angle
[0:31:13](https://youtu.be/uOic5TLcoGE?t=46831) element.customData - scripting in Developer Console
[0:48:10](https://youtu.be/uOic5TLcoGE?t=36048) Can we assign hotkeys to tag and select/lock elements based on tags?
[0:51:05](https://youtu.be/uOic5TLcoGE?t=18051) Toggle lock and unlock - 1.md
[1:03:31](https://youtu.be/uOic5TLcoGE?t=111663) Toggle add to Group - 1.md
[1:23:24](https://youtu.be/uOic5TLcoGE?t=86483) Closeout questions, feedback, discussion
-----
Watch next:
🎥 Excalidraw Scripting: Daily Quote Illustrations in Obsidian with Templater, Excalidraw and OpenAI https://youtu.be/Tr1rzThssL8
🎥 Daily Mind-Mapping https://youtu.be/HijK74E3MFM
🎥 Building a gallery view https://youtu.be/XBGhqlxlr00
🎥 Automating On-File Open https://youtu.be/OX5_UYjXEvc
📽️ The Excalidraw-Obsidian Showcase: 57 key features in just 17 minutes https://youtu.be/P_Q6avJGoWI
📽️ Getting Started with Excalidraw https://youtu.be/QKnQgSjJVuc
📽️ Getting Started with ExcaliBrain https://youtu.be/8LE_QdYQZVk
📽️ The Playful PKM Castle: A Whirlwind Tour of Zsolt's Visual Thinking World! https://youtu.be/X0AmZGQ_7z4
Visual Thinking Workshop: https://www.visual-thinking-workshop.com/
My blog: https://zsolt.blog/
Obsidian: https://obsidian.md
Excalidraw-Obsidian: https://github.com/zsviczian/obsidian-excalidraw-plugin/
## YouTube Transcript
[hey everyone it's jolt here I have a](https://youtu.be/uOic5TLcoGE?t=0) [special video for you today this is the](https://youtu.be/uOic5TLcoGE?t=3) [raw recording of the Techno visual PKM](https://youtu.be/uOic5TLcoGE?t=5) [Community kickoff session this is](https://youtu.be/uOic5TLcoGE?t=9) [something that I wanted to do for such a](https://youtu.be/uOic5TLcoGE?t=11) [long time a club verv develop and learn](https://youtu.be/uOic5TLcoGE?t=14) [obsidian scripting and automation](https://youtu.be/uOic5TLcoGE?t=17) [together scripting like data view](https://youtu.be/uOic5TLcoGE?t=20) [Templater excal automate obsidian API](https://youtu.be/uOic5TLcoGE?t=23) [plug-in development and any anything](https://youtu.be/uOic5TLcoGE?t=28) [else that people bring to the table I'm](https://youtu.be/uOic5TLcoGE?t=30) [thinking that this is going to be a](https://youtu.be/uOic5TLcoGE?t=33) [members only club which means that I'm](https://youtu.be/uOic5TLcoGE?t=35) [not going to be publishing future videos](https://youtu.be/uOic5TLcoGE?t=38) [here so please follow me on Twitter on](https://youtu.be/uOic5TLcoGE?t=41) [Discord or here on YouTube and I'll be](https://youtu.be/uOic5TLcoGE?t=44) [publishing information about how you can](https://youtu.be/uOic5TLcoGE?t=48) [join this club later on for now this is](https://youtu.be/uOic5TLcoGE?t=50) [the kickoff that was available only to](https://youtu.be/uOic5TLcoGE?t=54) [the students and alumni of the visual](https://youtu.be/uOic5TLcoGE?t=56) [thinking](https://youtu.be/uOic5TLcoGE?t=59) [Workshop I hope you like it let me know](https://youtu.be/uOic5TLcoGE?t=61) [in the comments are you interested in](https://youtu.be/uOic5TLcoGE?t=63) [joining what other topics would you](https://youtu.be/uOic5TLcoGE?t=66) [bring into this discussion and what](https://youtu.be/uOic5TLcoGE?t=68) [would make this even more helpful for](https://youtu.be/uOic5TLcoGE?t=71) [you enjoy uh I just want to mention that](https://youtu.be/uOic5TLcoGE?t=73) [I'm going to be recording this](https://youtu.be/uOic5TLcoGE?t=78) [session and then we will see](https://youtu.be/uOic5TLcoGE?t=81) [if if I'm going to use this or not my](https://youtu.be/uOic5TLcoGE?t=85) [idea was that I'll record this as a](https://youtu.be/uOic5TLcoGE?t=89) [pilot session for what might in the](https://youtu.be/uOic5TLcoGE?t=93) [future be technov visual](https://youtu.be/uOic5TLcoGE?t=97) [PKM which would be this idea of](https://youtu.be/uOic5TLcoGE?t=99) [exploring obsidian excolo data View](https://youtu.be/uOic5TLcoGE?t=103) [Templater and anything else that comes](https://youtu.be/uOic5TLcoGE?t=107) [to mind to](https://youtu.be/uOic5TLcoGE?t=111) [achieve PKM is type of stuff with](https://youtu.be/uOic5TLcoGE?t=113) [Automation and this is what I call](https://youtu.be/uOic5TLcoGE?t=118) [technov Visual PKM I was thinking that](https://youtu.be/uOic5TLcoGE?t=120) [maybe this could be a course I'm not](https://youtu.be/uOic5TLcoGE?t=122) [sure that I want to build a course](https://youtu.be/uOic5TLcoGE?t=125) [around it but maybe a club and then](https://youtu.be/uOic5TLcoGE?t=127) [we've been chatting about this with](https://youtu.be/uOic5TLcoGE?t=130) [nadav and he came with this uh idea for](https://youtu.be/uOic5TLcoGE?t=132) [a script and I thought why not let's](https://youtu.be/uOic5TLcoGE?t=138) [have a bit of a community uh session and](https://youtu.be/uOic5TLcoGE?t=141) [let's see if we can create this so](https://youtu.be/uOic5TLcoGE?t=144) [that's why I'm recording the session and](https://youtu.be/uOic5TLcoGE?t=147) [then yeah if if it goes terribly then](https://youtu.be/uOic5TLcoGE?t=151) [we'll just quietly close the discussion](https://youtu.be/uOic5TLcoGE?t=155) [if it](https://youtu.be/uOic5TLcoGE?t=158) [goes uh mildly good or good then I](https://youtu.be/uOic5TLcoGE?t=159) [probably will publish this on YouTube so](https://youtu.be/uOic5TLcoGE?t=162) [yeah just to uh for you to know uh what](https://youtu.be/uOic5TLcoGE?t=166) [I'm planning to do and I would say let's](https://youtu.be/uOic5TLcoGE?t=170) [jump in](https://youtu.be/uOic5TLcoGE?t=173) [so I think nadav if you can explain the](https://youtu.be/uOic5TLcoGE?t=174) [script you had in](https://youtu.be/uOic5TLcoGE?t=179) [mind and then let's see how we can](https://youtu.be/uOic5TLcoGE?t=181) [progress uh and yeah let's see where we](https://youtu.be/uOic5TLcoGE?t=184) [get to with the](https://youtu.be/uOic5TLcoGE?t=187) [conversation um yeah wonderful uh I'm](https://youtu.be/uOic5TLcoGE?t=192) [glad to see everyone here um I was I've](https://youtu.be/uOic5TLcoGE?t=195) [been working a lot with the excal draw](https://youtu.be/uOic5TLcoGE?t=198) [um plugin and one thing that I've um](https://youtu.be/uOic5TLcoGE?t=202) [that I've noticed is sometimes when I'm](https://youtu.be/uOic5TLcoGE?t=206) [um working with different you know sort](https://youtu.be/uOic5TLcoGE?t=209) [of grouping things for example the size](https://youtu.be/uOic5TLcoGE?t=211) [guide is made up of smaller rectangles](https://youtu.be/uOic5TLcoGE?t=214) [um and sometimes it's difficult when I'm](https://youtu.be/uOic5TLcoGE?t=217) [working with a lot of layers to be able](https://youtu.be/uOic5TLcoGE?t=221) [to grab the whole thing and move it um](https://youtu.be/uOic5TLcoGE?t=222) [and so you end up having to I've do](https://youtu.be/uOic5TLcoGE?t=225) [these](https://youtu.be/uOic5TLcoGE?t=228) [workarounds um so I was thinking if](https://youtu.be/uOic5TLcoGE?t=228) [there was a way to take some elements](https://youtu.be/uOic5TLcoGE?t=232) [and group them permanently almost like](https://youtu.be/uOic5TLcoGE?t=234) [the metaphor I was using was baking them](https://youtu.be/uOic5TLcoGE?t=238) [together um it'd be great to have that](https://youtu.be/uOic5TLcoGE?t=241) [cuz then yeah you could then instead of](https://youtu.be/uOic5TLcoGE?t=244) [dealing with um you know a bunch of](https://youtu.be/uOic5TLcoGE?t=247) [grouped elements you can create one big](https://youtu.be/uOic5TLcoGE?t=250) [one](https://youtu.be/uOic5TLcoGE?t=253) [and um never have to go back to you know](https://youtu.be/uOic5TLcoGE?t=254) [grouping and ungrouping and figuring out](https://youtu.be/uOic5TLcoGE?t=258) [which which layer you're on when you're](https://youtu.be/uOic5TLcoGE?t=260) [moving things](https://youtu.be/uOic5TLcoGE?t=262) [around um yeah so yeah so that was the](https://youtu.be/uOic5TLcoGE?t=263) [idea yeah but so so help me because](https://youtu.be/uOic5TLcoGE?t=266) [there are two two questions that](https://youtu.be/uOic5TLcoGE?t=268) [immediately come to mind so first of all](https://youtu.be/uOic5TLcoGE?t=270) [let me am I sharing my screen not yet if](https://youtu.be/uOic5TLcoGE?t=273) [I look at the size](https://youtu.be/uOic5TLcoGE?t=277) [guide so this is my size guide if I look](https://youtu.be/uOic5TLcoGE?t=279) [at the size](https://youtu.be/uOic5TLcoGE?t=283) [guide this is already grouped so so help](https://youtu.be/uOic5TLcoGE?t=285) [me what's so so if I add certain](https://youtu.be/uOic5TLcoGE?t=288) [elements on](https://youtu.be/uOic5TLcoGE?t=292) [top um be it whatever so I've added a](https://youtu.be/uOic5TLcoGE?t=294) [couple of elements because this is is](https://youtu.be/uOic5TLcoGE?t=297) [grouped I can select it so so what's](https://youtu.be/uOic5TLcoGE?t=299) [the um so sometimes what I'll do is I'll](https://youtu.be/uOic5TLcoGE?t=304) [duplicate all of it and um and then I'll](https://youtu.be/uOic5TLcoGE?t=307) [have let's say like four you know that](https://youtu.be/uOic5TLcoGE?t=310) [and then I group those](https://youtu.be/uOic5TLcoGE?t=312) [together](https://youtu.be/uOic5TLcoGE?t=315) [um let's say I'm then I'm trying to find](https://youtu.be/uOic5TLcoGE?t=316) [it in order to unlock and lock and if I](https://youtu.be/uOic5TLcoGE?t=320) [double click on them sometimes it ends](https://youtu.be/uOic5TLcoGE?t=322) [up](https://youtu.be/uOic5TLcoGE?t=325) [selecting the individual um](https://youtu.be/uOic5TLcoGE?t=326) [yeah I mean so so so double clicking](https://youtu.be/uOic5TLcoGE?t=331) [will select the individual item](https://youtu.be/uOic5TLcoGE?t=333) [yes but](https://youtu.be/uOic5TLcoGE?t=340) [uh yeah so so one thing to keep in mind](https://youtu.be/uOic5TLcoGE?t=342) [and I think that's that's an important](https://youtu.be/uOic5TLcoGE?t=345) [point](https://youtu.be/uOic5TLcoGE?t=347) [that I can and then we'll look into the](https://youtu.be/uOic5TLcoGE?t=348) [script as well so I think we are going](https://youtu.be/uOic5TLcoGE?t=352) [to be doing some scripting but I think](https://youtu.be/uOic5TLcoGE?t=354) [it's it's also good to just explore what](https://youtu.be/uOic5TLcoGE?t=356) [other options we have so first of all if](https://youtu.be/uOic5TLcoGE?t=359) [I now select everything here and click](https://youtu.be/uOic5TLcoGE?t=362) [lock all so now everything is](https://youtu.be/uOic5TLcoGE?t=365) [logged](https://youtu.be/uOic5TLcoGE?t=368) [it you can only well you can unlock](https://youtu.be/uOic5TLcoGE?t=370) [everything so there's the unlock all](https://youtu.be/uOic5TLcoGE?t=373) [which will unlock everything or you can](https://youtu.be/uOic5TLcoGE?t=375) [unlock groups so in terms of the circles](https://youtu.be/uOic5TLcoGE?t=378) [I can only unlog them one by one because](https://youtu.be/uOic5TLcoGE?t=383) [they're indiv I didn't group them but](https://youtu.be/uOic5TLcoGE?t=386) [the](https://youtu.be/uOic5TLcoGE?t=389) [the size guide in the](https://youtu.be/uOic5TLcoGE?t=390) [background I can right click and on](https://youtu.be/uOic5TLcoGE?t=392) [group it in one go and then manipulate](https://youtu.be/uOic5TLcoGE?t=395) [it and then lock it back in so I think](https://youtu.be/uOic5TLcoGE?t=398) [in this](https://youtu.be/uOic5TLcoGE?t=402) [regard uh this is this is not bad now in](https://youtu.be/uOic5TLcoGE?t=403) [terms of the circles I will need to go](https://youtu.be/uOic5TLcoGE?t=408) [one by one and unlock them](https://youtu.be/uOic5TLcoGE?t=411) [which yeah is not great so before lock K](https://youtu.be/uOic5TLcoGE?t=415) [stuff I like to group them based](https://youtu.be/uOic5TLcoGE?t=419) [on uh some logic and then um lock them](https://youtu.be/uOic5TLcoGE?t=422) [because that's going to help me unlock](https://youtu.be/uOic5TLcoGE?t=428) [in group so now I have two items](https://youtu.be/uOic5TLcoGE?t=431) [actually many items locked but groups I](https://youtu.be/uOic5TLcoGE?t=434) [can unlock in one](https://youtu.be/uOic5TLcoGE?t=436) [go so so I think that's that's something](https://youtu.be/uOic5TLcoGE?t=440) [to keep in in mind the the other](https://youtu.be/uOic5TLcoGE?t=443) [bit that occurred first to me](https://youtu.be/uOic5TLcoGE?t=447) [is there's a super powerful script um](https://youtu.be/uOic5TLcoGE?t=451) [many powerful scripts but so so if if](https://youtu.be/uOic5TLcoGE?t=455) [consider this situation and I can see](https://youtu.be/uOic5TLcoGE?t=459) [your grouping problem uh emerge in such](https://youtu.be/uOic5TLcoGE?t=463) [a situation so imagine this that you](https://youtu.be/uOic5TLcoGE?t=467) [have all these elements in a drawing and](https://youtu.be/uOic5TLcoGE?t=469) [maybe I have](https://youtu.be/uOic5TLcoGE?t=473) [some red arrows here like this maybe and](https://youtu.be/uOic5TLcoGE?t=474) [some black arrows](https://youtu.be/uOic5TLcoGE?t=480) [Etc and and for whatever reason I want](https://youtu.be/uOic5TLcoGE?t=482) [to change the color of The Black Arrow](https://youtu.be/uOic5TLcoGE?t=486) [so I I I actually let's just look that I](https://youtu.be/uOic5TLcoGE?t=490) [want to I only want to change the black](https://youtu.be/uOic5TLcoGE?t=493) [arrows and not the red](https://youtu.be/uOic5TLcoGE?t=496) [ones and there can be many situations](https://youtu.be/uOic5TLcoGE?t=498) [like this in terms of selecting lines of](https://youtu.be/uOic5TLcoGE?t=501) [certain length or](https://youtu.be/uOic5TLcoGE?t=505) [whatever of course I can hold down the](https://youtu.be/uOic5TLcoGE?t=507) [shift and select elements that's one way](https://youtu.be/uOic5TLcoGE?t=510) [to go but I also have a script](https://youtu.be/uOic5TLcoGE?t=513) [called select similar](https://youtu.be/uOic5TLcoGE?t=518) [elements and here I can choose so I I](https://youtu.be/uOic5TLcoGE?t=522) [need to select a when before running the](https://youtu.be/uOic5TLcoGE?t=526) [script I need to select one sample that](https://youtu.be/uOic5TLcoGE?t=529) [is going to be the basis of my selection](https://youtu.be/uOic5TLcoGE?t=533) [and then select similar element](https://youtu.be/uOic5TLcoGE?t=536) [ments and here I can choose the](https://youtu.be/uOic5TLcoGE?t=541) [properties of what I want to select in](https://youtu.be/uOic5TLcoGE?t=544) [this case I want to select the black](https://youtu.be/uOic5TLcoGE?t=546) [arrows this is a relatively simple setup](https://youtu.be/uOic5TLcoGE?t=550) [and if I click run then all my black](https://youtu.be/uOic5TLcoGE?t=554) [arrows are](https://youtu.be/uOic5TLcoGE?t=557) [now selected so if I'm able](https://youtu.be/uOic5TLcoGE?t=559) [to define the type of object based on](https://youtu.be/uOic5TLcoGE?t=562) [some](https://youtu.be/uOic5TLcoGE?t=566) [properties then I have](https://youtu.be/uOic5TLcoGE?t=567) [uh this uh selection approach and then I](https://youtu.be/uOic5TLcoGE?t=570) [can change their colors](https://youtu.be/uOic5TLcoGE?t=573) [to um whatever](https://youtu.be/uOic5TLcoGE?t=575) [color I want to so so help me the D and](https://youtu.be/uOic5TLcoGE?t=578) [of course others as well so feel free to](https://youtu.be/uOic5TLcoGE?t=582) [chip in this is not just a discussion](https://youtu.be/uOic5TLcoGE?t=584) [between naav and I but he was the the](https://youtu.be/uOic5TLcoGE?t=586) [trigger for the the topic um so so help](https://youtu.be/uOic5TLcoGE?t=589) [me if these](https://youtu.be/uOic5TLcoGE?t=594) [approaches again get you closer to what](https://youtu.be/uOic5TLcoGE?t=598) [you need and what you're still](https://youtu.be/uOic5TLcoGE?t=601) [missing yeah I need to I'm actually let](https://youtu.be/uOic5TLcoGE?t=606) [me pop into my excalon and see if I can](https://youtu.be/uOic5TLcoGE?t=608) [replicate the um the the thing real](https://youtu.be/uOic5TLcoGE?t=610) [quick see um give me give me a few](https://youtu.be/uOic5TLcoGE?t=614) [minutes I'm just GNA see if I can](https://youtu.be/uOic5TLcoGE?t=617) [yeah because so I I actually use this](https://youtu.be/uOic5TLcoGE?t=622) [um pretty extensively so here's a typic](https://youtu.be/uOic5TLcoGE?t=627) [well I wouldn't say typical situation](https://youtu.be/uOic5TLcoGE?t=631) [but something I did recently so I](https://youtu.be/uOic5TLcoGE?t=633) [created this grid for myself so I had](https://youtu.be/uOic5TLcoGE?t=636) [this custom length uh lines like this](https://youtu.be/uOic5TLcoGE?t=639) [and I had another](https://youtu.be/uOic5TLcoGE?t=643) [grid well it was a grid so I had these](https://youtu.be/uOic5TLcoGE?t=646) [lines as](https://youtu.be/uOic5TLcoGE?t=649) [well and so in this](https://youtu.be/uOic5TLcoGE?t=651) [case what I wanted to do is I want need](https://youtu.be/uOic5TLcoGE?t=655) [to select all the horizontal lines and](https://youtu.be/uOic5TLcoGE?t=659) [so that that would again be shift click](https://youtu.be/uOic5TLcoGE?t=663) [shift click shift clicks that that if](https://youtu.be/uOic5TLcoGE?t=666) [you have many of the lines it's](https://youtu.be/uOic5TLcoGE?t=669) [difficult select similar](https://youtu.be/uOic5TLcoGE?t=671) [elements I can select that I want the](https://youtu.be/uOic5TLcoGE?t=675) [lines and it also has](https://youtu.be/uOic5TLcoGE?t=679) [the](https://youtu.be/uOic5TLcoGE?t=682) [um does it not interesting why don't I](https://youtu.be/uOic5TLcoGE?t=684) [see the](https://youtu.be/uOic5TLcoGE?t=688) [interesting](https://youtu.be/uOic5TLcoGE?t=694) [width](https://youtu.be/uOic5TLcoGE?t=695) [huh let's see did I](https://youtu.be/uOic5TLcoGE?t=698) [not SE](https://youtu.be/uOic5TLcoGE?t=706) [simular script is up to](https://youtu.be/uOic5TLcoGE?t=710) [date it's interesting because I'm](https://youtu.be/uOic5TLcoGE?t=713) [missing here the the](https://youtu.be/uOic5TLcoGE?t=717) [length similar](https://youtu.be/uOic5TLcoGE?t=720) [elements stroke color](https://youtu.be/uOic5TLcoGE?t=728) [H because the wa yeah it's it's](https://youtu.be/uOic5TLcoGE?t=733) [interesting so now I'm I'm I'm surprised](https://youtu.be/uOic5TLcoGE?t=737) [because I](https://youtu.be/uOic5TLcoGE?t=740) [was I I wonder what I'm now doing wrong](https://youtu.be/uOic5TLcoGE?t=741) [here um but some things whenever](https://youtu.be/uOic5TLcoGE?t=745) [whenever you're ready I do have one of](https://youtu.be/uOic5TLcoGE?t=749) [the siid guys that I can show I can](https://youtu.be/uOic5TLcoGE?t=751) [share my screen if you can that's yeah](https://youtu.be/uOic5TLcoGE?t=753) [yeah okay let's see is there a](https://youtu.be/uOic5TLcoGE?t=756) [difference between width and stroke](https://youtu.be/uOic5TLcoGE?t=758) [width uh again is there any difference](https://youtu.be/uOic5TLcoGE?t=760) [between uh I think there was an option](https://youtu.be/uOic5TLcoGE?t=764) [which said height and width but there](https://youtu.be/uOic5TLcoGE?t=767) [was also stroke width um yeah the stroke](https://youtu.be/uOic5TLcoGE?t=768) [width is is not not the right uh value](https://youtu.be/uOic5TLcoGE?t=771) [for](https://youtu.be/uOic5TLcoGE?t=774) [us so the stroke width is the B boldness](https://youtu.be/uOic5TLcoGE?t=775) [of the line so okay so that](https://youtu.be/uOic5TLcoGE?t=780) [that I see I see and the WID is not the](https://youtu.be/uOic5TLcoGE?t=784) [length that's not what you were looking](https://youtu.be/uOic5TLcoGE?t=787) [for that is the length but I wonder why](https://youtu.be/uOic5TLcoGE?t=789) [it's zero so that that's where](https://youtu.be/uOic5TLcoGE?t=791) [I'm I'm I'm I'm](https://youtu.be/uOic5TLcoGE?t=794) [surprised to say the least I I really](https://youtu.be/uOic5TLcoGE?t=798) [don't understand let's let's reinstall](https://youtu.be/uOic5TLcoGE?t=801) [this script um because](https://youtu.be/uOic5TLcoGE?t=805) [and we'll look at your screen n in a](https://youtu.be/uOic5TLcoGE?t=810) [second let me just select simul I'm just](https://youtu.be/uOic5TLcoGE?t=812) [going to reinstall this and let's](https://youtu.be/uOic5TLcoGE?t=815) [see still no no width uh we'll check out](https://youtu.be/uOic5TLcoGE?t=820) [the width as well hold on I'm](https://youtu.be/uOic5TLcoGE?t=825) [I'm let's first look at NADA viewer](https://youtu.be/uOic5TLcoGE?t=828) [screen and then I'm going to check out](https://youtu.be/uOic5TLcoGE?t=831) [the what's up with this width because](https://youtu.be/uOic5TLcoGE?t=835) [that is](https://youtu.be/uOic5TLcoGE?t=838) [right now very](https://youtu.be/uOic5TLcoGE?t=839) [strange oh boy um yeah so I have this](https://youtu.be/uOic5TLcoGE?t=841) [size guide which you can see is is made](https://youtu.be/uOic5TLcoGE?t=845) [up of these smaller](https://youtu.be/uOic5TLcoGE?t=849) [elements um and I was having I was](https://youtu.be/uOic5TLcoGE?t=852) [having this issue a bit when I was](https://youtu.be/uOic5TLcoGE?t=855) [trying to erase the size guide when I](https://youtu.be/uOic5TLcoGE?t=856) [was doing the the uh visual Workshop](https://youtu.be/uOic5TLcoGE?t=859) [cohort](https://youtu.be/uOic5TLcoGE?t=861) [10](https://youtu.be/uOic5TLcoGE?t=862) [um and what I ended up doing](https://youtu.be/uOic5TLcoGE?t=864) [was some I guess I'm to replicate](https://youtu.be/uOic5TLcoGE?t=866) [exactly what happened but sometimes it](https://youtu.be/uOic5TLcoGE?t=869) [was difficult for me to figure out how](https://youtu.be/uOic5TLcoGE?t=870) [to](https://youtu.be/uOic5TLcoGE?t=872) [select once I was unlocking it how to](https://youtu.be/uOic5TLcoGE?t=873) [select the entire grid and then if I](https://youtu.be/uOic5TLcoGE?t=876) [tried to let's say there were a bunch of](https://youtu.be/uOic5TLcoGE?t=879) [um you know elements let's say in the](https://youtu.be/uOic5TLcoGE?t=881) [foreground you know this this would um](https://youtu.be/uOic5TLcoGE?t=884) [this would select all of](https://youtu.be/uOic5TLcoGE?t=889) [them um although I see now that you know](https://youtu.be/uOic5TLcoGE?t=891) [it's allowing me to do this but](https://youtu.be/uOic5TLcoGE?t=895) [basically what I ended up doing was I I](https://youtu.be/uOic5TLcoGE?t=896) [I would go through and kind of delete](https://youtu.be/uOic5TLcoGE?t=898) [each element you know one by one CU I](https://youtu.be/uOic5TLcoGE?t=900) [was having problems getting the whole](https://youtu.be/uOic5TLcoGE?t=903) [thing](https://youtu.be/uOic5TLcoGE?t=905) [selected um so what I was thinking about](https://youtu.be/uOic5TLcoGE?t=906) [was if there's a way to you know to have](https://youtu.be/uOic5TLcoGE?t=909) [the whole](https://youtu.be/uOic5TLcoGE?t=912) [thing uh together then it doesn't there](https://youtu.be/uOic5TLcoGE?t=913) [won't be any memory of it being](https://youtu.be/uOic5TLcoGE?t=916) [constructed of these individual](https://youtu.be/uOic5TLcoGE?t=918) [small um elements does that make sense](https://youtu.be/uOic5TLcoGE?t=921) [it does it does and and so what I'm](https://youtu.be/uOic5TLcoGE?t=924) [thinking is we can so so I still](https://youtu.be/uOic5TLcoGE?t=927) [see um value](https://youtu.be/uOic5TLcoGE?t=930) [in in doing the script idea that I had](https://youtu.be/uOic5TLcoGE?t=933) [and I think so but but equally uh what](https://youtu.be/uOic5TLcoGE?t=938) [I'm thinking](https://youtu.be/uOic5TLcoGE?t=943) [is is you could so so in this](https://youtu.be/uOic5TLcoGE?t=945) [case if I](https://youtu.be/uOic5TLcoGE?t=949) [ungroup this so I'm going to unlock and](https://youtu.be/uOic5TLcoGE?t=951) [I'm going to](https://youtu.be/uOic5TLcoGE?t=954) [ungroup these lines so now every think](https://youtu.be/uOic5TLcoGE?t=955) [is on unlogged on grouped so this is the](https://youtu.be/uOic5TLcoGE?t=959) [type of situation you're in I'm going to](https://youtu.be/uOic5TLcoGE?t=963) [delete these so everything is an](https://youtu.be/uOic5TLcoGE?t=965) [individual item here and you want to](https://youtu.be/uOic5TLcoGE?t=968) [just select the grid and nothing else](https://youtu.be/uOic5TLcoGE?t=971) [that's your your fundamental issue yeah](https://youtu.be/uOic5TLcoGE?t=973) [so in this](https://youtu.be/uOic5TLcoGE?t=976) [case actually the the select similar](https://youtu.be/uOic5TLcoGE?t=979) [elements would work well because I](https://youtu.be/uOic5TLcoGE?t=982) [can choose select simular element and](https://youtu.be/uOic5TLcoGE?t=985) [now you can see see it has a width it's](https://youtu.be/uOic5TLcoGE?t=988) [amazing what the heck was going on](https://youtu.be/uOic5TLcoGE?t=990) [previously Why didn't it have a](https://youtu.be/uOic5TLcoGE?t=992) [width I'll still experiment but so in](https://youtu.be/uOic5TLcoGE?t=995) [this case I can just simply say stroke](https://youtu.be/uOic5TLcoGE?t=999) [color and typ line and and then of](https://youtu.be/uOic5TLcoGE?t=1002) [course you need to play a little because](https://youtu.be/uOic5TLcoGE?t=1006) [sometimes you might have the same stroke](https://youtu.be/uOic5TLcoGE?t=1009) [color and line but it's rare that you](https://youtu.be/uOic5TLcoGE?t=1011) [have all the properties the same so](https://youtu.be/uOic5TLcoGE?t=1015) [opacity especially if you have something](https://youtu.be/uOic5TLcoGE?t=1017) [like the size guide where you it's it's](https://youtu.be/uOic5TLcoGE?t=1020) [a a generated content so it will have](https://youtu.be/uOic5TLcoGE?t=1023) [the same width the same opacity Etc but](https://youtu.be/uOic5TLcoGE?t=1027) [in this case I would just select stroke](https://youtu.be/uOic5TLcoGE?t=1030) [color and typ line and click run and](https://youtu.be/uOic5TLcoGE?t=1033) [with that I only selected those type of](https://youtu.be/uOic5TLcoGE?t=1037) [elements and then I can group it and I'm](https://youtu.be/uOic5TLcoGE?t=1040) [back with my grouping so actually this](https://youtu.be/uOic5TLcoGE?t=1043) [is pretty uh](https://youtu.be/uOic5TLcoGE?t=1046) [powerful but what I was thinking we](https://youtu.be/uOic5TLcoGE?t=1049) [could still tag elements with a custom](https://youtu.be/uOic5TLcoGE?t=1051) [name and allow you to to select based on](https://youtu.be/uOic5TLcoGE?t=1056) [that name and that can I can see the](https://youtu.be/uOic5TLcoGE?t=1061) [value so I can see that in certain](https://youtu.be/uOic5TLcoGE?t=1064) [drawings you might have type of elements](https://youtu.be/uOic5TLcoGE?t=1066) [that you want to](https://youtu.be/uOic5TLcoGE?t=1070) [um tag with a certain value and be able](https://youtu.be/uOic5TLcoGE?t=1073) [to select only those and it might be](https://youtu.be/uOic5TLcoGE?t=1077) [various type of elements with various](https://youtu.be/uOic5TLcoGE?t=1082) [properties but it has the same value tag](https://youtu.be/uOic5TLcoGE?t=1084) [and that helps you so that's the script](https://youtu.be/uOic5TLcoGE?t=1088) [that I was thinking we could create](https://youtu.be/uOic5TLcoGE?t=1090) [together but I thought before going](https://youtu.be/uOic5TLcoGE?t=1094) [there it's just useful to uh to](https://youtu.be/uOic5TLcoGE?t=1096) [understand](https://youtu.be/uOic5TLcoGE?t=1100) [this and then back here let me just see](https://youtu.be/uOic5TLcoGE?t=1102) [what's going on so I create this line](https://youtu.be/uOic5TLcoGE?t=1105) [that's](https://youtu.be/uOic5TLcoGE?t=1108) [create and why doesn't this have a width](https://youtu.be/uOic5TLcoGE?t=1111) [that's](https://youtu.be/uOic5TLcoGE?t=1114) [the super interesting thing so let's do](https://youtu.be/uOic5TLcoGE?t=1116) [this I'm going to open so we are now](https://youtu.be/uOic5TLcoGE?t=1119) [going to start to do a bit of scripting](https://youtu.be/uOic5TLcoGE?t=1123) [so this is my so I this is control shift](https://youtu.be/uOic5TLcoGE?t=1125) [I or command option I to uh open the](https://youtu.be/uOic5TLcoGE?t=1129) [developer console sorry yeah go on is it](https://youtu.be/uOic5TLcoGE?t=1134) [possible is it possible a line simply](https://youtu.be/uOic5TLcoGE?t=1137) [does not have a width but only a length](https://youtu.be/uOic5TLcoGE?t=1140) [and a thickness which mathematically](https://youtu.be/uOic5TLcoGE?t=1142) [would make sense to me yes and no I mean](https://youtu.be/uOic5TLcoGE?t=1144) [the the issue I'm facing is this is a](https://youtu.be/uOic5TLcoGE?t=1148) [line and this is a line and this line](https://youtu.be/uOic5TLcoGE?t=1151) [here has a](https://youtu.be/uOic5TLcoGE?t=1157) [width right yeah we okay so so so I'm](https://youtu.be/uOic5TLcoGE?t=1160) [I'm I'm](https://youtu.be/uOic5TLcoGE?t=1164) [super um](https://youtu.be/uOic5TLcoGE?t=1166) [super surprised](https://youtu.be/uOic5TLcoGE?t=1169) [so I just tried it out as well and the](https://youtu.be/uOic5TLcoGE?t=1171) [lines I'm drawing do have do have wids](https://youtu.be/uOic5TLcoGE?t=1174) [and Heights so yeah yeah what the heck](https://youtu.be/uOic5TLcoGE?t=1177) [is going on here um but let's let's take](https://youtu.be/uOic5TLcoGE?t=1180) [a look at this so now I so this is the](https://youtu.be/uOic5TLcoGE?t=1183) [developer](https://youtu.be/uOic5TLcoGE?t=1186) [console and I thought let's so this is](https://youtu.be/uOic5TLcoGE?t=1187) [control shift or command option I I](https://youtu.be/uOic5TLcoGE?t=1190) [usually start with defining my EXC color](https://youtu.be/uOic5TLcoGE?t=1195) [automate](https://youtu.be/uOic5TLcoGE?t=1199) [object and whenever I develop a script I](https://youtu.be/uOic5TLcoGE?t=1201) [first develop it in the developer](https://youtu.be/uOic5TLcoGE?t=1204) [console and then move it into a script](https://youtu.be/uOic5TLcoGE?t=1206) [file I I find this interactive way of](https://youtu.be/uOic5TLcoGE?t=1208) [working with uh exol R scripts but also](https://youtu.be/uOic5TLcoGE?t=1211) [obsidian um super helpful but so I start](https://youtu.be/uOic5TLcoGE?t=1215) [with defining the EA object and then I](https://youtu.be/uOic5TLcoGE?t=1219) [will set view this function just simply](https://youtu.be/uOic5TLcoGE?t=1222) [uh connects exol throughout automate](https://youtu.be/uOic5TLcoGE?t=1226) [with the drawing that I I'm looking at](https://youtu.be/uOic5TLcoGE?t=1229) [and let's just look at the element](https://youtu.be/uOic5TLcoGE?t=1234) [ea uh get](https://youtu.be/uOic5TLcoGE?t=1237) [view uh selected element so I have this](https://youtu.be/uOic5TLcoGE?t=1240) [function that will return the selected](https://youtu.be/uOic5TLcoGE?t=1244) [element in the view and we can take a](https://youtu.be/uOic5TLcoGE?t=1246) [look and it has a width but](https://youtu.be/uOic5TLcoGE?t=1250) [interestingly the width is a very small](https://youtu.be/uOic5TLcoGE?t=1252) [number I I wonder what if I turn off](https://youtu.be/uOic5TLcoGE?t=1257) [snap to object and try the try it like](https://youtu.be/uOic5TLcoGE?t=1260) [this and now it has a width what if I](https://youtu.be/uOic5TLcoGE?t=1267) [turn snap two objects](https://youtu.be/uOic5TLcoGE?t=1270) [back and look at it this](https://youtu.be/uOic5TLcoGE?t=1276) [way](https://youtu.be/uOic5TLcoGE?t=1281) [huh](https://youtu.be/uOic5TLcoGE?t=1283) [frankly there's definitely somewhere a](https://youtu.be/uOic5TLcoGE?t=1285) [bug so I I I don't understand why an](https://youtu.be/uOic5TLcoGE?t=1287) [element doesn't have now it has a width](https://youtu.be/uOic5TLcoGE?t=1291) [but if I create it with SNAP two objects](https://youtu.be/uOic5TLcoGE?t=1295) [turn on turned](https://youtu.be/uOic5TLcoGE?t=1297) [on then by](https://youtu.be/uOic5TLcoGE?t=1301) [default it doesn't get a width so you](https://youtu.be/uOic5TLcoGE?t=1304) [can see the why I know it doesn't have a](https://youtu.be/uOic5TLcoGE?t=1307) [width is because it's 10 the minus seven](https://youtu.be/uOic5TLcoGE?t=1309) [so this this number is so so there's and](https://youtu.be/uOic5TLcoGE?t=1313) [I'm pretty sure this is not an obsidian](https://youtu.be/uOic5TLcoGE?t=1318) [bug this is from the excal package](https://youtu.be/uOic5TLcoGE?t=1320) [anyway so we understand what was with](https://youtu.be/uOic5TLcoGE?t=1324) [the with the the width but so not if we](https://youtu.be/uOic5TLcoGE?t=1327) [were to create this script in a way that](https://youtu.be/uOic5TLcoGE?t=1332) [um we want to custom tag elements so](https://youtu.be/uOic5TLcoGE?t=1336) [that's my mindset now that we want to to](https://youtu.be/uOic5TLcoGE?t=1339) [create a script where I can tag](https://youtu.be/uOic5TLcoGE?t=1342) [elements the so let's maybe talk a](https://youtu.be/uOic5TLcoGE?t=1345) [little bit about what you see here](https://youtu.be/uOic5TLcoGE?t=1348) [so](https://youtu.be/uOic5TLcoGE?t=1351) [um the element so](https://youtu.be/uOic5TLcoGE?t=1355) [so all I did so far was uh queried the](https://youtu.be/uOic5TLcoGE?t=1358) [active View and looked at the selected](https://youtu.be/uOic5TLcoGE?t=1362) [element and here I can see all the](https://youtu.be/uOic5TLcoGE?t=1365) [properties of the selected element and](https://youtu.be/uOic5TLcoGE?t=1368) [there's a property in excal called](https://youtu.be/uOic5TLcoGE?t=1372) [custom](https://youtu.be/uOic5TLcoGE?t=1375) [data that](https://youtu.be/uOic5TLcoGE?t=1377) [is what the name says so it's custom](https://youtu.be/uOic5TLcoGE?t=1379) [data it's data that will be uh also](https://youtu.be/uOic5TLcoGE?t=1382) [preserved if you copy paste to exol](https://youtu.be/uOic5TLcoGE?t=1386) [draw.com but exol draw itself doesn't](https://youtu.be/uOic5TLcoGE?t=1388) [use it for anything you can you can add](https://youtu.be/uOic5TLcoGE?t=1392) [um data to it and by the way just a fun](https://youtu.be/uOic5TLcoGE?t=1396) [fact if I have this text here let me](https://youtu.be/uOic5TLcoGE?t=1400) [maybe oh this is good okay so](https://youtu.be/uOic5TLcoGE?t=1406) [sample text I'm going to zoom in or](https://youtu.be/uOic5TLcoGE?t=1410) [enlarge it so you can see it so I have](https://youtu.be/uOic5TLcoGE?t=1414) [this sample text and if I make this](https://youtu.be/uOic5TLcoGE?t=1417) [black so I have this text here if I take](https://youtu.be/uOic5TLcoGE?t=1419) [my highlighter pen for](https://youtu.be/uOic5TLcoGE?t=1423) [example and I](https://youtu.be/uOic5TLcoGE?t=1426) [highlight this so this is when it's in](https://youtu.be/uOic5TLcoGE?t=1429) [the](https://youtu.be/uOic5TLcoGE?t=1432) [background then or or maybe if I take](https://youtu.be/uOic5TLcoGE?t=1433) [the the Mind map style uh organic line](https://youtu.be/uOic5TLcoGE?t=1439) [the the logic I have built around this](https://youtu.be/uOic5TLcoGE?t=1445) [line let's just look at this EA get](https://youtu.be/uOic5TLcoGE?t=1448) [view selected](https://youtu.be/uOic5TLcoGE?t=1453) [element if you look at this line you](https://youtu.be/uOic5TLcoGE?t=1457) [will see that I'm actually here using](https://youtu.be/uOic5TLcoGE?t=1460) [the custom data for this line and the](https://youtu.be/uOic5TLcoGE?t=1463) [stroke open options of all the](https://youtu.be/uOic5TLcoGE?t=1467) [properties of how the stroke should look](https://youtu.be/uOic5TLcoGE?t=1471) [like are defined here so this is just to](https://youtu.be/uOic5TLcoGE?t=1474) [highlight that some](https://youtu.be/uOic5TLcoGE?t=1477) [elements have custom data and that](https://youtu.be/uOic5TLcoGE?t=1479) [custom data is used so why am I sharing](https://youtu.be/uOic5TLcoGE?t=1483) [this because when we so we can we can](https://youtu.be/uOic5TLcoGE?t=1487) [easily add custom data to an element and](https://youtu.be/uOic5TLcoGE?t=1490) [select it we're going to do it in a](https://youtu.be/uOic5TLcoGE?t=1493) [second but I need to keep in mind that](https://youtu.be/uOic5TLcoGE?t=1495) [custom data might be used by scripts or](https://youtu.be/uOic5TLcoGE?t=1498) [by](https://youtu.be/uOic5TLcoGE?t=1503) [um or by even functionality in the](https://youtu.be/uOic5TLcoGE?t=1505) [plugin so you need to add and remove](https://youtu.be/uOic5TLcoGE?t=1509) [custom data in a way that you preserve](https://youtu.be/uOic5TLcoGE?t=1512) [the existing custom data if you](https://youtu.be/uOic5TLcoGE?t=1515) [overwrite it](https://youtu.be/uOic5TLcoGE?t=1517) [then it nothing is a disaster but it](https://youtu.be/uOic5TLcoGE?t=1519) [will have potentially](https://youtu.be/uOic5TLcoGE?t=1523) [consequences yeah](https://youtu.be/uOic5TLcoGE?t=1526) [um and by the way stop me so so I'm I'm](https://youtu.be/uOic5TLcoGE?t=1529) [super familiar with these tools here so](https://youtu.be/uOic5TLcoGE?t=1533) [stop me if if you need guidance on what](https://youtu.be/uOic5TLcoGE?t=1535) [you're seeing here so I'm I'm moving](https://youtu.be/uOic5TLcoGE?t=1539) [fast but I'm also happy to slow down and](https://youtu.be/uOic5TLcoGE?t=1542) [explain uh what you're seeing here um so](https://youtu.be/uOic5TLcoGE?t=1546) [just just uh any one shout if if that if](https://youtu.be/uOic5TLcoGE?t=1550) [you need that but so I thought yeah go](https://youtu.be/uOic5TLcoGE?t=1554) [on](https://youtu.be/uOic5TLcoGE?t=1558) [okay sorry just a quick question can you](https://youtu.be/uOic5TLcoGE?t=1560) [select by angle I did not see the angle](https://youtu.be/uOic5TLcoGE?t=1561) [property in that um yes you can you you](https://youtu.be/uOic5TLcoGE?t=1564) [can select by angle but you need to have](https://youtu.be/uOic5TLcoGE?t=1568) [an angle that is non zero so if I if I](https://youtu.be/uOic5TLcoGE?t=1571) [select this line and turn it like this](https://youtu.be/uOic5TLcoGE?t=1575) [and then go to select similar element](https://youtu.be/uOic5TLcoGE?t=1579) [then huh I don't see the angle then you](https://youtu.be/uOic5TLcoGE?t=1583) [cannot but the we can we we we'll look](https://youtu.be/uOic5TLcoGE?t=1586) [at I thought you could but we can yeah I](https://youtu.be/uOic5TLcoGE?t=1589) [saw it on the list of properties in the](https://youtu.be/uOic5TLcoGE?t=1593) [console and I thought it might be](https://youtu.be/uOic5TLcoGE?t=1595) [interesting yeah yeah so so for](https://youtu.be/uOic5TLcoGE?t=1597) [sure we will anyway look at this script](https://youtu.be/uOic5TLcoGE?t=1601) [and yeah I don't have the angle here but](https://youtu.be/uOic5TLcoGE?t=1605) [I'll I'll show you how how you can add](https://youtu.be/uOic5TLcoGE?t=1608) [that to the script and we can even](https://youtu.be/uOic5TLcoGE?t=1612) [update the script so so that's the but](https://youtu.be/uOic5TLcoGE?t=1614) [keep in mind the](https://youtu.be/uOic5TLcoGE?t=1617) [angle is](https://youtu.be/uOic5TLcoGE?t=1619) [um so so this line if I select this line](https://youtu.be/uOic5TLcoGE?t=1623) [so EA](https://youtu.be/uOic5TLcoGE?t=1626) [select](https://youtu.be/uOic5TLcoGE?t=1628) [um get view selected](https://youtu.be/uOic5TLcoGE?t=1630) [element so if I take a look at this line](https://youtu.be/uOic5TLcoGE?t=1634) [here the angle is going to be](https://youtu.be/uOic5TLcoGE?t=1637) [zero right even though the line has a a](https://youtu.be/uOic5TLcoGE?t=1640) [slope and that is because the angle is](https://youtu.be/uOic5TLcoGE?t=1643) [not about](https://youtu.be/uOic5TLcoGE?t=1647) [the the slope of the line but the angle](https://youtu.be/uOic5TLcoGE?t=1649) [of the rotation of the object so if I](https://youtu.be/uOic5TLcoGE?t=1653) [rotate it like this then it's going to](https://youtu.be/uOic5TLcoGE?t=1655) [have an angle because](https://youtu.be/uOic5TLcoGE?t=1659) [then uh you will see that there it now](https://youtu.be/uOic5TLcoGE?t=1662) [has an angle but that is not the angle](https://youtu.be/uOic5TLcoGE?t=1666) [of the line you you can calculate the](https://youtu.be/uOic5TLcoGE?t=1669) [angle of the line based on I guess the](https://youtu.be/uOic5TLcoGE?t=1673) [width and the height so so if you if you](https://youtu.be/uOic5TLcoGE?t=1676) [wanted to generate an angle and again](https://youtu.be/uOic5TLcoGE?t=1679) [you can update the uh select singular](https://youtu.be/uOic5TLcoGE?t=1682) [ele elements based on that but so so](https://youtu.be/uOic5TLcoGE?t=1686) [here if I would draw a line like this](https://youtu.be/uOic5TLcoGE?t=1689) [again then](https://youtu.be/uOic5TLcoGE?t=1693) [and look at this then of course the](https://youtu.be/uOic5TLcoGE?t=1696) [angle as I explained is zero but with](https://youtu.be/uOic5TLcoGE?t=1699) [the](https://youtu.be/uOic5TLcoGE?t=1703) [um using the width and wherever the](https://youtu.be/uOic5TLcoGE?t=1706) [height is](https://youtu.be/uOic5TLcoGE?t=1709) [which why don't I find the](https://youtu.be/uOic5TLcoGE?t=1711) [height oh there we go yeah yeah there](https://youtu.be/uOic5TLcoGE?t=1714) [you go so so with simple trigonometry](https://youtu.be/uOic5TLcoGE?t=1717) [you can uh calculate the uh the the](https://youtu.be/uOic5TLcoGE?t=1720) [angle from these two two](https://youtu.be/uOic5TLcoGE?t=1725) [values it's slightly trickier than that](https://youtu.be/uOic5TLcoGE?t=1728) [and that is because um you need to](https://youtu.be/uOic5TLcoGE?t=1732) [understand how the points are uh](https://youtu.be/uOic5TLcoGE?t=1737) [processed because because the so so](https://youtu.be/uOic5TLcoGE?t=1741) [imagine this line and then I'm going to](https://youtu.be/uOic5TLcoGE?t=1744) [make a copy of this line and flip it](https://youtu.be/uOic5TLcoGE?t=1748) [horizontally this line will have the](https://youtu.be/uOic5TLcoGE?t=1753) [same height and](https://youtu.be/uOic5TLcoGE?t=1755) [width but but points are so so exol dra](https://youtu.be/uOic5TLcoGE?t=1757) [always have will always consider the](https://youtu.be/uOic5TLcoGE?t=1761) [height and width in an absolute uh](https://youtu.be/uOic5TLcoGE?t=1764) [um absolute manner so this also has the](https://youtu.be/uOic5TLcoGE?t=1768) [same height and width but the points](https://youtu.be/uOic5TLcoGE?t=1772) [will be negative point so you can see](https://youtu.be/uOic5TLcoGE?t=1775) [here that](https://youtu.be/uOic5TLcoGE?t=1777) [the how the B so so it requires a bit](https://youtu.be/uOic5TLcoGE?t=1779) [more thinking so if you calculate the](https://youtu.be/uOic5TLcoGE?t=1784) [angle um of course now assuming that](https://youtu.be/uOic5TLcoGE?t=1787) [this is maybe uh](https://youtu.be/uOic5TLcoGE?t=1790) [45° then and then this would be um what](https://youtu.be/uOic5TLcoGE?t=1793) [is it](https://youtu.be/uOic5TLcoGE?t=1797) [135 that of course this would also come](https://youtu.be/uOic5TLcoGE?t=1800) [out to 45 unless you do the the logic to](https://youtu.be/uOic5TLcoGE?t=1803) [understand how the points slope the](https://youtu.be/uOic5TLcoGE?t=1807) [first and the last point and based on](https://youtu.be/uOic5TLcoGE?t=1809) [that you](https://youtu.be/uOic5TLcoGE?t=1812) [calculate and also you would need to](https://youtu.be/uOic5TLcoGE?t=1813) [think about what do you do if it has](https://youtu.be/uOic5TLcoGE?t=1815) [three points how do you calculate the so](https://youtu.be/uOic5TLcoGE?t=1817) [so angle is not such a trivial thing but](https://youtu.be/uOic5TLcoGE?t=1820) [but with these data it's a beautiful](https://youtu.be/uOic5TLcoGE?t=1824) [project work on so](https://youtu.be/uOic5TLcoGE?t=1827) [I I I think yeah I was just wondering if](https://youtu.be/uOic5TLcoGE?t=1829) [we could quickly select objects that are](https://youtu.be/uOic5TLcoGE?t=1834) [parallel to each other or something like](https://youtu.be/uOic5TLcoGE?t=1836) [this which is why I was curious about](https://youtu.be/uOic5TLcoGE?t=1837) [the uh angle being available it's um but](https://youtu.be/uOic5TLcoGE?t=1839) [it's fascinating I also see a minus zero](https://youtu.be/uOic5TLcoGE?t=1843) [there which I haven't generally](https://youtu.be/uOic5TLcoGE?t=1845) [encountered so that's that's that's](https://youtu.be/uOic5TLcoGE?t=1847) [that's probably rounding issue but yes](https://youtu.be/uOic5TLcoGE?t=1850) [so minor zero is](https://youtu.be/uOic5TLcoGE?t=1853) [is yeah okay yeah this is this was](https://youtu.be/uOic5TLcoGE?t=1856) [fascinating thanks so much sorry to take](https://youtu.be/uOic5TLcoGE?t=1859) [you on a tangent but yeah yeah yeah](https://youtu.be/uOic5TLcoGE?t=1861) [since we're talking about angles tangent](https://youtu.be/uOic5TLcoGE?t=1865) [is actually](https://youtu.be/uOic5TLcoGE?t=1867) [right meaningful okay so but back to](https://youtu.be/uOic5TLcoGE?t=1870) [back to the custom data so so let's as a](https://youtu.be/uOic5TLcoGE?t=1874) [first step to get us started add a](https://youtu.be/uOic5TLcoGE?t=1878) [custom data to to this text here and](https://youtu.be/uOic5TLcoGE?t=1882) [then let's see how we can select it](https://youtu.be/uOic5TLcoGE?t=1885) [um by the way so here I have what you](https://youtu.be/uOic5TLcoGE?t=1888) [can what what you can observe the way](https://youtu.be/uOic5TLcoGE?t=1892) [I'm doing this is if I start to type EA](https://youtu.be/uOic5TLcoGE?t=1895) [and press the dot I get all the](https://youtu.be/uOic5TLcoGE?t=1898) [available functions and properties here](https://youtu.be/uOic5TLcoGE?t=1901) [and for the most part if you want to get](https://youtu.be/uOic5TLcoGE?t=1906) [help on any of these functions you can](https://youtu.be/uOic5TLcoGE?t=1909) [type EA help and then you can type EA](https://youtu.be/uOic5TLcoGE?t=1912) [get View](https://youtu.be/uOic5TLcoGE?t=1916) [uh selected elements for example and you](https://youtu.be/uOic5TLcoGE?t=1918) [don't in this case I don't have the](https://youtu.be/uOic5TLcoGE?t=1921) [opening and closing bracket I just type](https://youtu.be/uOic5TLcoGE?t=1923) [in the name and press enter and there](https://youtu.be/uOic5TLcoGE?t=1926) [you go I get in response a help uh that](https://youtu.be/uOic5TLcoGE?t=1929) [get the selected element in the view if](https://youtu.be/uOic5TLcoGE?t=1934) [more are selected get the first so if](https://youtu.be/uOic5TLcoGE?t=1937) [your so so the way I'm I'm](https://youtu.be/uOic5TLcoGE?t=1941) [using uh well the developer con has this](https://youtu.be/uOic5TLcoGE?t=1944) [awesome property that it will prompt you](https://youtu.be/uOic5TLcoGE?t=1948) [with the available](https://youtu.be/uOic5TLcoGE?t=1951) [functions and I have this help feature](https://youtu.be/uOic5TLcoGE?t=1952) [built that you can type EA help for any](https://youtu.be/uOic5TLcoGE?t=1956) [of the functions and that is going to](https://youtu.be/uOic5TLcoGE?t=1960) [give you feedback on what that function](https://youtu.be/uOic5TLcoGE?t=1962) [is about and I think that's just that's](https://youtu.be/uOic5TLcoGE?t=1965) [just good but let's](https://youtu.be/uOic5TLcoGE?t=1968) [copy let's let's add the the the custom](https://youtu.be/uOic5TLcoGE?t=1971) [data to this so what I'm going to do is](https://youtu.be/uOic5TLcoGE?t=1975) [I'm going to first of all](https://youtu.be/uOic5TLcoGE?t=1977) [uh run EA clear what this does](https://youtu.be/uOic5TLcoGE?t=1981) [is it cleared anything previously I had](https://youtu.be/uOic5TLcoGE?t=1986) [in EA when you're doing an excital](https://youtu.be/uOic5TLcoGE?t=1990) [script you don't need to do this excal](https://youtu.be/uOic5TLcoGE?t=1993) [automate comes empty but if you were](https://youtu.be/uOic5TLcoGE?t=1995) [doing something before in excal it's](https://youtu.be/uOic5TLcoGE?t=1998) [just healthy to clear uh the memory](https://youtu.be/uOic5TLcoGE?t=2001) [because you might end up with unexpected](https://youtu.be/uOic5TLcoGE?t=2006) [results otherwise and what you need to](https://youtu.be/uOic5TLcoGE?t=2009) [understand is you cannot directly modify](https://youtu.be/uOic5TLcoGE?t=2013) [elements in the view that is uh that is](https://youtu.be/uOic5TLcoGE?t=2018) [going to cause uh on um unexpected](https://youtu.be/uOic5TLcoGE?t=2021) [results so the way EXC colid dra is](https://youtu.be/uOic5TLcoGE?t=2027) [built it assumes that an object stays](https://youtu.be/uOic5TLcoGE?t=2029) [unchanged and there's a process for](https://youtu.be/uOic5TLcoGE?t=2033) [changing objects in this screen and this](https://youtu.be/uOic5TLcoGE?t=2036) [is important because this uh is a core](https://youtu.be/uOic5TLcoGE?t=2038) [element of making sure that the x colro](https://youtu.be/uOic5TLcoGE?t=2042) [is fluid as you update the scene because](https://youtu.be/uOic5TLcoGE?t=2046) [otherwise it would always need to update](https://youtu.be/uOic5TLcoGE?t=2050) [each of the elements and it would be](https://youtu.be/uOic5TLcoGE?t=2053) [super slow so the way you can change the](https://youtu.be/uOic5TLcoGE?t=2054) [properties of an element is you need to](https://youtu.be/uOic5TLcoGE?t=2060) [First copy it into EXC colro automate](https://youtu.be/uOic5TLcoGE?t=2062) [where you can](https://youtu.be/uOic5TLcoGE?t=2066) [it's like you take the part out of the](https://youtu.be/uOic5TLcoGE?t=2068) [engine you put it on the workbench you](https://youtu.be/uOic5TLcoGE?t=2072) [work on it on in the workbench and then](https://youtu.be/uOic5TLcoGE?t=2074) [you place it back into the scene that's](https://youtu.be/uOic5TLcoGE?t=2076) [what we're going to do the the way you](https://youtu.be/uOic5TLcoGE?t=2078) [do it is the following I'm going to run](https://youtu.be/uOic5TLcoGE?t=2081) [EA copy view elements to EA for editing](https://youtu.be/uOic5TLcoGE?t=2087) [and I'm going to set which elements I](https://youtu.be/uOic5TLcoGE?t=2094) [want I want the EA get](https://youtu.be/uOic5TLcoGE?t=2097) [view selected elements so the difference](https://youtu.be/uOic5TLcoGE?t=2102) [between EA get view selected](https://youtu.be/uOic5TLcoGE?t=2107) [element and elements so note the Pearl](https://youtu.be/uOic5TLcoGE?t=2110) [the S is elements will return all of the](https://youtu.be/uOic5TLcoGE?t=2114) [selected elements it's going to return](https://youtu.be/uOic5TLcoGE?t=2119) [an array maybe before we do this let me](https://youtu.be/uOic5TLcoGE?t=2121) [just show you the difference so](https://youtu.be/uOic5TLcoGE?t=2124) [EA get view selected elements returns a](https://youtu.be/uOic5TLcoGE?t=2127) [list of elements while EA get view](https://youtu.be/uOic5TLcoGE?t=2131) [selected element returns an individual](https://youtu.be/uOic5TLcoGE?t=2136) [item so this is the same item but in](https://youtu.be/uOic5TLcoGE?t=2140) [this case it's a list and of course if I](https://youtu.be/uOic5TLcoGE?t=2142) [have multiple elements selected then](https://youtu.be/uOic5TLcoGE?t=2145) [selected elements will return all of](https://youtu.be/uOic5TLcoGE?t=2149) [them](https://youtu.be/uOic5TLcoGE?t=2152) [and selected element will return the](https://youtu.be/uOic5TLcoGE?t=2153) [first first one in the sequence in this](https://youtu.be/uOic5TLcoGE?t=2157) [case it seems It's the the line that it](https://youtu.be/uOic5TLcoGE?t=2160) [returned so that's what we read here](https://youtu.be/uOic5TLcoGE?t=2164) [also in the](https://youtu.be/uOic5TLcoGE?t=2167) [description and why am i showing you](https://youtu.be/uOic5TLcoGE?t=2169) [this it's because copy view elements to](https://youtu.be/uOic5TLcoGE?t=2172) [EA for editing requires a list to be uh](https://youtu.be/uOic5TLcoGE?t=2175) [provided as input and again just and I I](https://youtu.be/uOic5TLcoGE?t=2180) [won't show you this each time but just](https://youtu.be/uOic5TLcoGE?t=2185) [to show you so if I run the help you](https://youtu.be/uOic5TLcoGE?t=2187) [will see that copy view selected](https://youtu.be/uOic5TLcoGE?t=2190) [elements is looking for a list](https://youtu.be/uOic5TLcoGE?t=2193) [of EXC colid draw objects and here's](https://youtu.be/uOic5TLcoGE?t=2197) [what it does so I'm going to do](https://youtu.be/uOic5TLcoGE?t=2201) [this with this I moved both of these](https://youtu.be/uOic5TLcoGE?t=2204) [elements over to my uh workbench so if](https://youtu.be/uOic5TLcoGE?t=2208) [now I look at EA get](https://youtu.be/uOic5TLcoGE?t=2212) [elements it will have two items this is](https://youtu.be/uOic5TLcoGE?t=2216) [also a point to understand that probably](https://youtu.be/uOic5TLcoGE?t=2220) [you notice that here I have in the](https://youtu.be/uOic5TLcoGE?t=2225) [function name I say get view selected](https://youtu.be/uOic5TLcoGE?t=2229) [elements and I can also get EA get view](https://youtu.be/uOic5TLcoGE?t=2232) [Elements which is going to return all](https://youtu.be/uOic5TLcoGE?t=2237) [the elements all the 502 elements in the](https://youtu.be/uOic5TLcoGE?t=2240) [view so then I have the view in the ver](https://youtu.be/uOic5TLcoGE?t=2244) [or in the function name it talks about](https://youtu.be/uOic5TLcoGE?t=2248) [the view that you're seeing here it](https://youtu.be/uOic5TLcoGE?t=2252) [talks about the scene then I don't have](https://youtu.be/uOic5TLcoGE?t=2254) [the view in the function name so get](https://youtu.be/uOic5TLcoGE?t=2256) [elements then I'm looking at what's on](https://youtu.be/uOic5TLcoGE?t=2259) [my workbench so this is everything in](https://youtu.be/uOic5TLcoGE?t=2262) [the car and so get view elements is](https://youtu.be/uOic5TLcoGE?t=2264) [everything in the car EA get elements is](https://youtu.be/uOic5TLcoGE?t=2268) [everything on my](https://youtu.be/uOic5TLcoGE?t=2272) [workbench and now I can](https://youtu.be/uOic5TLcoGE?t=2274) [uh do the](https://youtu.be/uOic5TLcoGE?t=2277) [following and for now we're going to](https://youtu.be/uOic5TLcoGE?t=2278) [mess up this line as well so you will](https://youtu.be/uOic5TLcoGE?t=2281) [also see another what happens when we](https://youtu.be/uOic5TLcoGE?t=2284) [change the uh custom](https://youtu.be/uOic5TLcoGE?t=2287) [data uh without considering what was the](https://youtu.be/uOic5TLcoGE?t=2290) [previous custom data I'm going](https://youtu.be/uOic5TLcoGE?t=2294) [to](https://youtu.be/uOic5TLcoGE?t=2298) [update the well maybe before we go there](https://youtu.be/uOic5TLcoGE?t=2300) [let's no that that's good so I'm going](https://youtu.be/uOic5TLcoGE?t=2304) [to do the following I'm going to iterate](https://youtu.be/uOic5TLcoGE?t=2306) [so I take all the elements and for each](https://youtu.be/uOic5TLcoGE?t=2310) [of them each of the elements I'm going](https://youtu.be/uOic5TLcoGE?t=2316) [to do the](https://youtu.be/uOic5TLcoGE?t=2318) [following I'm going](https://youtu.be/uOic5TLcoGE?t=2322) [to take the](https://youtu.be/uOic5TLcoGE?t=2325) [element and I'm going to set custom data](https://youtu.be/uOic5TLcoGE?t=2328) [to have a value of um I don't know](https://youtu.be/uOic5TLcoGE?t=2332) [groups](https://youtu.be/uOic5TLcoGE?t=2336) [and let's imagine we will have a](https://youtu.be/uOic5TLcoGE?t=2337) [solution where you can have multiple](https://youtu.be/uOic5TLcoGE?t=2340) [groups so this is going to be group a](https://youtu.be/uOic5TLcoGE?t=2342) [like that so now I'm I'm going to update](https://youtu.be/uOic5TLcoGE?t=2345) [all the elements in exol romate so these](https://youtu.be/uOic5TLcoGE?t=2350) [two elements I'm going to update to add](https://youtu.be/uOic5TLcoGE?t=2354) [this custom data to each of the elements](https://youtu.be/uOic5TLcoGE?t=2358) [so let's just take a look here you can](https://youtu.be/uOic5TLcoGE?t=2362) [look at my free draw the free draw now](https://youtu.be/uOic5TLcoGE?t=2364) [has this custom element custom data we](https://youtu.be/uOic5TLcoGE?t=2368) [are going to overwrite that so if I](https://youtu.be/uOic5TLcoGE?t=2371) [press enter](https://youtu.be/uOic5TLcoGE?t=2373) [here and I again take a look](https://youtu.be/uOic5TLcoGE?t=2376) [at EA elements then you will see that my](https://youtu.be/uOic5TLcoGE?t=2379) [free draw](https://youtu.be/uOic5TLcoGE?t=2384) [line now has a single custom data called](https://youtu.be/uOic5TLcoGE?t=2385) [groups and it says group a so we've done](https://youtu.be/uOic5TLcoGE?t=2390) [this and if I now want want to move this](https://youtu.be/uOic5TLcoGE?t=2394) [data back into the view I need to run EA](https://youtu.be/uOic5TLcoGE?t=2399) [add elements](https://youtu.be/uOic5TLcoGE?t=2403) [to to](https://youtu.be/uOic5TLcoGE?t=2406) [view and if I press](https://youtu.be/uOic5TLcoGE?t=2408) [enter then uh yeah in this](https://youtu.be/uOic5TLcoGE?t=2411) [case of course this so so probably we](https://youtu.be/uOic5TLcoGE?t=2416) [would see more with a a thin thick line](https://youtu.be/uOic5TLcoGE?t=2419) [because this straight line has it](https://youtu.be/uOic5TLcoGE?t=2422) [doesn't change so much with with this uh](https://youtu.be/uOic5TLcoGE?t=2425) [setting but so what happened now is if I](https://youtu.be/uOic5TLcoGE?t=2428) [select this element in the view EA get](https://youtu.be/uOic5TLcoGE?t=2431) [view](https://youtu.be/uOic5TLcoGE?t=2437) [selected](https://youtu.be/uOic5TLcoGE?t=2438) [element then that element the text](https://youtu.be/uOic5TLcoGE?t=2441) [element will have this custom data and](https://youtu.be/uOic5TLcoGE?t=2444) [so now I can do my simple script uh to](https://youtu.be/uOic5TLcoGE?t=2448) [select all the elements in the view that](https://youtu.be/uOic5TLcoGE?t=2453) [have custom data groups group a and the](https://youtu.be/uOic5TLcoGE?t=2456) [way I will do it is EA get view](https://youtu.be/uOic5TLcoGE?t=2461) [elements and I'm going to filter this](https://youtu.be/uOic5TLcoGE?t=2466) [list and each element I will decide if](https://youtu.be/uOic5TLcoGE?t=2469) [it's in the filter or not based on the](https://youtu.be/uOic5TLcoGE?t=2473) [following uh](https://youtu.be/uOic5TLcoGE?t=2478) [criteria so I'm going to say this is](https://youtu.be/uOic5TLcoGE?t=2480) [return first of all I need to check if](https://youtu.be/uOic5TLcoGE?t=2485) [the element has custom](https://youtu.be/uOic5TLcoGE?t=2488) [data then does the element have custom](https://youtu.be/uOic5TLcoGE?t=2491) [data groups and if it has custom data in](https://youtu.be/uOic5TLcoGE?t=2496) [groups then I want to check if it has if](https://youtu.be/uOic5TLcoGE?t=2501) [custom data groups](https://youtu.be/uOic5TLcoGE?t=2504) [includes group](https://youtu.be/uOic5TLcoGE?t=2510) [a and this way we can also and you can](https://youtu.be/uOic5TLcoGE?t=2513) [see it already](https://youtu.be/uOic5TLcoGE?t=2516) [prompts me that there are going to be](https://youtu.be/uOic5TLcoGE?t=2517) [two results uh with this so you can see](https://youtu.be/uOic5TLcoGE?t=2519) [here these are my two results we can we](https://youtu.be/uOic5TLcoGE?t=2523) [can do a second round and maybe add](https://youtu.be/uOic5TLcoGE?t=2526) [Group B to an element here maybe to this](https://youtu.be/uOic5TLcoGE?t=2529) [Arrow so if we want to do that just](https://youtu.be/uOic5TLcoGE?t=2532) [to repeat ourselves so I'm first going](https://youtu.be/uOic5TLcoGE?t=2536) [to clear](https://youtu.be/uOic5TLcoGE?t=2539) [EA because EA now on the workbench I](https://youtu.be/uOic5TLcoGE?t=2541) [still have the previous elements so let](https://youtu.be/uOic5TLcoGE?t=2545) [me just show you that if I get](https://youtu.be/uOic5TLcoGE?t=2547) [elements here it still has the two](https://youtu.be/uOic5TLcoGE?t=2551) [elements so adding the elements to xcro](https://youtu.be/uOic5TLcoGE?t=2554) [doesn't clear the workbench you can](https://youtu.be/uOic5TLcoGE?t=2557) [still continue to work on it so I need](https://youtu.be/uOic5TLcoGE?t=2560) [to First clear my desk so clear and then](https://youtu.be/uOic5TLcoGE?t=2562) [I'm going to](https://youtu.be/uOic5TLcoGE?t=2568) [EA copy view elements for editing EA get](https://youtu.be/uOic5TLcoGE?t=2570) [view selected](https://youtu.be/uOic5TLcoGE?t=2574) [elements and then we are going to I'm](https://youtu.be/uOic5TLcoGE?t=2580) [pressing now the up Arrow so the up and](https://youtu.be/uOic5TLcoGE?t=2583) [down](https://youtu.be/uOic5TLcoGE?t=2586) [arrow helps you navigate your your](https://youtu.be/uOic5TLcoGE?t=2587) [previous script so I want to go here and](https://youtu.be/uOic5TLcoGE?t=2591) [here this element I'm going to add to](https://youtu.be/uOic5TLcoGE?t=2595) [Group B like that and then let's add](https://youtu.be/uOic5TLcoGE?t=2598) [this back](https://youtu.be/uOic5TLcoGE?t=2602) [to the view](https://youtu.be/uOic5TLcoGE?t=2604) [okay it would be faster EA](https://youtu.be/uOic5TLcoGE?t=2608) [add elements not to view but not to](https://youtu.be/uOic5TLcoGE?t=2611) [frame but to](https://youtu.be/uOic5TLcoGE?t=2615) [view and now if I](https://youtu.be/uOic5TLcoGE?t=2617) [run my](https://youtu.be/uOic5TLcoGE?t=2620) [filter group a is going to return the](https://youtu.be/uOic5TLcoGE?t=2624) [single element and group b y is going to](https://youtu.be/uOic5TLcoGE?t=2627) [return one element so group a returns](https://youtu.be/uOic5TLcoGE?t=2631) [two elements you can see or I can even](https://youtu.be/uOic5TLcoGE?t=2638) [write this like this I can also say that](https://youtu.be/uOic5TLcoGE?t=2642) [and or group b and this should return us](https://youtu.be/uOic5TLcoGE?t=2648) [three elements because now what I'm](https://youtu.be/uOic5TLcoGE?t=2653) [doing is I'm filtering for elements that](https://youtu.be/uOic5TLcoGE?t=2655) [have uh IDs group IDs A and B and so](https://youtu.be/uOic5TLcoGE?t=2659) [this is the](https://youtu.be/uOic5TLcoGE?t=2666) [basic architecture that I'm thinking we](https://youtu.be/uOic5TLcoGE?t=2668) [can build we can create a script that](https://youtu.be/uOic5TLcoGE?t=2671) [helps you](https://youtu.be/uOic5TLcoGE?t=2674) [attach IDs two elements custom](https://youtu.be/uOic5TLcoGE?t=2676) [IDs that helps you delete them and from](https://youtu.be/uOic5TLcoGE?t=2680) [then on uh if you standardize on these](https://youtu.be/uOic5TLcoGE?t=2683) [group names in your drawings then you](https://youtu.be/uOic5TLcoGE?t=2687) [will be able to pick and choose based on](https://youtu.be/uOic5TLcoGE?t=2689) [additional Dimensions I mean this could](https://youtu.be/uOic5TLcoGE?t=2693) [even be the base](https://youtu.be/uOic5TLcoGE?t=2696) [bis of a script there so for example](https://youtu.be/uOic5TLcoGE?t=2697) [let's let's do this this is going to be](https://youtu.be/uOic5TLcoGE?t=2701) [interesting](https://youtu.be/uOic5TLcoGE?t=2703) [um and then I'm going to stop and let](https://youtu.be/uOic5TLcoGE?t=2705) [you ask questions because I can't get](https://youtu.be/uOic5TLcoGE?t=2708) [carried away but I I see a bit of a an](https://youtu.be/uOic5TLcoGE?t=2710) [opportunity here so imagine the](https://youtu.be/uOic5TLcoGE?t=2713) [following I actually am going](https://youtu.be/uOic5TLcoGE?t=2716) [to um take the negative so the script I](https://youtu.be/uOic5TLcoGE?t=2723) [want to write and this is](https://youtu.be/uOic5TLcoGE?t=2727) [um this is a request I get often times](https://youtu.be/uOic5TLcoGE?t=2731) [that it would be great to have layers in](https://youtu.be/uOic5TLcoGE?t=2734) [the way that I can select which layer I](https://youtu.be/uOic5TLcoGE?t=2737) [want to work on and everything else is](https://youtu.be/uOic5TLcoGE?t=2739) [either hidden or locked so I it doesn't](https://youtu.be/uOic5TLcoGE?t=2743) [get in the way and we can build that](https://youtu.be/uOic5TLcoGE?t=2746) [script uh now because we can do the](https://youtu.be/uOic5TLcoGE?t=2749) [following I can create this list of](https://youtu.be/uOic5TLcoGE?t=2752) [elements I'm I'm going](https://youtu.be/uOic5TLcoGE?t=2755) [to](https://youtu.be/uOic5TLcoGE?t=2758) [um add an exclamation mark here which](https://youtu.be/uOic5TLcoGE?t=2761) [means I'm negating the value](https://youtu.be/uOic5TLcoGE?t=2764) [so the exclamation mark means it's not](https://youtu.be/uOic5TLcoGE?t=2769) [the value so I'm looking for all the](https://youtu.be/uOic5TLcoGE?t=2773) [elements that are not in group A or B](https://youtu.be/uOic5TLcoGE?t=2776) [and does not have custom data Etc I want](https://youtu.be/uOic5TLcoGE?t=2781) [all of these elements and so the these](https://youtu.be/uOic5TLcoGE?t=2785) [are going to be](https://youtu.be/uOic5TLcoGE?t=2787) [the elements to lock for](https://youtu.be/uOic5TLcoGE?t=2789) [example so I'm just going to put this in](https://youtu.be/uOic5TLcoGE?t=2793) [a list and then I'm going to do the](https://youtu.be/uOic5TLcoGE?t=2796) [following I'm going](https://youtu.be/uOic5TLcoGE?t=2799) [to again clear excal dra automate I'm](https://youtu.be/uOic5TLcoGE?t=2801) [going to do EA copy elements for editing](https://youtu.be/uOic5TLcoGE?t=2805) [elements to](https://youtu.be/uOic5TLcoGE?t=2812) [lock like this](https://youtu.be/uOic5TLcoGE?t=2813) [and then I'm going to EA get](https://youtu.be/uOic5TLcoGE?t=2817) [elements for](https://youtu.be/uOic5TLcoGE?t=2821) [each element I want](https://youtu.be/uOic5TLcoGE?t=2826) [to think element loged equals](https://youtu.be/uOic5TLcoGE?t=2830) [true like](https://youtu.be/uOic5TLcoGE?t=2835) [this and then EA add elements to it's](https://youtu.be/uOic5TLcoGE?t=2838) [always the elements to View and](https://youtu.be/uOic5TLcoGE?t=2844) [hopefully now only these items are](https://youtu.be/uOic5TLcoGE?t=2847) [selectable everything else is logged of](https://youtu.be/uOic5TLcoGE?t=2852) [course I could also have set their](https://youtu.be/uOic5TLcoGE?t=2855) [opacity to something but so this can be](https://youtu.be/uOic5TLcoGE?t=2857) [pretty helpful because this way you can](https://youtu.be/uOic5TLcoGE?t=2860) [have a script where you you have a drop](https://youtu.be/uOic5TLcoGE?t=2864) [down menu you select which groups you](https://youtu.be/uOic5TLcoGE?t=2867) [want to lock or unlock](https://youtu.be/uOic5TLcoGE?t=2870) [and I I can definitely see that this is](https://youtu.be/uOic5TLcoGE?t=2874) [is a power tool but yes I promised I'm](https://youtu.be/uOic5TLcoGE?t=2876) [going to stop here so I'm stopping here](https://youtu.be/uOic5TLcoGE?t=2879) [and let me know questions because I can](https://youtu.be/uOic5TLcoGE?t=2882) [imagine that this is already um quite](https://youtu.be/uOic5TLcoGE?t=2884) [deep in the](https://youtu.be/uOic5TLcoGE?t=2888) [details this this might Sidetrack again](https://youtu.be/uOic5TLcoGE?t=2890) [but uh like I I can see how how that](https://youtu.be/uOic5TLcoGE?t=2894) [that can be really powerful but if I](https://youtu.be/uOic5TLcoGE?t=2897) [imagine like having maybe two three four](https://youtu.be/uOic5TLcoGE?t=2899) [groups and then being able to CH choose](https://youtu.be/uOic5TLcoGE?t=2903) [to select basically one group and and](https://youtu.be/uOic5TLcoGE?t=2906) [lock everything else how hard would it](https://youtu.be/uOic5TLcoGE?t=2908) [be to to make that hot keyable for](https://youtu.be/uOic5TLcoGE?t=2912) [example so I don't know oh it's](https://youtu.be/uOic5TLcoGE?t=2915) [extremely have number value yeah okay](https://youtu.be/uOic5TLcoGE?t=2916) [because like from a power using](https://youtu.be/uOic5TLcoGE?t=2920) [perspective if you could have like](https://youtu.be/uOic5TLcoGE?t=2922) [groups one to five or whatnot and could](https://youtu.be/uOic5TLcoGE?t=2925) [easily with like one or two buttons](https://youtu.be/uOic5TLcoGE?t=2927) [switch between the groups lock](https://youtu.be/uOic5TLcoGE?t=2930) [everything else I mean that's incredibly](https://youtu.be/uOic5TLcoGE?t=2931) [useful so so let's build I mean we have](https://youtu.be/uOic5TLcoGE?t=2934) [limited we have as much time as we want](https://youtu.be/uOic5TLcoGE?t=2939) [but uh we still have limited time so so](https://youtu.be/uOic5TLcoGE?t=2942) [I think uh I don't want](https://youtu.be/uOic5TLcoGE?t=2947) [to um get in too much detail too quick](https://youtu.be/uOic5TLcoGE?t=2951) [but yeah so the way you would do this is](https://youtu.be/uOic5TLcoGE?t=2957) [you can assign a script you can assign](https://youtu.be/uOic5TLcoGE?t=2960) [hot keys to excal automa](https://youtu.be/uOic5TLcoGE?t=2964) [scripts and that way I think we could](https://youtu.be/uOic5TLcoGE?t=2967) [actually create our script of group a B](https://youtu.be/uOic5TLcoGE?t=2970) [or C or D and and play with that it it](https://youtu.be/uOic5TLcoGE?t=2975) [requires a bit of thinking but let's](https://youtu.be/uOic5TLcoGE?t=2979) [create a script that will for now have a](https://youtu.be/uOic5TLcoGE?t=2982) [hardcoded group ID that it will lock and](https://youtu.be/uOic5TLcoGE?t=2987) [unlock uh everything else and just leave](https://youtu.be/uOic5TLcoGE?t=2992) [the the the element there and then you](https://youtu.be/uOic5TLcoGE?t=2995) [can work on this further on so yeah I](https://youtu.be/uOic5TLcoGE?t=2999) [can see that one hour goes uh extremely](https://youtu.be/uOic5TLcoGE?t=3003) [quickly here um but let's let's look at](https://youtu.be/uOic5TLcoGE?t=3007) [the following so I'm going to create a](https://youtu.be/uOic5TLcoGE?t=3011) [new script now so I'm coming here to my](https://youtu.be/uOic5TLcoGE?t=3013) [excolo scripts folder and this is going](https://youtu.be/uOic5TLcoGE?t=3016) [to be](https://youtu.be/uOic5TLcoGE?t=3020) [my uh new note](https://youtu.be/uOic5TLcoGE?t=3021) [and the new note is going to be](https://youtu.be/uOic5TLcoGE?t=3025) [uh I don't know](https://youtu.be/uOic5TLcoGE?t=3031) [power lock one because we said that we](https://youtu.be/uOic5TLcoGE?t=3034) [are going to uh assign various uh keys](https://youtu.be/uOic5TLcoGE?t=3038) [to loog two loog three lock unlock maybe](https://youtu.be/uOic5TLcoGE?t=3042) [that's](https://youtu.be/uOic5TLcoGE?t=3046) [the oh I cannot have lock and unlock](https://youtu.be/uOic5TLcoGE?t=3050) [whatever now the way I like to start all](https://youtu.be/uOic5TLcoGE?t=3055) [my](https://youtu.be/uOic5TLcoGE?t=3058) [scripts](https://youtu.be/uOic5TLcoGE?t=3060) [um is this little](https://youtu.be/uOic5TLcoGE?t=3061) [hack](https://youtu.be/uOic5TLcoGE?t=3064) [of just adding this JavaScript comment](https://youtu.be/uOic5TLcoGE?t=3068) [at the top because from here on the](https://youtu.be/uOic5TLcoGE?t=3072) [script is going to be uh syntax](https://youtu.be/uOic5TLcoGE?t=3074) [highlighted by the way I'm doing the](https://youtu.be/uOic5TLcoGE?t=3077) [same so Sid trck um but let me open uh a](https://youtu.be/uOic5TLcoGE?t=3079) [Templater script for you for](https://youtu.be/uOic5TLcoGE?t=3085) [example so I'm doing the same with](https://youtu.be/uOic5TLcoGE?t=3092) [Templater scripts I turned off the](https://youtu.be/uOic5TLcoGE?t=3095) [Templater auto so Templater has a syntax](https://youtu.be/uOic5TLcoGE?t=3097) [highlighting but with large files it](https://youtu.be/uOic5TLcoGE?t=3100) [slows down so if I have a large excolo](https://youtu.be/uOic5TLcoGE?t=3104) [file open in markdown view then because](https://youtu.be/uOic5TLcoGE?t=3107) [of the Templater syntax](https://youtu.be/uOic5TLcoGE?t=3109) [highlighting it BEC slow so instead I'm](https://youtu.be/uOic5TLcoGE?t=3112) [doing the same trick with Templater](https://youtu.be/uOic5TLcoGE?t=3115) [scripts that I just add this comment at](https://youtu.be/uOic5TLcoGE?t=3117) [the top of the script it creates a code](https://youtu.be/uOic5TLcoGE?t=3121) [block uh but because it's in JavaScript](https://youtu.be/uOic5TLcoGE?t=3124) [comments it's uh disregarded and then I](https://youtu.be/uOic5TLcoGE?t=3127) [get a nicely uh color syntax highlighted](https://youtu.be/uOic5TLcoGE?t=3131) [text but so let's start to write here so](https://youtu.be/uOic5TLcoGE?t=3135) [um I think we are going to just have um](https://youtu.be/uOic5TLcoGE?t=3140) [group and we're going to call this group](https://youtu.be/uOic5TLcoGE?t=3147) [a](https://youtu.be/uOic5TLcoGE?t=3151) [as as a constant and we're going to](https://youtu.be/uOic5TLcoGE?t=3153) [actually copy all of these nice scripts](https://youtu.be/uOic5TLcoGE?t=3157) [from here so I'm going to by the way if](https://youtu.be/uOic5TLcoGE?t=3161) [I type here EA dot then I get all the](https://youtu.be/uOic5TLcoGE?t=3163) [functions here](https://youtu.be/uOic5TLcoGE?t=3167) [so I have a um tool tip in here and you](https://youtu.be/uOic5TLcoGE?t=3168) [can also see that here I also have](https://youtu.be/uOic5TLcoGE?t=3174) [immediately the description the same](https://youtu.be/uOic5TLcoGE?t=3176) [description you can get with help and](https://youtu.be/uOic5TLcoGE?t=3178) [also when you're writing an excal](https://youtu.be/uOic5TLcoGE?t=3181) [automate script you have the utils uh](https://youtu.be/uOic5TLcoGE?t=3183) [utility package that you can use to](https://youtu.be/uOic5TLcoGE?t=3188) [create an input prompt long description](https://youtu.be/uOic5TLcoGE?t=3191) [a](https://youtu.be/uOic5TLcoGE?t=3195) [suggestor and find out which script file](https://youtu.be/uOic5TLcoGE?t=3196) [you're in so there's some utility](https://youtu.be/uOic5TLcoGE?t=3199) [features here as well but for now I want](https://youtu.be/uOic5TLcoGE?t=3202) [to](https://youtu.be/uOic5TLcoGE?t=3205) [bring elements to lock here and here](https://youtu.be/uOic5TLcoGE?t=3208) [instead of group a I'm going to type](https://youtu.be/uOic5TLcoGE?t=3211) [group and we don't need](https://youtu.be/uOic5TLcoGE?t=3216) [the or so this is and we don't need this](https://youtu.be/uOic5TLcoGE?t=3218) [and](https://youtu.be/uOic5TLcoGE?t=3222) [this](https://youtu.be/uOic5TLcoGE?t=3224) [okay let's pull](https://youtu.be/uOic5TLcoGE?t=3227) [this like that](https://youtu.be/uOic5TLcoGE?t=3230) [so I'm selecting the elements to to lock](https://youtu.be/uOic5TLcoGE?t=3237) [and then I can EA copy elements to view](https://youtu.be/uOic5TLcoGE?t=3240) [for](https://youtu.be/uOic5TLcoGE?t=3245) [editing elements think I think you're](https://youtu.be/uOic5TLcoGE?t=3246) [missing one closing parenthesis right](https://youtu.be/uOic5TLcoGE?t=3249) [after yes I am yes yeah thank](https://youtu.be/uOic5TLcoGE?t=3252) [you but we now missed the great](https://youtu.be/uOic5TLcoGE?t=3257) [debugging opportunity but I'll I'll I'll](https://youtu.be/uOic5TLcoGE?t=3259) [show you that as sorry no it wasn't on](https://youtu.be/uOic5TLcoGE?t=3263) [intention](https://youtu.be/uOic5TLcoGE?t=3267) [so](https://youtu.be/uOic5TLcoGE?t=3271) [um uh Because by the way the debug in](https://youtu.be/uOic5TLcoGE?t=3272) [this case my debugging so I would get an](https://youtu.be/uOic5TLcoGE?t=3275) [error and I would have no idea where the](https://youtu.be/uOic5TLcoGE?t=3278) [error comes from so I would copy paste](https://youtu.be/uOic5TLcoGE?t=3280) [this script here and press enter and I](https://youtu.be/uOic5TLcoGE?t=3282) [would](https://youtu.be/uOic5TLcoGE?t=3285) [get um this error unexpected token or](https://youtu.be/uOic5TLcoGE?t=3286) [whatever I can click on this link and it](https://youtu.be/uOic5TLcoGE?t=3290) [would show me uh there the](https://youtu.be/uOic5TLcoGE?t=3293) [uh semicolon and I could figure out that](https://youtu.be/uOic5TLcoGE?t=3296) [uh what's the issue but so when I have a](https://youtu.be/uOic5TLcoGE?t=3301) [syntax error in the script the easiest](https://youtu.be/uOic5TLcoGE?t=3303) [is to copy paste that script over to](https://youtu.be/uOic5TLcoGE?t=3306) [developer console pressing enter and it](https://youtu.be/uOic5TLcoGE?t=3309) [will automatically give you the uh the](https://youtu.be/uOic5TLcoGE?t=3312) [syntax eror and clicking on this you can](https://youtu.be/uOic5TLcoGE?t=3315) [you can navigate to the point in the](https://youtu.be/uOic5TLcoGE?t=3319) [file so that's a a pretty powerful](https://youtu.be/uOic5TLcoGE?t=3321) [approach but so this is our script and](https://youtu.be/uOic5TLcoGE?t=3325) [then we want it](https://youtu.be/uOic5TLcoGE?t=3329) [to](https://youtu.be/uOic5TLcoGE?t=3331) [um not this but or we wanted to lock and](https://youtu.be/uOic5TLcoGE?t=3334) [unlock so let's do this so I'm going](https://youtu.be/uOic5TLcoGE?t=3339) [to](https://youtu.be/uOic5TLcoGE?t=3344) [um for now I'm going to do this this](https://youtu.be/uOic5TLcoGE?t=3346) [very simple approach first of all it's](https://youtu.be/uOic5TLcoGE?t=3349) [always good to check so if](https://youtu.be/uOic5TLcoGE?t=3352) [elements to lock do](https://youtu.be/uOic5TLcoGE?t=3357) [length equals z](https://youtu.be/uOic5TLcoGE?t=3361) [then new](https://youtu.be/uOic5TLcoGE?t=3366) [notice](https://youtu.be/uOic5TLcoGE?t=3369) [nothing is](https://youtu.be/uOic5TLcoGE?t=3371) [selected and return so we don't want to](https://youtu.be/uOic5TLcoGE?t=3375) [run on and I'm going to create con is](https://youtu.be/uOic5TLcoGE?t=3380) [locked](https://youtu.be/uOic5TLcoGE?t=3385) [as my and I'm now going to do a Brute](https://youtu.be/uOic5TLcoGE?t=3387) [Force approach I'm going to](https://youtu.be/uOic5TLcoGE?t=3391) [elements to](https://youtu.be/uOic5TLcoGE?t=3394) [lock I'm going to take the first element](https://youtu.be/uOic5TLcoGE?t=3397) [and take it and apply the logged value](https://youtu.be/uOic5TLcoGE?t=3400) [so this way I know if I need to so this](https://youtu.be/uOic5TLcoGE?t=3406) [is going](https://youtu.be/uOic5TLcoGE?t=3408) [to](https://youtu.be/uOic5TLcoGE?t=3410) [maybe this is rather toggle lock and](https://youtu.be/uOic5TLcoGE?t=3412) [unlock](https://youtu.be/uOic5TLcoGE?t=3415) [and I'm going to put a dash here as this](https://youtu.be/uOic5TLcoGE?t=3417) [is group a or group one but so I copied](https://youtu.be/uOic5TLcoGE?t=3420) [that here and then we had uh](https://youtu.be/uOic5TLcoGE?t=3425) [get uh get elements here did we have](https://youtu.be/uOic5TLcoGE?t=3430) [that otherwise I'm just going to write](https://youtu.be/uOic5TLcoGE?t=3433) [it there we go](https://youtu.be/uOic5TLcoGE?t=3435) [um anyway I think it's faster to write](https://youtu.be/uOic5TLcoGE?t=3437) [it so EA get](https://youtu.be/uOic5TLcoGE?t=3440) [elements for for](https://youtu.be/uOic5TLcoGE?t=3444) [each](https://youtu.be/uOic5TLcoGE?t=3447) [element I want to](https://youtu.be/uOic5TLcoGE?t=3449) [element log](https://youtu.be/uOic5TLcoGE?t=3452) [equals not is loged so I'm toggling the](https://youtu.be/uOic5TLcoGE?t=3455) [value so if it was logged I'm unlocking](https://youtu.be/uOic5TLcoGE?t=3459) [if it wasn't logged and I'm](https://youtu.be/uOic5TLcoGE?t=3461) [locking and then all I need to do is EA](https://youtu.be/uOic5TLcoGE?t=3464) [add elements to](https://youtu.be/uOic5TLcoGE?t=3470) [view and we are done I think think we](https://youtu.be/uOic5TLcoGE?t=3473) [have our script so if I open](https://youtu.be/uOic5TLcoGE?t=3476) [scratchpad won't work you uh remov the](https://youtu.be/uOic5TLcoGE?t=3480) [parentheses the closing one to show the](https://youtu.be/uOic5TLcoGE?t=3483) [debugging and you didn't put it](https://youtu.be/uOic5TLcoGE?t=3485) [back there we go all right so](https://youtu.be/uOic5TLcoGE?t=3488) [that yeah returning bug all right so um](https://youtu.be/uOic5TLcoGE?t=3492) [so now if I now I cannot select this but](https://youtu.be/uOic5TLcoGE?t=3497) [now if I](https://youtu.be/uOic5TLcoGE?t=3501) [run toggle lock all lock](https://youtu.be/uOic5TLcoGE?t=3503) [then I should be able to what happened](https://youtu.be/uOic5TLcoGE?t=3506) [did I get an error](https://youtu.be/uOic5TLcoGE?t=3510) [here let's clear this just let's come](https://youtu.be/uOic5TLcoGE?t=3512) [here so what](https://youtu.be/uOic5TLcoGE?t=3515) [did or may well let's just see](https://youtu.be/uOic5TLcoGE?t=3519) [EA EA set](https://youtu.be/uOic5TLcoGE?t=3525) [View and EA get view selected](https://youtu.be/uOic5TLcoGE?t=3528) [element just want to see](https://youtu.be/uOic5TLcoGE?t=3533) [oh group a that's](https://youtu.be/uOic5TLcoGE?t=3540) [good so what's the issue](https://youtu.be/uOic5TLcoGE?t=3544) [here that spelled correctly right that](https://youtu.be/uOic5TLcoGE?t=3551) [seems C A that seems like the same](https://youtu.be/uOic5TLcoGE?t=3555) [thing elements to so let's do this so we](https://youtu.be/uOic5TLcoGE?t=3559) [are going to do a bit of debugging the](https://youtu.be/uOic5TLcoGE?t=3563) [best approach I found for debugging](https://youtu.be/uOic5TLcoGE?t=3564) [is I'm going to add debugger that's a uh](https://youtu.be/uOic5TLcoGE?t=3569) [command that will only execute if I have](https://youtu.be/uOic5TLcoGE?t=3574) [the uh developer console open under on](https://youtu.be/uOic5TLcoGE?t=3578) [the right hand side so now if I run the](https://youtu.be/uOic5TLcoGE?t=3582) [script I'm going to toggle](https://youtu.be/uOic5TLcoGE?t=3585) [lock](https://youtu.be/uOic5TLcoGE?t=3591) [unlock it doesn't even](https://youtu.be/uOic5TLcoGE?t=3593) [execute so what's going on](https://youtu.be/uOic5TLcoGE?t=3596) [here there's an](https://youtu.be/uOic5TLcoGE?t=3602) [error on C oh there's a syntax error we](https://youtu.be/uOic5TLcoGE?t=3606) [have here constant](https://youtu.be/uOic5TLcoGE?t=3609) [is okay so I didn't need debugging I](https://youtu.be/uOic5TLcoGE?t=3613) [just needed the equal sign there so this](https://youtu.be/uOic5TLcoGE?t=3618) [was missing](https://youtu.be/uOic5TLcoGE?t=3622) [again toggle lock and](https://youtu.be/uOic5TLcoGE?t=3626) [unlock](https://youtu.be/uOic5TLcoGE?t=3630) [and and still can now now I why why why](https://youtu.be/uOic5TLcoGE?t=3632) [hold on there's there's two errors](https://youtu.be/uOic5TLcoGE?t=3637) [there's still an error on cting profit](https://youtu.be/uOic5TLcoGE?t=3639) [element to lock is not defined I'm sure](https://youtu.be/uOic5TLcoGE?t=3642) [I misspelled](https://youtu.be/uOic5TLcoGE?t=3645) [it so because it's elements to lock](https://youtu.be/uOic5TLcoGE?t=3646) [okay so](https://youtu.be/uOic5TLcoGE?t=3657) [do there's still something in](https://youtu.be/uOic5TLcoGE?t=3662) [promise element to lock where do I use](https://youtu.be/uOic5TLcoGE?t=3667) [that element to lock](https://youtu.be/uOic5TLcoGE?t=3669) [still there you go do have statement](https://youtu.be/uOic5TLcoGE?t=3674) [and now everything can be](https://youtu.be/uOic5TLcoGE?t=3687) [selected and now if I toggle](https://youtu.be/uOic5TLcoGE?t=3690) [again then only this can be](https://youtu.be/uOic5TLcoGE?t=3696) [selected and then what I would](https://youtu.be/uOic5TLcoGE?t=3702) [do is so let's let's uh spend a few](https://youtu.be/uOic5TLcoGE?t=3705) [minutes on this still uh in terms](https://youtu.be/uOic5TLcoGE?t=3709) [of how I would so so because this is](https://youtu.be/uOic5TLcoGE?t=3713) [good for one script and and then my idea](https://youtu.be/uOic5TLcoGE?t=3716) [is you](https://youtu.be/uOic5TLcoGE?t=3720) [can](https://youtu.be/uOic5TLcoGE?t=3722) [um I mean](https://youtu.be/uOic5TLcoGE?t=3724) [there I have lots of ideas here so one](https://youtu.be/uOic5TLcoGE?t=3726) [idea is you could even out the but so so](https://youtu.be/uOic5TLcoGE?t=3730) [the basic idea is I can copy paste this](https://youtu.be/uOic5TLcoGE?t=3734) [script three or four](https://youtu.be/uOic5TLcoGE?t=3737) [times and assign my hot keys to each of](https://youtu.be/uOic5TLcoGE?t=3739) [them so of course I can toggle lock](https://youtu.be/uOic5TLcoGE?t=3743) [unlock one I can come to uh obsidian](https://youtu.be/uOic5TLcoGE?t=3747) [hotkey settings and I can type here](https://youtu.be/uOic5TLcoGE?t=3751) [toggle lock unlock and I can bind a](https://youtu.be/uOic5TLcoGE?t=3755) [hotkey maybe I'm going to bind Control](https://youtu.be/uOic5TLcoGE?t=3759) [Alt one that's not good because it's](https://youtu.be/uOic5TLcoGE?t=3762) [already taken but control shift one what](https://youtu.be/uOic5TLcoGE?t=3764) [about control shift one that's good so](https://youtu.be/uOic5TLcoGE?t=3768) [control shift one is the uh lock all](https://youtu.be/uOic5TLcoGE?t=3771) [lock one now we would probably need a](https://youtu.be/uOic5TLcoGE?t=3775) [hot key for adding and removing](https://youtu.be/uOic5TLcoGE?t=3779) [something from group](https://youtu.be/uOic5TLcoGE?t=3783) [one um and then of course if I copy](https://youtu.be/uOic5TLcoGE?t=3785) [paste this script and have 2 3 4 Etc](https://youtu.be/uOic5TLcoGE?t=3790) [then I can replicate the same idea but](https://youtu.be/uOic5TLcoGE?t=3794) [so let's now write a second script for](https://youtu.be/uOic5TLcoGE?t=3797) [ourselves and the second script is going](https://youtu.be/uOic5TLcoGE?t=3801) [to](https://youtu.be/uOic5TLcoGE?t=3804) [this is new note the second script is](https://youtu.be/uOic5TLcoGE?t=3806) [going to uh](https://youtu.be/uOic5TLcoGE?t=3810) [add uh toggle uh add to group](https://youtu.be/uOic5TLcoGE?t=3814) [one maybe like this this is going to be](https://youtu.be/uOic5TLcoGE?t=3823) [our script so](https://youtu.be/uOic5TLcoGE?t=3826) [I'm going to as a starting point copy](https://youtu.be/uOic5TLcoGE?t=3828) [this entire script here so what this](https://youtu.be/uOic5TLcoGE?t=3832) [script is going to do and maybe it's a](https://youtu.be/uOic5TLcoGE?t=3834) [good practice to that's what I typically](https://youtu.be/uOic5TLcoGE?t=3836) [do here you can write your short](https://youtu.be/uOic5TLcoGE?t=3839) [description so this script](https://youtu.be/uOic5TLcoGE?t=3842) [will uh](https://youtu.be/uOic5TLcoGE?t=3846) [lock](https://youtu.be/uOic5TLcoGE?t=3849) [unlock all elements in the scene that](https://youtu.be/uOic5TLcoGE?t=3852) [are not in group](https://youtu.be/uOic5TLcoGE?t=3858) [a actually let's just group a](https://youtu.be/uOic5TLcoGE?t=3861) [and here I can add that um this script](https://youtu.be/uOic5TLcoGE?t=3866) [will](https://youtu.be/uOic5TLcoGE?t=3873) [add or](https://youtu.be/uOic5TLcoGE?t=3875) [remove group a from](https://youtu.be/uOic5TLcoGE?t=3877) [selected](https://youtu.be/uOic5TLcoGE?t=3881) [elements so the way I'm going to so this](https://youtu.be/uOic5TLcoGE?t=3886) [is again I have group a uh what I was](https://youtu.be/uOic5TLcoGE?t=3888) [thinking previously is here in u](https://youtu.be/uOic5TLcoGE?t=3892) [script](https://youtu.be/uOic5TLcoGE?t=3897) [file I could take the base name of the](https://youtu.be/uOic5TLcoGE?t=3898) [script file and I could actually um](https://youtu.be/uOic5TLcoGE?t=3902) [either use the entire script file](https://youtu.be/uOic5TLcoGE?t=3907) [name or I could I would rather take this](https://youtu.be/uOic5TLcoGE?t=3910) [so I](https://youtu.be/uOic5TLcoGE?t=3915) [would split the script file name](https://youtu.be/uOic5TLcoGE?t=3916) [at Dash like this and would take the](https://youtu.be/uOic5TLcoGE?t=3921) [first value and that's going to equal to](https://youtu.be/uOic5TLcoGE?t=3926) [one and use that as the group name and](https://youtu.be/uOic5TLcoGE?t=3929) [then I wouldn't need to update the group](https://youtu.be/uOic5TLcoGE?t=3932) [constant in each of my um each of my](https://youtu.be/uOic5TLcoGE?t=3935) [files but okay so that's now taking us](https://youtu.be/uOic5TLcoGE?t=3940) [on a tangent so here what I'm going to](https://youtu.be/uOic5TLcoGE?t=3943) [do is I'm going to](https://youtu.be/uOic5TLcoGE?t=3947) [const](https://youtu.be/uOic5TLcoGE?t=3949) [selected elements equals e get view](https://youtu.be/uOic5TLcoGE?t=3951) [selected](https://youtu.be/uOic5TLcoGE?t=3956) [[Music]](https://youtu.be/uOic5TLcoGE?t=3957) [elements again I'm going to take here a](https://youtu.be/uOic5TLcoGE?t=3960) [notice if selected](https://youtu.be/uOic5TLcoGE?t=3963) [elements bont](https://youtu.be/uOic5TLcoGE?t=3967) [length is](https://youtu.be/uOic5TLcoGE?t=3972) [zero](https://youtu.be/uOic5TLcoGE?t=3975) [then we can just add this here so this](https://youtu.be/uOic5TLcoGE?t=3979) [is good we have our](https://youtu.be/uOic5TLcoGE?t=3983) [basic uh controls here and then what I](https://youtu.be/uOic5TLcoGE?t=3987) [want to do is EA actually we have this](https://youtu.be/uOic5TLcoGE?t=3990) [line](https://youtu.be/uOic5TLcoGE?t=3995) [here I want to move these elements here](https://youtu.be/uOic5TLcoGE?t=4001) [and](https://youtu.be/uOic5TLcoGE?t=4006) [for I think for each of the elements we](https://youtu.be/uOic5TLcoGE?t=4008) [are going to do this so EA get](https://youtu.be/uOic5TLcoGE?t=4011) [uh](https://youtu.be/uOic5TLcoGE?t=4015) [elements for](https://youtu.be/uOic5TLcoGE?t=4017) [each element I want to do the](https://youtu.be/uOic5TLcoGE?t=4019) [following I want](https://youtu.be/uOic5TLcoGE?t=4023) [to first of all check if the so const](https://youtu.be/uOic5TLcoGE?t=4026) [has](https://youtu.be/uOic5TLcoGE?t=4032) [group is the first question so how do I](https://youtu.be/uOic5TLcoGE?t=4033) [decide that this is how I decide](https://youtu.be/uOic5TLcoGE?t=4037) [it](https://youtu.be/uOic5TLcoGE?t=4039) [so I create this variable for me to help](https://youtu.be/uOic5TLcoGE?t=4043) [decide if I need to remove or add the](https://youtu.be/uOic5TLcoGE?t=4048) [value and then we're going to add the](https://youtu.be/uOic5TLcoGE?t=4051) [value which is going to be a bit of a](https://youtu.be/uOic5TLcoGE?t=4055) [tricky or remove the value which is](https://youtu.be/uOic5TLcoGE?t=4057) [going to be uh a bit of a tricky uh goal](https://youtu.be/uOic5TLcoGE?t=4060) [maybe this will be the right time to](https://youtu.be/uOic5TLcoGE?t=4065) [play a bit with](https://youtu.be/uOic5TLcoGE?t=4067) [jgpt um I think that can be also an](https://youtu.be/uOic5TLcoGE?t=4068) [interesting uh uh side side quest so](https://youtu.be/uOic5TLcoGE?t=4072) [let's do this um I'm going to play with](https://youtu.be/uOic5TLcoGE?t=4078) [chpt a little to help with uh a function](https://youtu.be/uOic5TLcoGE?t=4082) [so create a](https://youtu.be/uOic5TLcoGE?t=4087) [function okay before that I have](https://youtu.be/uOic5TLcoGE?t=4090) [a an object that has a property](https://youtu.be/uOic5TLcoGE?t=4096) [called custom](https://youtu.be/uOic5TLcoGE?t=4102) [data](https://youtu.be/uOic5TLcoGE?t=4107) [custom data may be uh empty may be null](https://youtu.be/uOic5TLcoGE?t=4110) [or it may have](https://youtu.be/uOic5TLcoGE?t=4117) [values write a](https://youtu.be/uOic5TLcoGE?t=4121) [function](https://youtu.be/uOic5TLcoGE?t=4125) [that will add a string to an array](https://youtu.be/uOic5TLcoGE?t=4128) [in custom](https://youtu.be/uOic5TLcoGE?t=4136) [data](https://youtu.be/uOic5TLcoGE?t=4139) [uh uh to an](https://youtu.be/uOic5TLcoGE?t=4142) [array](https://youtu.be/uOic5TLcoGE?t=4146) [um foror in the what's the name of our](https://youtu.be/uOic5TLcoGE?t=4150) [property here um groups and uh](https://youtu.be/uOic5TLcoGE?t=4155) [in some data](https://youtu.be/uOic5TLcoGE?t=4162) [groups write the function that will](https://youtu.be/uOic5TLcoGE?t=4167) [add or remove a](https://youtu.be/uOic5TLcoGE?t=4172) [string from an array stored in custom](https://youtu.be/uOic5TLcoGE?t=4177) [data](https://youtu.be/uOic5TLcoGE?t=4181) [groups note that custom](https://youtu.be/uOic5TLcoGE?t=4182) [data](https://youtu.be/uOic5TLcoGE?t=4186) [groups or might be undefined](https://youtu.be/uOic5TLcoGE?t=4189) [find if](https://youtu.be/uOic5TLcoGE?t=4197) [custom data](https://youtu.be/uOic5TLcoGE?t=4200) [groups](https://youtu.be/uOic5TLcoGE?t=4203) [includes](https://youtu.be/uOic5TLcoGE?t=4206) [uh](https://youtu.be/uOic5TLcoGE?t=4208) [string](https://youtu.be/uOic5TLcoGE?t=4210) [no includes](https://youtu.be/uOic5TLcoGE?t=4211) [string then it should remove it from the](https://youtu.be/uOic5TLcoGE?t=4216) [list if it does not include it it should](https://youtu.be/uOic5TLcoGE?t=4221) [add it let's see what](https://youtu.be/uOic5TLcoGE?t=4228) [happens okay so that's very good so if](https://youtu.be/uOic5TLcoGE?t=4236) [the object doesn't have custom data it](https://youtu.be/uOic5TLcoGE?t=4240) [creates](https://youtu.be/uOic5TLcoGE?t=4242) [it if it's not an array groups is not an](https://youtu.be/uOic5TLcoGE?t=4244) [array then it will create an empty](https://youtu.be/uOic5TLcoGE?t=4249) [array then it will check if the group is](https://youtu.be/uOic5TLcoGE?t=4252) [there if the group is not there then it](https://youtu.be/uOic5TLcoGE?t=4256) [will add the group if the group is there](https://youtu.be/uOic5TLcoGE?t=4259) [then it's going to remove that group](https://youtu.be/uOic5TLcoGE?t=4262) [this is excellent this is exactly the](https://youtu.be/uOic5TLcoGE?t=4265) [function we needed so I'm going to copy](https://youtu.be/uOic5TLcoGE?t=4267) [this function](https://youtu.be/uOic5TLcoGE?t=4270) [over and I'm just going to add it here](https://youtu.be/uOic5TLcoGE?t=4271) [not like](https://youtu.be/uOic5TLcoGE?t=4274) [that but like this so this is this is](https://youtu.be/uOic5TLcoGE?t=4275) [exactly what we needed and so the way we](https://youtu.be/uOic5TLcoGE?t=4281) [need to and then I actually don't need](https://youtu.be/uOic5TLcoGE?t=4283) [the has group either it's going to take](https://youtu.be/uOic5TLcoGE?t=4285) [care of this for me so all I want to do](https://youtu.be/uOic5TLcoGE?t=4288) [is toggle](https://youtu.be/uOic5TLcoGE?t=4291) [group and I want to push the element and](https://youtu.be/uOic5TLcoGE?t=4295) [group that's all I need to](https://youtu.be/uOic5TLcoGE?t=4301) [do and with this I'm and actually we can](https://youtu.be/uOic5TLcoGE?t=4303) [even just make it shorter like that and](https://youtu.be/uOic5TLcoGE?t=4310) [and this we don't](https://youtu.be/uOic5TLcoGE?t=4315) [need this is all we](https://youtu.be/uOic5TLcoGE?t=4321) [need question yeah the get](https://youtu.be/uOic5TLcoGE?t=4325) [element uh does this returns all](https://youtu.be/uOic5TLcoGE?t=4330) [elements in the view or in the scene](https://youtu.be/uOic5TLcoGE?t=4333) [right this get not only the selected](https://youtu.be/uOic5TLcoGE?t=4336) [ones no so so get](https://youtu.be/uOic5TLcoGE?t=4339) [elements is in exol dra automate so this](https://youtu.be/uOic5TLcoGE?t=4342) [is what I explained](https://youtu.be/uOic5TLcoGE?t=4345) [that the workbench basically yeah so the](https://youtu.be/uOic5TLcoGE?t=4348) [the the logic for exol automate is you](https://youtu.be/uOic5TLcoGE?t=4351) [have your scene that's the car and you](https://youtu.be/uOic5TLcoGE?t=4353) [have the workbench that's excal your](https://youtu.be/uOic5TLcoGE?t=4356) [automate and you always need to take the](https://youtu.be/uOic5TLcoGE?t=4358) [pieces that you work on place it on the](https://youtu.be/uOic5TLcoGE?t=4360) [workbench do your magic and then place](https://youtu.be/uOic5TLcoGE?t=4363) [it back and this is your fun and by the](https://youtu.be/uOic5TLcoGE?t=4366) [way you can create new elements in the](https://youtu.be/uOic5TLcoGE?t=4370) [workbench and uh add it to the view but](https://youtu.be/uOic5TLcoGE?t=4372) [it's always this mindset of I need to](https://youtu.be/uOic5TLcoGE?t=4376) [move it to the workbench I do my stuff](https://youtu.be/uOic5TLcoGE?t=4378) [and I need to move it back I think this](https://youtu.be/uOic5TLcoGE?t=4381) [is going to actually work so let's just](https://youtu.be/uOic5TLcoGE?t=4383) [see let's remove this](https://youtu.be/uOic5TLcoGE?t=4385) [so](https://youtu.be/uOic5TLcoGE?t=4390) [um not here but](https://youtu.be/uOic5TLcoGE?t=4392) [here toggle add to](https://youtu.be/uOic5TLcoGE?t=4395) [group maybe it should give me some](https://youtu.be/uOic5TLcoGE?t=4401) [feedback of how many elements were added](https://youtu.be/uOic5TLcoGE?t=4403) [but EA get view selected](https://youtu.be/uOic5TLcoGE?t=4406) [element it should no longer have the](https://youtu.be/uOic5TLcoGE?t=4410) [group and array is empty so you can see](https://youtu.be/uOic5TLcoGE?t=4415) [that it doesn't have the group because](https://youtu.be/uOic5TLcoGE?t=4418) [the array is zero length and if I run it](https://youtu.be/uOic5TLcoGE?t=4420) [again toggle add to group](https://youtu.be/uOic5TLcoGE?t=4425) [then now it should have](https://youtu.be/uOic5TLcoGE?t=4430) [the value and it has one element it](https://youtu.be/uOic5TLcoGE?t=4435) [added the group so this way I can](https://youtu.be/uOic5TLcoGE?t=4438) [now](https://youtu.be/uOic5TLcoGE?t=4442) [um](https://youtu.be/uOic5TLcoGE?t=4445) [maybe on group this and I can oh I need](https://youtu.be/uOic5TLcoGE?t=4446) [to control shift one I need to unlock](https://youtu.be/uOic5TLcoGE?t=4453) [everything yes so I can select these](https://youtu.be/uOic5TLcoGE?t=4457) [elements and maybe let's add this toggle](https://youtu.be/uOic5TLcoGE?t=4461) [add to group to a hotkey as well so I'm](https://youtu.be/uOic5TLcoGE?t=4464) [going to come to hot](https://youtu.be/uOic5TLcoGE?t=4466) [Keys](https://youtu.be/uOic5TLcoGE?t=4469) [toggle add to group and this is going to](https://youtu.be/uOic5TLcoGE?t=4470) [be oh boy control Windows one that was](https://youtu.be/uOic5TLcoGE?t=4475) [not a good choice it open something on](https://youtu.be/uOic5TLcoGE?t=4480) [windows so shift Windows one that's also](https://youtu.be/uOic5TLcoGE?t=4483) [not a good choice so I think the Windows](https://youtu.be/uOic5TLcoGE?t=4486) [key is not good so so shift alt one](https://youtu.be/uOic5TLcoGE?t=4489) [that's good so shift shift alt one is](https://youtu.be/uOic5TLcoGE?t=4493) [going to add elements to the group and](https://youtu.be/uOic5TLcoGE?t=4497) [remove](https://youtu.be/uOic5TLcoGE?t=4500) [them](https://youtu.be/uOic5TLcoGE?t=4501) [and and control shift one is going to um](https://youtu.be/uOic5TLcoGE?t=4505) [unlock and lock so I have these elements](https://youtu.be/uOic5TLcoGE?t=4511) [here so I'm going to add](https://youtu.be/uOic5TLcoGE?t=4514) [this to the group and now I'm going to](https://youtu.be/uOic5TLcoGE?t=4517) [lock and hopefully these elements are](https://youtu.be/uOic5TLcoGE?t=4521) [selectable and nothing else is](https://youtu.be/uOic5TLcoGE?t=4527) [selectable yeah now maybe to close off](https://youtu.be/uOic5TLcoGE?t=4531) [we can so I do want to have spend some](https://youtu.be/uOic5TLcoGE?t=4536) [time just getting some feedback if this](https://youtu.be/uOic5TLcoGE?t=4540) [is at all meaningful and works for you](https://youtu.be/uOic5TLcoGE?t=4543) [but before we do that I thought let's](https://youtu.be/uOic5TLcoGE?t=4546) [add a little bit of feedback of What's](https://youtu.be/uOic5TLcoGE?t=4550) [Happen happening so first of all](https://youtu.be/uOic5TLcoGE?t=4554) [um I'm going](https://youtu.be/uOic5TLcoGE?t=4559) [to change this](https://youtu.be/uOic5TLcoGE?t=4563) [and](https://youtu.be/uOic5TLcoGE?t=4566) [return](https://youtu.be/uOic5TLcoGE?t=4567) [true and](https://youtu.be/uOic5TLcoGE?t=4570) [[Music]](https://youtu.be/uOic5TLcoGE?t=4572) [return false so what I'm doing is I'm](https://youtu.be/uOic5TLcoGE?t=4573) [going to](https://youtu.be/uOic5TLcoGE?t=4577) [be](https://youtu.be/uOic5TLcoGE?t=4579) [um returning through if I added an](https://youtu.be/uOic5TLcoGE?t=4581) [element to the group and returning false](https://youtu.be/uOic5TLcoGE?t=4584) [if I didn't here I'm going to create](https://youtu.be/uOic5TLcoGE?t=4586) [this value of let um](https://youtu.be/uOic5TLcoGE?t=4590) [added](https://youtu.be/uOic5TLcoGE?t=4595) [and](https://youtu.be/uOic5TLcoGE?t=4597) [deleted equal one I'm not sure if I can](https://youtu.be/uOic5TLcoGE?t=4599) [do](https://youtu.be/uOic5TLcoGE?t=4601) [this but let's see what happens if I do](https://youtu.be/uOic5TLcoGE?t=4603) [this you can do this yes so um](https://youtu.be/uOic5TLcoGE?t=4608) [and here I'm going to do the](https://youtu.be/uOic5TLcoGE?t=4615) [following](https://youtu.be/uOic5TLcoGE?t=4619) [that I'm making this into a bit of the](https://youtu.be/uOic5TLcoGE?t=4622) [function so](https://youtu.be/uOic5TLcoGE?t=4626) [result](https://youtu.be/uOic5TLcoGE?t=4629) [if if this is](https://youtu.be/uOic5TLcoGE?t=4632) [true I we can here that this is not good](https://youtu.be/uOic5TLcoGE?t=4637) [practice but we can be ugly here so if](https://youtu.be/uOic5TLcoGE?t=4640) [true then we added](https://youtu.be/uOic5TLcoGE?t=4643) [something else we](https://youtu.be/uOic5TLcoGE?t=4646) [deleted something right so that's all we](https://youtu.be/uOic5TLcoGE?t=4649) [need to do and here at the end I can](https://youtu.be/uOic5TLcoGE?t=4654) [post a message that](https://youtu.be/uOic5TLcoGE?t=4657) [new](https://youtu.be/uOic5TLcoGE?t=4661) [notice and we](https://youtu.be/uOic5TLcoGE?t=4664) [can](https://youtu.be/uOic5TLcoGE?t=4666) [write so this is the the back tick I](https://youtu.be/uOic5TLcoGE?t=4668) [like the back tick it it's a more](https://youtu.be/uOic5TLcoGE?t=4672) [concise](https://youtu.be/uOic5TLcoGE?t=4674) [way of writing a](https://youtu.be/uOic5TLcoGE?t=4675) [string um](https://youtu.be/uOic5TLcoGE?t=4677) [added](https://youtu.be/uOic5TLcoGE?t=4682) [added elements](https://youtu.be/uOic5TLcoGE?t=4686) [and](https://youtu.be/uOic5TLcoGE?t=4689) [removed](https://youtu.be/uOic5TLcoGE?t=4692) [deleted elements](https://youtu.be/uOic5TLcoGE?t=4695) [from](https://youtu.be/uOic5TLcoGE?t=4701) [um group I think this is now a proper](https://youtu.be/uOic5TLcoGE?t=4703) [message](https://youtu.be/uOic5TLcoGE?t=4707) [here and probably the other message we](https://youtu.be/uOic5TLcoGE?t=4708) [need here is we should actually add the](https://youtu.be/uOic5TLcoGE?t=4712) [message here that new](https://youtu.be/uOic5TLcoGE?t=4715) [notice and in this case is locked](https://youtu.be/uOic5TLcoGE?t=4722) [depending on the value of is logged I'm](https://youtu.be/uOic5TLcoGE?t=4727) [going](https://youtu.be/uOic5TLcoGE?t=4730) [to uh so if it's logged and I'm](https://youtu.be/uOic5TLcoGE?t=4731) [unlocking so so if it's lock](https://youtu.be/uOic5TLcoGE?t=4733) [unlocked](https://youtu.be/uOic5TLcoGE?t=4737) [elements](https://youtu.be/uOic5TLcoGE?t=4742) [or](https://youtu.be/uOic5TLcoGE?t=4744) [locked](https://youtu.be/uOic5TLcoGE?t=4745) [elements like](https://youtu.be/uOic5TLcoGE?t=4748) [this I think that's that's enough](https://youtu.be/uOic5TLcoGE?t=4751) [feedback um right so if it was locked](https://youtu.be/uOic5TLcoGE?t=4754) [then I unlogged it if it so this is the](https://youtu.be/uOic5TLcoGE?t=4758) [short form for the if else the question](https://youtu.be/uOic5TLcoGE?t=4760) [so here's the condition question mark is](https://youtu.be/uOic5TLcoGE?t=4764) [the if and this is if true column if](https://youtu.be/uOic5TLcoGE?t=4768) [false um so let's look at what happen so](https://youtu.be/uOic5TLcoGE?t=4773) [first of](https://youtu.be/uOic5TLcoGE?t=4777) [all I unlocked elements so that](https://youtu.be/uOic5TLcoGE?t=4778) [everything is now all loged that's great](https://youtu.be/uOic5TLcoGE?t=4782) [I can now loog elements now only group a](https://youtu.be/uOic5TLcoGE?t=4785) [can be](https://youtu.be/uOic5TLcoGE?t=4789) [selected and then let's Maybe remove](https://youtu.be/uOic5TLcoGE?t=4791) [sample text and instead add these two](https://youtu.be/uOic5TLcoGE?t=4795) [lines because uh this is going to toggle](https://youtu.be/uOic5TLcoGE?t=4799) [so here the response should be removed](https://youtu.be/uOic5TLcoGE?t=4802) [one added two but I got an error token](https://youtu.be/uOic5TLcoGE?t=4806) [else okay where's](https://youtu.be/uOic5TLcoGE?t=4810) [the this doesn't like this approach why](https://youtu.be/uOic5TLcoGE?t=4814) [I have no idea but so we are going to](https://youtu.be/uOic5TLcoGE?t=4817) [probably I need this](https://youtu.be/uOic5TLcoGE?t=4823) [I don't have the colum there I think](https://youtu.be/uOic5TLcoGE?t=4826) [that's the issue let's just take I'm not](https://youtu.be/uOic5TLcoGE?t=4828) [sure but we we'll see](https://youtu.be/uOic5TLcoGE?t=4832) [yes added didn't add and remove two](https://youtu.be/uOic5TLcoGE?t=4835) [elements that's interesting so there's](https://youtu.be/uOic5TLcoGE?t=4839) [still](https://youtu.be/uOic5TLcoGE?t=4842) [some that's interesting but let's let's](https://youtu.be/uOic5TLcoGE?t=4845) [we will we will uh so log](https://youtu.be/uOic5TLcoGE?t=4849) [elements okay so so there is an issue](https://youtu.be/uOic5TLcoGE?t=4852) [here return](https://youtu.be/uOic5TLcoGE?t=4859) [false we can do that but I'm not yet](https://youtu.be/uOic5TLcoGE?t=4868) [understanding what's going on here let's](https://youtu.be/uOic5TLcoGE?t=4873) [make this but this is not the issue but](https://youtu.be/uOic5TLcoGE?t=4875) [uh](https://youtu.be/uOic5TLcoGE?t=4878) [looks](https://youtu.be/uOic5TLcoGE?t=4884) [nicer why was it](https://youtu.be/uOic5TLcoGE?t=4895) [none am I misspelling](https://youtu.be/uOic5TLcoGE?t=4899) [something oh by the way it starts with](https://youtu.be/uOic5TLcoGE?t=4908) [zero uh](https://youtu.be/uOic5TLcoGE?t=4913) [um I wonder I'm just going to go the](https://youtu.be/uOic5TLcoGE?t=4921) [oldfashioned way but I don't think this](https://youtu.be/uOic5TLcoGE?t=4924) [is the](https://youtu.be/uOic5TLcoGE?t=4926) [issue let's try](https://youtu.be/uOic5TLcoGE?t=4931) [again so I'm going to](https://youtu.be/uOic5TLcoGE?t=4934) [unlock I'm going to take these elements](https://youtu.be/uOic5TLcoGE?t=4938) [here](https://youtu.be/uOic5TLcoGE?t=4941) [and added one element remove two now it](https://youtu.be/uOic5TLcoGE?t=4943) [seems](https://youtu.be/uOic5TLcoGE?t=4946) [to to work and then I can](https://youtu.be/uOic5TLcoGE?t=4948) [lock and every yeah so I think I think](https://youtu.be/uOic5TLcoGE?t=4951) [we have a script so let me pause here](https://youtu.be/uOic5TLcoGE?t=4954) [first let's see](https://youtu.be/uOic5TLcoGE?t=4957) [if if you have any questions in terms of](https://youtu.be/uOic5TLcoGE?t=4958) [the script we created I think actually](https://youtu.be/uOic5TLcoGE?t=4962) [this is an extremely powerful script so](https://youtu.be/uOic5TLcoGE?t=4965) [I'm going to play with this because I](https://youtu.be/uOic5TLcoGE?t=4968) [can I can definitely see a power usage](https://youtu.be/uOic5TLcoGE?t=4970) [here that's going to help my workflow](https://youtu.be/uOic5TLcoGE?t=4973) [but let's see if you have questions on](https://youtu.be/uOic5TLcoGE?t=4976) [the script and then let's have a bit of](https://youtu.be/uOic5TLcoGE?t=4978) [a feedback so is this meaningful can you](https://youtu.be/uOic5TLcoGE?t=4979) [see this as an ongoing thing as uh what](https://youtu.be/uOic5TLcoGE?t=4982) [we could call technov Visual PKM how](https://youtu.be/uOic5TLcoGE?t=4986) [would you improve on this any feedback](https://youtu.be/uOic5TLcoGE?t=4989) [but let's first look at the the script](https://youtu.be/uOic5TLcoGE?t=4992) [itself so](https://youtu.be/uOic5TLcoGE?t=4995) [any anything that would help clarify](https://youtu.be/uOic5TLcoGE?t=4997) [what has what we've just done and how we](https://youtu.be/uOic5TLcoGE?t=5001) [did it](https://youtu.be/uOic5TLcoGE?t=5003) [I mean from my standpoint I'm very much](https://youtu.be/uOic5TLcoGE?t=5005) [still learning a lot I'm very much a](https://youtu.be/uOic5TLcoGE?t=5008) [beginner so um but I'm getting a lot out](https://youtu.be/uOic5TLcoGE?t=5010) [of watching you do it um so I'm sure](https://youtu.be/uOic5TLcoGE?t=5013) [there's more experienced people might](https://youtu.be/uOic5TLcoGE?t=5016) [have](https://youtu.be/uOic5TLcoGE?t=5018) [more specific feedback but I'm just](https://youtu.be/uOic5TLcoGE?t=5019) [enjoying uh you know as I'm learning as](https://youtu.be/uOic5TLcoGE?t=5022) [a very beginner about scripting so](https://youtu.be/uOic5TLcoGE?t=5025) [thanks that's helpful to](https://youtu.be/uOic5TLcoGE?t=5028) [watch yeah and also I guess having a](https://youtu.be/uOic5TLcoGE?t=5029) [recording of This is is also also pretty](https://youtu.be/uOic5TLcoGE?t=5033) [helpful but yeah Max I see you came off](https://youtu.be/uOic5TLcoGE?t=5036) [mute do this automation thing](https://youtu.be/uOic5TLcoGE?t=5046) [and and I am very very interested in](https://youtu.be/uOic5TLcoGE?t=5049) [having also a copy of these um scripts](https://youtu.be/uOic5TLcoGE?t=5055) [here to exercise a little](https://youtu.be/uOic5TLcoGE?t=5059) [bit and if you can put it somewhere](https://youtu.be/uOic5TLcoGE?t=5062) [would be fine would be great so that we](https://youtu.be/uOic5TLcoGE?t=5065) [can I](https://youtu.be/uOic5TLcoGE?t=5069) [can um try it out and experiment a](https://youtu.be/uOic5TLcoGE?t=5071) [little bit by my](https://youtu.be/uOic5TLcoGE?t=5076) [own yeah absolutely so so I am going to](https://youtu.be/uOic5TLcoGE?t=5078) [share this and if I think about techn](https://youtu.be/uOic5TLcoGE?t=5081) [visual PKM then the way I imagine it](https://youtu.be/uOic5TLcoGE?t=5085) [work is we would have a shared work](https://youtu.be/uOic5TLcoGE?t=5089) [place where each of the videos and](https://youtu.be/uOic5TLcoGE?t=5094) [scripts would go for now uh I consider](https://youtu.be/uOic5TLcoGE?t=5097) [this video and session rather the on the](https://youtu.be/uOic5TLcoGE?t=5100) [success side than the the Flop so I I am](https://youtu.be/uOic5TLcoGE?t=5104) [going to publish this video and I'm](https://youtu.be/uOic5TLcoGE?t=5108) [going to uh also include the links in](https://youtu.be/uOic5TLcoGE?t=5110) [the video but uh right after this](https://youtu.be/uOic5TLcoGE?t=5113) [session I'm going to drop it in our](https://youtu.be/uOic5TLcoGE?t=5116) [Discord so you can actually find it and](https://youtu.be/uOic5TLcoGE?t=5118) [play with it if you want immediately but](https://youtu.be/uOic5TLcoGE?t=5121) [probably later today or tomorrow I'm](https://youtu.be/uOic5TLcoGE?t=5124) [going to push this video to my channel](https://youtu.be/uOic5TLcoGE?t=5126) [so there you can dive back in to see](https://youtu.be/uOic5TLcoGE?t=5129) [some details and I'll also have a link](https://youtu.be/uOic5TLcoGE?t=5133) [to GitHub where you can find the scripts](https://youtu.be/uOic5TLcoGE?t=5136) [that we](https://youtu.be/uOic5TLcoGE?t=5139) [created good other questions or comments](https://youtu.be/uOic5TLcoGE?t=5145) [anything well first again on the](https://youtu.be/uOic5TLcoGE?t=5149) [technical bit if there's anything](https://youtu.be/uOic5TLcoGE?t=5151) [for me technical technically it's pretty](https://youtu.be/uOic5TLcoGE?t=5156) [clear so I'm not a JavaScript developer](https://youtu.be/uOic5TLcoGE?t=5159) [but I have a developing background so um](https://youtu.be/uOic5TLcoGE?t=5162) [that was easy to follow uh cool start to](https://youtu.be/uOic5TLcoGE?t=5166) [get into into more scripting with excal](https://youtu.be/uOic5TLcoGE?t=5168) [timate um and I I I would love uh the](https://youtu.be/uOic5TLcoGE?t=5172) [idea of having having such sessions I](https://youtu.be/uOic5TLcoGE?t=5175) [think the I could imagine the](https://youtu.be/uOic5TLcoGE?t=5179) [interesting part is how to get how to](https://youtu.be/uOic5TLcoGE?t=5181) [get uh how to achieve a a common entry](https://youtu.be/uOic5TLcoGE?t=5184) [level of some sort because I would](https://youtu.be/uOic5TLcoGE?t=5188) [assume it's easy](https://youtu.be/uOic5TLcoGE?t=5191) [to to to go very deep into some stuff](https://youtu.be/uOic5TLcoGE?t=5194) [and then if you don't have some](https://youtu.be/uOic5TLcoGE?t=5198) [Foundation that's hard to follow or but](https://youtu.be/uOic5TLcoGE?t=5201) [I might be mistaken on](https://youtu.be/uOic5TLcoGE?t=5203) [that yeah so so that's where](https://youtu.be/uOic5TLcoGE?t=5205) [I'm uh I'm with you so that that's my](https://youtu.be/uOic5TLcoGE?t=5209) [fear as well that we can](https://youtu.be/uOic5TLcoGE?t=5212) [very quickly dive very deep but maybe](https://youtu.be/uOic5TLcoGE?t=5214) [the question to Max and MAV and others](https://youtu.be/uOic5TLcoGE?t=5218) [as well my other assumption is if we](https://youtu.be/uOic5TLcoGE?t=5222) [have a repeating cycle of these sessions](https://youtu.be/uOic5TLcoGE?t=5226) [and we always pick up a topic that's](https://youtu.be/uOic5TLcoGE?t=5230) [interesting maybe next time we could](https://youtu.be/uOic5TLcoGE?t=5232) [talk about the angles as uh and how you](https://youtu.be/uOic5TLcoGE?t=5233) [would calculate that I think it's](https://youtu.be/uOic5TLcoGE?t=5238) [actually pretty simple with a bit of](https://youtu.be/uOic5TLcoGE?t=5241) [help from GPT I I think it is fully](https://youtu.be/uOic5TLcoGE?t=5243) [doable um but my my hope would be that](https://youtu.be/uOic5TLcoGE?t=5249) [through these cycles of going through](https://youtu.be/uOic5TLcoGE?t=5253) [these](https://youtu.be/uOic5TLcoGE?t=5256) [scripts you can also build up a basic](https://youtu.be/uOic5TLcoGE?t=5256) [understanding and of course there's](https://youtu.be/uOic5TLcoGE?t=5260) [always the chance](https://youtu.be/uOic5TLcoGE?t=5262) [to to ask and then this can become uh](https://youtu.be/uOic5TLcoGE?t=5263) [yeah](https://youtu.be/uOic5TLcoGE?t=5268) [a kind of a workflow](https://youtu.be/uOic5TLcoGE?t=5270) [yeah I think I also found this quite](https://youtu.be/uOic5TLcoGE?t=5275) [helpful I think I've done like a little](https://youtu.be/uOic5TLcoGE?t=5277) [bit of data view scripting I haven't](https://youtu.be/uOic5TLcoGE?t=5280) [really used um I mean I've used excal in](https://youtu.be/uOic5TLcoGE?t=5282) [a very um um I I guess in a very low](https://youtu.be/uOic5TLcoGE?t=5285) [Tech fashion like just really as a UI](https://youtu.be/uOic5TLcoGE?t=5289) [and I haven't I've taken advantage of](https://youtu.be/uOic5TLcoGE?t=5292) [some of the scripts that already there](https://youtu.be/uOic5TLcoGE?t=5294) [but I haven't tried to make any of my](https://youtu.be/uOic5TLcoGE?t=5296) [own so I've always been curious about](https://youtu.be/uOic5TLcoGE?t=5298) [that so I think this this would be](https://youtu.be/uOic5TLcoGE?t=5301) [really um really nice especially that](https://youtu.be/uOic5TLcoGE?t=5303) [it's recorded and you can go back to](https://youtu.be/uOic5TLcoGE?t=5305) [it um again I'm not AEL but uh between](https://youtu.be/uOic5TLcoGE?t=5310) [Chad GPD and co-pilot I've managed to](https://youtu.be/uOic5TLcoGE?t=5314) [somehow uh get what I want most of the](https://youtu.be/uOic5TLcoGE?t=5317) [time for for data View and and other I](https://youtu.be/uOic5TLcoGE?t=5320) [mean I've even something that I couldn't](https://youtu.be/uOic5TLcoGE?t=5322) [imagine doing a couple of years ago I've](https://youtu.be/uOic5TLcoGE?t=5324) [been able to write my own little](https://youtu.be/uOic5TLcoGE?t=5326) [obsidian plugins for very Niche um](https://youtu.be/uOic5TLcoGE?t=5327) [requirements that I have and um it's](https://youtu.be/uOic5TLcoGE?t=5331) [been fun playing around with that so so](https://youtu.be/uOic5TLcoGE?t=5334) [I'm I'm very intrigued and sort of](https://youtu.be/uOic5TLcoGE?t=5336) [generally interested I've been using](https://youtu.be/uOic5TLcoGE?t=5338) [obsidian canvas a little bit for getting](https://youtu.be/uOic5TLcoGE?t=5341) [a bunch of stuff done I think it be um](https://youtu.be/uOic5TLcoGE?t=5344) [maybe offline I could I could share what](https://youtu.be/uOic5TLcoGE?t=5347) [I'm doing with canvas and how I find it](https://youtu.be/uOic5TLcoGE?t=5350) [limiting and maybe if that's easier to](https://youtu.be/uOic5TLcoGE?t=5352) [do an escalator that would be that would](https://youtu.be/uOic5TLcoGE?t=5354) [be very nice for me for example yeah off](https://youtu.be/uOic5TLcoGE?t=5356) [the cuff I can say it's going to be](https://youtu.be/uOic5TLcoGE?t=5359) [easier in exid ra uh](https://youtu.be/uOic5TLcoGE?t=5361) [right I can imagine](https://youtu.be/uOic5TLcoGE?t=5364) [yeah I have I have](https://youtu.be/uOic5TLcoGE?t=5367) [no uh no doubts in that obsidian canvas](https://youtu.be/uOic5TLcoGE?t=5370) [is extremely limited I mean I can I can](https://youtu.be/uOic5TLcoGE?t=5375) [see how some people uh enjoy limited uh](https://youtu.be/uOic5TLcoGE?t=5378) [options because it simplifies stuff but](https://youtu.be/uOic5TLcoGE?t=5383) [if you want to get anything done I think](https://youtu.be/uOic5TLcoGE?t=5385) [you're better](https://youtu.be/uOic5TLcoGE?t=5388) [off yeah yeah I think it's the canvas](https://youtu.be/uOic5TLcoGE?t=5389) [interfaces like like a little less](https://youtu.be/uOic5TLcoGE?t=5393) [intimidating and um um it's yeah like](https://youtu.be/uOic5TLcoGE?t=5394) [you said I think is just a a little](https://youtu.be/uOic5TLcoGE?t=5398) [little more user friendly to get started](https://youtu.be/uOic5TLcoGE?t=5400) [and to to begin with I think I had](https://youtu.be/uOic5TLcoGE?t=5402) [simple requirements but then I realized](https://youtu.be/uOic5TLcoGE?t=5405) [that okay maybe I want to align these](https://youtu.be/uOic5TLcoGE?t=5407) [things together in a certain like even](https://youtu.be/uOic5TLcoGE?t=5409) [very simple things You' realize that](https://youtu.be/uOic5TLcoGE?t=5411) [it's a fair amount of manual work and I](https://youtu.be/uOic5TLcoGE?t=5414) [found myself thinking that maybe if I](https://youtu.be/uOic5TLcoGE?t=5416) [had started this exercise and ex calator](https://youtu.be/uOic5TLcoGE?t=5418) [uh that automation would have would have](https://youtu.be/uOic5TLcoGE?t=5421) [served me well at the later stage of](https://youtu.be/uOic5TLcoGE?t=5423) [that exercise but at least I now have a](https://youtu.be/uOic5TLcoGE?t=5425) [sense of what I want and that I think](https://youtu.be/uOic5TLcoGE?t=5428) [it's easier to come into escalator with](https://youtu.be/uOic5TLcoGE?t=5430) [a concrete set of goals I guess so yeah](https://youtu.be/uOic5TLcoGE?t=5432) [I'm happy toct my words and share in the](https://youtu.be/uOic5TLcoGE?t=5436) [Discord uh group I guess uh ideas for](https://youtu.be/uOic5TLcoGE?t=5440) [things that may be useful to script out](https://youtu.be/uOic5TLcoGE?t=5443) [I guess awesome and we have a channel](https://youtu.be/uOic5TLcoGE?t=5446) [for uh the](https://youtu.be/uOic5TLcoGE?t=5448) [excit uh what is it the tech no visual](https://youtu.be/uOic5TLcoGE?t=5451) [PKM in our Discord so that that's a good](https://youtu.be/uOic5TLcoGE?t=5454) [place to to start I I will spam there if](https://youtu.be/uOic5TLcoGE?t=5457) [um yeah feel free to ignore it if it](https://youtu.be/uOic5TLcoGE?t=5461) [doesn't make any sense but just in case](https://youtu.be/uOic5TLcoGE?t=5463) [uh it's it's a prompt that others find](https://youtu.be/uOic5TLcoGE?t=5466) [useful then then maybe we could pick it](https://youtu.be/uOic5TLcoGE?t=5468) [up for a potential future session but](https://youtu.be/uOic5TLcoGE?t=5470) [thank you so much for today yeah awesome](https://youtu.be/uOic5TLcoGE?t=5473) [okay any other](https://youtu.be/uOic5TLcoGE?t=5476) [questions or comments uh hello do you](https://youtu.be/uOic5TLcoGE?t=5478) [hear me yes uh thanks first of of all](https://youtu.be/uOic5TLcoGE?t=5481) [for a great presentation it was easy to](https://youtu.be/uOic5TLcoGE?t=5484) [follow uh I would um I would like to ask](https://youtu.be/uOic5TLcoGE?t=5487) [how you would like to organize it could](https://youtu.be/uOic5TLcoGE?t=5490) [we have like uh um another git](https://youtu.be/uOic5TLcoGE?t=5492) [repository where we could contribute on](https://youtu.be/uOic5TLcoGE?t=5495) [and uh test things out and discuss maybe](https://youtu.be/uOic5TLcoGE?t=5498) [in the future sessions that would be](https://youtu.be/uOic5TLcoGE?t=5501) [great yeah so so there are many](https://youtu.be/uOic5TLcoGE?t=5505) [questions here so my my basic idea is](https://youtu.be/uOic5TLcoGE?t=5508) [this would be sort of a club with a fee](https://youtu.be/uOic5TLcoGE?t=5512) [so you would have some sort of a monthly](https://youtu.be/uOic5TLcoGE?t=5516) [or quarterly or whatever Club fee and](https://youtu.be/uOic5TLcoGE?t=5519) [then they would have regular](https://youtu.be/uOic5TLcoGE?t=5524) [sessions uh in terms of prioritizing](https://youtu.be/uOic5TLcoGE?t=5526) [what we talk about now it was easy](https://youtu.be/uOic5TLcoGE?t=5530) [because I had a chat with nadav and we](https://youtu.be/uOic5TLcoGE?t=5532) [had a single idea to work on so there](https://youtu.be/uOic5TLcoGE?t=5534) [wasn't much um room for competition of](https://youtu.be/uOic5TLcoGE?t=5536) [ideas um but we would need some sort of](https://youtu.be/uOic5TLcoGE?t=5540) [a voting and backlog approach as well as](https://youtu.be/uOic5TLcoGE?t=5544) [uh a](https://youtu.be/uOic5TLcoGE?t=5548) [repository um I I would want](https://youtu.be/uOic5TLcoGE?t=5549) [to indeed keep this to some](https://youtu.be/uOic5TLcoGE?t=5553) [extent](https://youtu.be/uOic5TLcoGE?t=5556) [um exclusive or so this definitely](https://youtu.be/uOic5TLcoGE?t=5558) [requires uh time and effort Etc so I I](https://youtu.be/uOic5TLcoGE?t=5562) [wouldn't want to open this up so in this](https://youtu.be/uOic5TLcoGE?t=5566) [dis respect what goes on git or how we](https://youtu.be/uOic5TLcoGE?t=5568) [manage it in uh maybe in Podium or podia](https://youtu.be/uOic5TLcoGE?t=5572) [uh we can create or maybe on Discord](https://youtu.be/uOic5TLcoGE?t=5577) [that that those are the practical](https://youtu.be/uOic5TLcoGE?t=5579) [details that we need to work out but](https://youtu.be/uOic5TLcoGE?t=5581) [first of all I wanted to have this pilot](https://youtu.be/uOic5TLcoGE?t=5583) [run of how such a session would look](https://youtu.be/uOic5TLcoGE?t=5585) [like but yeah and by the way any ideas](https://youtu.be/uOic5TLcoGE?t=5588) [absolutely welcome so please in Discord](https://youtu.be/uOic5TLcoGE?t=5592) [share your thoughts and let's have a](https://youtu.be/uOic5TLcoGE?t=5595) [discussion how this could work uh what](https://youtu.be/uOic5TLcoGE?t=5598) [would work for you and how you would](https://youtu.be/uOic5TLcoGE?t=5600) [organize it yeah sure sounds great thank](https://youtu.be/uOic5TLcoGE?t=5602) [you okay so then if there's nothing else](https://youtu.be/uOic5TLcoGE?t=5609) [then I think we'll close here it was a](https://youtu.be/uOic5TLcoGE?t=5613) [pleasure I enjoyed it it seems that you](https://youtu.be/uOic5TLcoGE?t=5615) [enjoyed it as well so I think we can](https://youtu.be/uOic5TLcoGE?t=5618) [call that a success and uh yeah I'll](https://youtu.be/uOic5TLcoGE?t=5620) [keep you posted on the next](https://youtu.be/uOic5TLcoGE?t=5623) [steps great thanks thank you byebye](https://youtu.be/uOic5TLcoGE?t=5625) [byebye thank you thank you](https://youtu.be/uOic5TLcoGE?t=5631) [byee thank you bye](https://youtu.be/uOic5TLcoGE?t=5634)