The next item of business is statement by Graeme Dey on update on veteran strategy. The minister will take questions at the end of his statement, so there should be no interventions or interruptions. I call on Graeme Dey for 10 minutes, please minister. Last November, I informed the Parliament of the launch of the strategy for our veterans. The strategy seeks to ensure that the whole of the UK is meeting its current and future commitments between veterans to 2028 and beyond. The Scottish Government engaged closely with the other Governments of these islands during the drafting of the strategy, enabling it to be owned jointly by the respective Administrations, an approach of course putting veterans' needs before any political difference and one in keeping with that taken here in this Parliament. The launch raised the profile of veterans issues and provided an opportunity for the Scottish Government to highlight the priority that we place on promoting veterans and their families as assets to our society and to providing effective support to those veterans who require it. One of my priorities since becoming veterans minister last year has been to seek to reinforce the positive narrative about veterans and to dispel myths around the scale of their needs. Although a small percentage will require additional and sometimes on-going support when they weave the forces, the vast majority of service leavers transition to civilian life successfully bringing their skills and attributes to bear both in the jobs that they have gone through and enriching society more generally. Members subsequently debated the strategy and support for veterans in December, and I was struck by both the cross-party consensus and the constructive input from colleagues from all sides of the chamber. I am grateful to members across this chamber for continuing that productive approach as we have taken the strategy forward. Today I would therefore like to update Parliament on the work that has been undertaken in Scotland since that launch. In parallel with the UK Government's public consultation on the strategy, which concluded in February, in Scotland we embarked on an extensive programme of face-to-face engagement with veterans stakeholders. Building on work already carried out by the Scottish Veterans Commissioner across some of the strategy's themes. This saw us talk directly to around 60 different veterans groups and organisations, taking in more than 450 people, a process that proved to be extremely valuable in understanding views in Scotland about how veterans community is supported. I was keen to leave no stone unturned during the consultation, and the breadth of our engagements ensure a wide range of opinions being heard, including charities, local authorities, health representatives, employers, universities and the forces families federations. We also met with groups of veterans themselves from Kinloss and Lossymouth in the north, down to Dumfries and Galloway and from Faswayne through to Versaith. I was particularly pleased to be able to participate personally in many of the consultation events, allowing me to learn not just what was being said, but to get a genuine sense of the emotion and strength of feeling that lay behind some of the views being expressed. The range of views that were put to me directly, whether from various veterans champions across the country, charities large and small, groups of veterans when I attended their breakfast cobs or some veterans in custody when I spoke to them when I visited HNP Coenoco, have proved invaluable in helping me to understand what people think, and veterans are rarely backward in coming forward, which has been a good thing. I believe that the consultation has been undertaken on the veteran's strategy, which provides the most comprehensive feedback that's ever been gathered on support for veterans in Scotland, and provides a firm footing on which to plan for the future. The UK Government is in the process of analysing the 4,500 responses that were received in response to the public consultation, including around 400 from Scotland, and they hope to have initial findings ready to share with us in the next few weeks. Allowing for the analysis to be completed, current plans are for the outcomes of the strategy to be announced jointly by the Governments across the UK by the end of this calendar year. Meanwhile, we have been considering the feedback that was gathered during our own consultation, and I wanted to outline today some top headlines that we will be considering further, with relevant stakeholders. We had a very constructive cross-party group last night, and I was reassured to hear that many of the points that were made were chimed with the feedback that we had during the consultation. The consultation indicates a largely positive position in Scotland in terms of how we support our veterans community. Yes, there are areas where the need for improvements has been highlighted, but often this is a tailoring approach rather than a radical rethink. Interestingly, a large amount of the feedback from the consultation was around the transition process through which service leavers are prepared for civilian life. Given the fundamental importance of a successful transition, if service personnel and their families are to adjust and thrive after life in the military, there were common views that the process needed to begin earlier, broaden the aspects of civilian life covered and have more consistent support from the military chain of command. Although the transition process is reserved, the MODR is keen to hear what veterans in Scotland have been telling us. This is something that I will be discussing with the UK Government, including the Defence Secretary, when I attend the ministerial covenant and veterans board in Whitehall next month. The feedback has also indicated a desire to simplify and improve the information and guidance that is available for veterans. There is undoubtedly a lot of excellent support available, but the range of options can be daunting for some, and we are exploring how we can make it easier for people to find the information that they need. Many of the organisations that we spoke to highlighted the need to prioritise better data on veterans in order to inform plans and expected demand. There was a universal welcoming of a question in the 2021 census that will identify those who have previously served. Although the final decision on this remains for the Parliament, I am grateful that colleagues across the chamber have indicated their support for this proposal. Many of the other areas for improvement that have been identified are already being addressed in response to previous reports by our Scottish Veterans Commissioner, whose latest work I will touch on in a moment. I have to say that the positive picture suggested by the consultation reinforces the value of the decision that was made by my predecessor Keith Brown to establish a Veterans Commissioner in Scotland, a role that remains the only such position in the UK. It also reflects well on the more general work that Keith Brown did in that role. Although we should rightly take some comfort in the initial findings of the consultation and indeed I should thank the relevant ministers and officials across the various portfolios for getting us to this position, we now need to address the serious work of making improvements where we can to ensure that support for the Veterans Community remains effective for the next 10 years and beyond. That brings me to the report that was published yesterday by the Veterans Commissioner, Charlie Wallace, who is with us in the gallery today. When the commissioner and I first met last year after we'd both taken up our posts, I was keen to discuss with him how the scrutiny function of his role could be fulfilled. I am pleased to see such an in-depth analysis of where progress has been made since the previous commissioner, Eric Fraser's 63 recommendations, was published across his four reports on transition, housing, employability and skills, health and wellbeing and where we still have more to do. Charlie Wallace's report overall paints a positive picture of both the progress made and the attitude of this Government towards supporting our Veterans and their families. I know that it is part of his work leading up to the publication of his report. Charlie had faced-to-face meetings with a number of my ministerial colleagues, and I am pleased that the report emphasises the cross-Government commitment to the Veterans Community. In terms of the recommendations themselves, I do, however, recognise that there are still a few to be implemented. Most of those sit within health, which was the subject of Eric Fraser's most recent report, and therefore it is understandable that those are less fully progressed. Of others, there is progress that we can point to. For example, we have recently established an internal network for the armed forces community within the Scottish Government. One of the aims of this group is to provide increased support for ex-service personnel who work within the Scottish Government and others that are interested in the armed forces community. It will also help to inform our approach to future recruitment, although it is the case that being a Veteran is not a protected characteristic under the Equalities Act. We hope that this move begins to address the recommendation on jobs within the Scottish Government. However, it is clear that we will need to continue to prioritise work to support veterans in the year ahead. Working closely with our stakeholders and partners, both to fully meet the challenges that are identified by the Veterans Commissioner and the consultation, and to take forward the findings from the Veterans strategy. I look forward to doing that. The minister will now take questions on the issues raised in the statement, and I will allow up to 20 minutes for that. Members who wish to ask a question, please press the request to speak buttons.  I thank the minister for advance sight of his statement. The strategy for our veterans identified employment, education and skills, as well as making a home in civilian society among its key themes. Those would, at least partly, be addressed by improving employment routes for veterans to go into emergency services and criminal drusters roles. That is also relevant in the creation of the four science parks in Helensburgh, Lossymouth, Rosyth and Edinburgh. What discussions has the Scottish Government had about those roles, and what is the progress of development with the science parks? This is obviously an issue that Maurice Corry has raised previously. The Scottish Government is prepared to explore any viable opportunities to improve post-service employment and the opportunities for military spouses to enter the workplace, where they can retain skills in the local area. Of course, such a proposal for innovation hub locating and proximity to Faslain or any other basis would require active buy-in from stakeholders, including the MOD, along with other local partners. I am aware that the Helensburgh Community Council has been working with local veterans and other community groups to develop a proposal for the creation of a co-working hub for use by the civil and service communities. At Argyll and Buter site, we would be quite happy to engage with it, but we need to see MOD buy-in. I would like to see some commitment there with a view to seeing how well we could progress with it. I think that it is important that, as well as looking to tap into the skillset of serving personnel in those locations, we also look at the skills available from the spouses. I think that that is something that we are currently missing at the moment. As for the emergency services, I agree that that is certainly an opportunity. Mark Griffin. I am grateful to the minister for the Helensburgh Community Council site for the statement. I am pleased to hear of the continued joint working to support veterans across the United Kingdom. A week after the D-Day commemorations, I want to put on record our thanks to the armed forces personnel past, present and future for serving and protecting Scotland in the UK. Can the minister say how the Government is balancing? That need to retain personnel in our armed forces, maintain personnel numbers while creating a realistic and meaningful pathways into civilian employment for veterans and, specifically, how many veterans have been supported from referral to sustained employment by the Work First and Fair Start employability services? Graham Dey. Can I first associate myself with the comments of Mark Griffin at the outset of his question? He also poses quite an important question, Presiding Officer. I do not believe that addressing the retention issues that are faced by the army in particular and improving the transition experience and pathways through rewarding employment somehow run contrary to one another. Indeed, I would argue that the latter can help to address the former. It can be the case, for example, that serving personnel are leaving the military early because they might be dissatisfied and think that the grass is greener on the civilian side. But some then discover that finding enjoyable, well-paying work is not as simple as they thought. If we, in partnership with the MOD, CTP and employers in the public and private sector, can improve the routes into employment that are financially rewarding and satisfying, we will be able to better point to how the skills accru during service do transfer into civilian opportunities and hopefully demonstrate the worth of remaining in the services for longer than is sometimes currently the case. I should add that I am finding a willingness in the part of the army in Scotland to work with us on this. I think that it is a positive direction of travel there with regard to the specific numbers that Mark Griffin has asked for. I will have those to my colleagues, but I will write to them. I move to the open questions. Again, brevity would be appreciated in questions and answers. Mike Rumbles, followed by Keith Brown. I know that the minister has visited some of our health boards in his role as veterans minister. Could I ask the minister how he will ensure that there is an equitable level of service for our veterans of all ages throughout all our health board areas? He knows that I am particularly keen to ensure that those in the Grampian NHS board area are up to the level experienced elsewhere. Graham Dey? I completely agree with Mike Rumbles on the point that he makes about equity of access to service. I think that all our veterans across Scotland, regardless of where they live, should have equitable access to the services that they require. That is a view that is very much shared by the health secretary and the driver for my having been undertaking a series of visits across the country. Since Mr Rumbles last raised this matter, I have met those providing and accessing veterans' first point delivered services in Gaelish Hills and Irvine. I also visited in Burness to hear from NHS Highland and local veterans about how services are provided across the Highlands with the challenges that that presents where they do not have V1P any more. My officials have been seeking to arrange a meeting with NHS Grampian. There is one pending on the very same subject. I hope to have that take place during the summer recess, while I will also be meeting veterans' groups in Aberdeen. I hope that that reassures the member that I have taken extremely seriously his concerns around equity and ease of access, and I am more than happy to engage further with him on that. Keith Brown, followed by Edward Mountain. Does the minister agree that the abject and repeated failure of the UK Government to even get close to targets for recruitment over a lengthy period now has a direct impact on veterans, including by limiting the opportunities that service personnel have for training and taking on new roles, as well as the opportunity to choose when to leave the service at the time of their choosing? Graham Dey. Indeed, I do understand and agree with the concerns that are being expressed by Mr Brown. We were told that there would be an increase in numbers to 12,500 by 2020, and we are nowhere near seeing that at the moment. All that I can say to Mr Brown is that that will be a matter that I will be raising when I am in London at the beginning of next month. Edward Mountain, followed by Angela Constance. Thank you, Presiding Officer. On 4 December last year, I raised the appalling shame, I believe, of the historic allegations inquiry. The minister agreed to take this matter to the UK Government. I would like to ask if he has done that, when he did it and what was his response. I realise that this has not devolved. Graham Dey. Presiding Officer, we tread where we are in this issue because there have been charges brought, so it is inappropriate to comment on any current criminal investigation. However, there has been a degree of dialogue with the UK Government. That has centred on their plans to hold a consultation relating to legal protections for armed forces, personnel and veterans. Officials are in touch with the Ministry of Defence on the issue. We await the detail of the UK Government's proposals, and we will consider those fully as part of the consultation process that accompanies that. Angela Constance, followed by Jackie Baillie. Thank you, Presiding Officer. I know that the minister is aware of the fabulous work done by the Scottish War Blinded Centre at Lindburnt in my constituency. I really hope that he can come and visit us sometime soon. Meantime, can the minister say what more can be done to signpost veterans with sight loss via the Certificate of Vision Impairment process to services, including the fabulous service offered by the Scottish War Blinded? Graham Dey. Presiding Officer, the Scottish Government with its partners introduced the Certificate of Visual Impairment, the CVI Scotland form in April 2018. We have had very constructive discussions with the Scottish War Blinded, and we are now updating to the accompanying CVI guidance to expand the signposting for veterans to necessary services, including the Scottish War Blinded. I had the pleasure of visiting the Scottish War Blinded Centre in Hawkehead in May, and I was left very impressed by the facilities. I also had the pleasure of speaking at their annual conference. Of course, I would be delighted to visit the Lindburnt Centre. Jackie Baillie, followed by Stuart McMillan. I welcome the specialist mental health provision with funding provided to combat stress in veterans who were first referred to in the report from the Veterans Commissioner. I am sure that the minister will agree that we need to also see an improvement in local mainstream adult mental health services where waiting lists are currently far too long. 20 per cent of adults are waiting longer than the 18-week treatment time guarantee. Does the minister believe that this is good enough, and if not, what changes will he make for veterans? Graham Dey. Presiding Officer, in the context of veterans mental health services, I think that it has been made extremely clear by the Government that the mental health strategy does cover specifically veterans' issues. As Jackie Baillie has touched upon, we do already provide funding for combat stress and the needs of veterans within all mental health services. I should add that there are issues sometimes around their children. An issue was brought to me as recently as yesterday where youngster in service families will go on a calm waiting list, but the family will move, as is so often the case, and they have to go on a calm waiting list somewhere else. That is an issue that I have undertaken with the service families federation to look at in conjunction with the Minister for Mental Health. I hope that that provides a reassurance that this is an issue and a holistic sense that we are very much cited on. Stuart McMillan, followed by Alison Johnstone. Can the minister inform me how has the Scottish Government ensured that veterans in receipt of social care in Scotland get the full value of their war pensions? I can confirm that the Scottish Government continues to provide £5 million of funding each year to local authorities to ensure that all veterans receiving social care at home or in a residential home will keep the full value of their war pensions and armed forces compensation scheme payments, as they will now be exempt from financial assessment. I think that there is an estimated benefit of this for, I think, 1,300 veterans in Scotland who now receive the full value of their war pensions, and I know that that is very welcomed by those affected. Alison Johnstone, followed by Annabelle Ewing. The veterans gateway report that finance is constantly in the top three areas of need upon leaving military life, and the strategy points out that upon doing so, veterans can be uniquely unprepared for balancing the financial demands of civilian life. The minister speaks of his desire to improve information and guidance available to veterans, transitioning into civilian life, but what work is taking place to ensure that veterans have the guidance that they need, appropriate advice and referral to financial advice, including education, where that is needed and appropriate? Graham Dey. Alison Johnstone is correct to highlight this area because it is one that has been identified. I will answer her question in two ways in terms of access to education where that is required. She means in a broader sense, and there is certainly a piece of work going on there just now. In a financial sense, I would maybe draw her attention to a pilot project that has been carried out quite recently, an army base in Scotland, with Barclays Bank, who does wonderful work for our veterans in a variety of way. What they were doing was seeking to provide some financial training for a number of intended service leavers and others, and what emerged from that pilot was confirmation of the need for that. We would be happy to work with Barclays Bank to see if we can roll that out, because very often we recruit particularly into the army young men and women from poorer backgrounds whose education at the point at which they have moved into the military has not been as extensive as we might all want. That includes issues around control of money and the ability to run a household budget. I think that there are a number of things we can do there. Again, I commend the army in Scotland for their willingness to engage in that sort of thing. Annabelle Ewing, followed by Tom Mason. Thank you, Presiding Officer. Can I ask the Minister how the Scottish Government will build on the Welcome to Scotland guide to ensure that service personnel and their families living or moving to Scotland can benefit from all that is on offer? In that regard, does the minister share my disappointment that the decline in the defence footprint in Scotland continues apace in breach of UK Government promises? Graham Day. As I said to Keith Brown, I share that disappointment. With regard to the building upon the Welcome to Scotland guide, that guide is a very good, positive publication that highlights exactly what is on offer in Scotland. Information is only as good as the ability to access it. We have identified, through the feedback and some of the discussions that we have had beyond that, an issue particularly around accessing the guide and that information for individuals and families who have actually been living out with Scotland or based out with Scotland just now. Those might be individuals who are intending to return home or to choose to live here. There is a lot of work going on with the MOD and with the army in particular just now to see how we better get that guide and the information within it available to service families who are intending to settle here. Tom Mason, followed by Bruce Crawford. Thank you, Presiding Officer. I thank the minister for his statements. The strategy for our veterans identifies 2028 as the target date for achievement of its key themes. That will require work across Government and organisations, but is the Scottish Government confident in its ability to meet those targets in time? Additionally, the minister referred to recruitment of veterans within the Scottish Government itself. However, Charlie Fraser's findings yesterday highlighted as an area where more work is needed. Is the minister able to set out how the Scottish Government plans to change that and lead by example? Graham Dey? 2028 is not a target as far as this Government is concerned. There are many things we could do relatively quickly about immediate improvement. That is what we aim to do. I have absolutely no doubt either about the willingness or the ability of this Government to deliver on those things. I should also say that those things are delivered in partnership. They are delivered in partnership with local authorities. They are delivered in partnership with the veterans charitable sector in Scotland. That is one of the strengths of this country. They will have to be delivered in partnership with the MOD. I look forward to taking that forward. Do you envisage being able to bring about meaningful change a lot sooner than 2028? Bruce Crawford followed by Alex Rowley. In regard to ensuring the successful transition from a life in the military to Civvie Street, in particular in regard to the significant task of translating 1,000 separate military qualifications into recognised civilian qualifications, can the minister update the chamber on the progress that has been made by the Scottish Credit and Qualifications Framework to ensure that qualifications obtained during a military career are recognised by civilian organisations? Graham Dey? Bruce Crawford raises a matter that has been raised with me directly by serving personnel. In response to one of the commissioner's recommendations, work is currently under way with the Credit Qualifications Framework Partnership, funded by the funding council, to look at translating military qualifications into qualifications that can be quantified by civilian organisations. It is an important piece of work to assist our serving personnel into employment. Given the scale of the task, there are more than 1,250 separate qualifications to be considered. Initial work has focused on infantry qualifications and a guide to infantry qualifications on what they mean in Scotland was launched in May. The SCQF will continue that work to consider other military qualifications, and I look forward to seeing significant progress in that regard. Alex Rowley, followed by Tom Arthur. Presiding Officer, the minister talked about the important say partnership. I know that, within most local authorities, they have a dedicated lead officer, as well as a dedicated lead politician in terms of veterans and support for the armed forces. Can he tell me what can the co-ordination actually take place? I know that in Fife, the previous person, the politician that was dedicated and committed to that role, is there a co-ordination between Government and in Government? Graham Dey? I would cite Fife as a very good example of a local authority champion. Councilor Rod Cavanaugh does a very good job in that role, but I have to say that that is replicated across various parts of Scotland, across the political parties. To answer Alex Rowley's point specifically, we have not perhaps been as good as we ought to have been at pulling all that together towards sharing best practice. I can tell him that we are drawing up plans to have an event in the summer to which we will be inviting all the local authority champions. We will have the services there, we will certainly be inviting them, to have a round-table discussion about what it is that service personnel and veterans require, and to share best practice across local authorities so that we get a better equity of delivery of support. The last question is from Tom Arthur. Can the minister outline what support is available to veterans to access safe and secure housing? Graham Dey? Housing and homelessness, to a lesser extent, are very important issues in the context of veterans support. We are doing some quite good work on identifying specific housing allocations in various parts of the country. In a broader sense, since 2012, more than £4.5 million of funding from the Scottish Government's affordable housing supply programme has been awarded to organisations to provide new homes and adapt existing ones for veterans in Scotland. During 2018, we revised and published a Scottish housing guide for people weaving the armed forces and ex-service personnel. In February this year, we issued revised practice guidance on social housing allocations. That includes a section on allocations for people leaving the armed forces. Again, I would accept that there is more that could be done in this area. That concludes questions on the ministerial statement, update and veteran strategy. We will move on to the next item of business.


So a few days ago, I was watching a video from another YouTuber by the name of Patrick C.C. And Patrick C.C. did the video documenting his experience of working with TikTok influencers for a campaign that he was running, I think, around his own project or something like that. Now, Leroy deleted his after like 24 hours, I suppose, so I guess I got scammed. And as I was watching that video, I was thinking like, man, it's interesting to see someone else go through all of the red flags and all of the troubles that we have as a marketing agency because it lets me know that I'm not crazy and that sometimes these TikTok influencers really are like tripping. You know what I'm saying? Like everything about his campaign wasn't terrible, you know, but there were a lot of things in there that we have come to identify as red flags when it comes to influencers. So that's what I want to talk about for this video. What are some red flags that you can look at when it comes to dealing with TikTok influencers? How can you keep yourself from getting finessed or making sure that you have the best possible chance at having a great campaign on TikTok? Let's get into it. It's the network. What's going on? My name is Kory Music Marketer and co-founder of Country Band Agency and today I want to talk about red flags. And when I'm talking about these red flags, I mean specifically in the space of TikTok influencers and TikTok influencer-based campaigns. Now, those type of campaigns have become super popular, I would say, since 2019 once we start to see a surge of songs that's going viral on TikTok. Now, every artist in their mom wants to catch a viral TikTok hit and they're all jumping into the platforms, dropping thousands and thousands of dollars on influencers hoping that it makes them the next Arizona service or an old town road or something like that. And while, you know, I have my own thoughts on that that I get into in another video, TikTok influencer marketing really can be a really effective way to push music out when done correctly and when you work with the right people. Now, the problem that comes with doing TikTok influencer marketing is that a lot of them are kids, you know what I'm saying? Just to be real, like you're trying to get teenagers and kids to do great business and just a lot of them aren't equipped for that. And I won't knock all TikTok influencers because we do have a great network of influencers that we work with that just are amazing 95% of the time. But every now and then you do run into a bad Apple and if you don't know how to recognize the red flags, then you might run into a bunch of bad Apple. So that's why I want to get into this for this video. A couple of red flags you can look forward to let you know, hey, you need to stay away from that TikTok influencer, take your money elsewhere. But before we get into all that, come and follow me on Instagram and TikTok. Links will be in the description below. Come talk to me, come engage with me, come give me some video ideas, all that good stuff. Also, we have relaunched the Brandman Network Elite platform. So if you're interested in learning some of the same music marketing techniques that we go over in videos, then check it out. The link will be in the description below. It's really dope. It's only going to get better. And you know what I'm saying? I like the thing that we make in magic over there. Like we turn every day regular arts into marketing geniuses. You know what I'm saying? So once again, link in the description below. Check it out, sign up if you're interested. Hopefully I'll see you in there. So the first red flag that I look for is, are they managed by some type of influencer agency or not? Now, this isn't always a red flag necessarily when it comes to their work ethic.  The reason I put it on here as a red flag has a lot more to do with price. Usually the influencers that are, you know, being managed by some type of agency, they are usually the most expensive influencers that you can work with. I'm talking about on average, we're getting influencers like that who are charging like $2,000 and above for a single post. And a lot of it has to do with the fact that they now have other people that make money off of them. Right? Like when you are signed to a management company, you don't have to pay your manager. You may have to pay overhead costs that come with their management agency. So we've seen influencers that we worked with that were maybe charging five, six hundred, maybe a thousand dollars, get signed to a management company. And then now their prices double or triple because once again, they have all these other things they have to pay for now. So it's not a red flag when it comes to work ethic. It's not a red flag when it comes to like, will you be finesse or not? But it's usually a sign that that influence is going to be pretty expensive. Like anytime I see a, you know, contact me at something and it has a dot agency or agency in it. We stay away if the, if the client's budget is within a certain range, you know, or we may save them for, for bigger campaigns and bigger budget campaigns, but nine times out of 10, those influence is going to be pretty expensive. Now, an actual red flag that I look for, you know, when determining if an influence is going to try to finesse me or if they're just going to be difficult to work with or anything like that is, do they give you a set price or number when you ask them how much do they charge for promo? Now, if you've watched my influencer outreach video, which if you didn't go check it out, I'll, I'll link it somewhere here. Um, but if you watch my video, I talk about how to reach out to influencers and just to politely ask them, Hey, how much do you charge or how much would you charge me for this service? Uh, it's usually really quick, pretty simple, pretty painless process. And what I have found is that most of the serious influences have some type of number that they're ready to hit you with. So they'll quickly hit you back with like, Hey, it'll be $500 for a fee post that post will stay up on my profile for a week. You know what I'm saying? Um, if it doesn't do X, Y, Z, and I do blah, blah, blah, blah, blah, right? Versus the influencers who are usually a little bit more scammy, they tend to ask you a question I hate hearing from them, right? And that question is, what is your budget? And the reason that I don't like when influencers ask what is your budget is because that to me lets me know that they're not really trying to be fair here. They're trying to gauge how much money can they get from you in total, right? And I've seen it with other influencers that we've worked with before. I've seen influencers that that we've paid $200, $300 charge someone a thousand dollars just because they said they had a thousand dollar influencer budget, you know, which isn't fair. It's not fair to the person that is spending the money, especially if that's not the rate that you're typically charging people or the rate that you know is fair for what you're doing. Now, side note, what I do in those situations is I low ball them just to be real with them. So if an influencer hits me back with that right, I say, Hey, I like your content. We have this song. We want you to work on TikTok. How much would you charge me for promo? And if they go, what's your budget? I respond to them and say, I have $50 for you. Now, what that has done for me is it either one makes them ignore my emails and start responding to me or it forces them to give you a number. Right. So they'll usually respond back and say, Hey, that's a little bit out of my budget range. I typically charge $350. Now it's like, Oh bet, now we're getting somewhere. Now I can, I can look at your number, engage if you're worth that number to me or not. So like I said, it's not necessarily the biggest red flag on if they're going to financial or not, but I do think it says a lot about your business ethics and just how you conduct business in general, when you have a price list or a price sheet ready to share with people versus when you're just trying to see how much you can milk somebody for. And just like in context, man, when I reach out to Instagrammers or like YouTubers, but they have price sheets ready. So this is an issue that I've really only personally seen with like TikTok influencers and then new influences on the other platform as well, which is also probably why a lot of TikTokers do it because they're super new to being influencers in general. But you typically see price lists and, you know, an established amount for what they want to do from more established influencers who kind of have their business together. So another red flag that a TikTok influencer just may not be worth it or may scam you or may not just do business the greatest way is that they have a large amount of views on the content that you can see, but their posting date is inconsistent. Now, let me tell you what these TikTok influencers do now. I mean, let me tell you that's a common problem that anyone that has ran any TikTok promo has probably went through this, right? Some of them would take your money, they'll post, let's say two, three, four days go by and they don't like the engagement that the video is getting and they'll just take it down. They'll delete it. They'll never respond back to your emails asking why did you take it down? Or, you know, hey, you said you would leave it up for a month or for forever. Why did you take it down? Some will really do that. And what I have come to determine or what I've come to see that lets me know if an influencer is likely to do that is once again, do the posts that you see have a bunch of views on it, but is there an inconsistent posting date in between the video? So for example, if the first video on their profile has a million views and it was posted three days ago, right? And then the second video has two million views and it was posted a week ago. And then the third video has, you know, maybe a similar number, 1.5 million views and it was posted a month and a half ago. That to me is a rare flag because one TikTok just doesn't work like that. Like TikTok isn't like Instagram where you can maybe post a few times a week and like really just go up. Like there are influencers that get away with low video counts, but it's rare to see an influencer that can post like once a month or twice a month and really maintain those type of numbers. So what that tells me is that they delete posts, right? Today or from time to time, we'll delete posts that they feel like aren't high performing or it doesn't make them look good to the outside world. And from influencers that we talk to that do this, they tell us that they do it because they want to make their page look appealing to people who are trying to offer brand deals. And like they pretty much that, like they want to look good to the people on the outside who might give them money. Now the problem with this is that it's misleading, right? Like if I'm willing to pay you, let's say a couple thousand dollars for posting because I believe that you're getting millions of millions of views on your content consistently when in reality that one million plus view video might be one of 20 videos that you posted this month and that's the one that popped. You're being misleading to me. You're not letting me know the full picture. I would much rather pay you a fair price for what you really get than to get finesse for a number for something that you're trying to make me think you get pretty consistently. So one thing that I'll do in this scenario is I'll look up influencers on social blade. If you go to social blade, which is a free social media analysis tool, you can see if they've been deleting posts, you can see how many times they post. And like I said, sometimes you really will come across an influencer that maybe posts like once or twice a month and they get those type of numbers. It's rare, but they are out there. Most of them from what I've determined, delete posts because they want to look good to potential brand investors and potential business partners and stuff like that, which once again, I just, I just think it's messed up.  Don't charge me for what it looks like you get another red flat if you may want to look for it. And this is really when it comes to like bigger influences. This doesn't pertain to honestly like 95% of influences on TikTok. But if it's an influencer that you're charging or that is charging you more than I will honestly say like a thousand dollars or more and they're not willing to sign a contract, stay away. Don't do it. Even if they're the best guy or gal in the world and you feel like you can trust them, just don't do it because that's a lot of money to lose out on. If worst case scenario happens, they don't respond to your emails. They don't post your posts or they take it down. Then you have no protection against yourself to get that money back. So I've seen influences before who would try to talk ours until like, you know, no, man, it's cool, bro. Like, look, man, I got three million followers. I'm not going to finesse you.  It's an alarming amount. You know, so I think that if you're working with an influencer and you're paying them once again more than like a thousand dollars or so, unless you just have some type of established relationship with them where you trust them, you know, they will deliver, make them sign a contract. And if they won't sign a contract, then don't work with them because to me, that's a red flag.  And me feeling comfortable involves you sign a contract saying you're not going to finesse me, you know. So if they won't do it and they're charging you a lot, that's a red flag. They may not run off on you, but it just tells you a lot about their business acumen and the way they're going to do business, you know, maybe not even just with you, but just in general. And the last red flag that I want to talk about once again when it comes to TikTok influencers is are they super slow to respond back to you? Now I get it, influencers are people, people are busy, a lot of them are in school and jobs and all this other stuff. But what I have seen is that the influencers that are super sketchy will respond back to you really, really fast when the conversation's on money, but as soon as you have paid them and the conversation now turned towards doing work, they become extremely difficult to reach and extremely difficult to just follow up with and make sure they're doing a job. Now this unfortunately is one that isn't always easy to catch in the beginning because like I said, a lot of them can just be really upbeat and really positive and responding super fast and then you pay the money in there, they're trying to go. So that unfortunately is hard to gauge in the beginning. So one thing that I do look for is just like how fast are they responding back to just the initial messages about us doing business? Is it taking them four to five days to respond back to your last email about how much they charge? Is it taking them a week to get back to you about if they'll sign a contract or not? If there are long lapses in communication initially, then you can almost 100% expect that it be long lapses in communication once you've actually paid your money and it could get to the point to where they just stopped responding back to you at all. Like we've had influencers post stuff, never let us know even though we ask them to let us know and then like once we're like, hey, this isn't what we asked for.  So once again, it's a lot harder to gauge in the beginning but if you are trying to gauge it in the beginning, look for how long it's taking them to get back to you while in those initial messages. And like I do try to get people courtesy. I once again get it, people have jobs, people have school and other things they're doing but if you were responding back to me every 30 seconds, 10 minutes ago and then now I don't know where it's taking you a week and a half to get back to me, I personally take it as a red flag. So there it is guys, those are some of the red flags that I look for when dealing with TikTok influencers for our TikTok influencer marketing campaigns. Now, all of these aren't always going to be 100% definite red flags but I've seen them enough when dealing with TikTok influencers to know that I should be weary whenever I see these things come up. Now to be real with you, these red flags probably apply to influencers on any platform, not just TikTok. I just personally wanted to put it in the format of talking about TikTok because I've noticed that a lot of artists and managers and other marketers are hopping into the space of doing TikTok influencer marketing. So I wanted to put it there so you can protect their sales when dealing with TikTok influencers but really take these tips and apply it to any influencer marketing across the board. They exhibit a lot of these things, there's going to be some red flags down which you can expect to deal with when dealing with these influencers. But I don't want that to discourage you from doing TikTok influencer campaigns because once again, there is a lot of potential for really cheap reach when it comes to TikTok influencers. There's always a potential that something could go viral and you know like TikTok influencers when they do their job and are easy to work with are actually really cool people. We have a lot of influencers that we love bringing business to because they always execute, they're very professional, they're very timely and if they can't do something, they let us know. You know what I'm saying? They're like, yo, I don't have the time for it. I'm too busy.  So that's something to think about. Hopefully that's some gems you took out of this and hopefully a lot less of you get finessed when it comes to dealing with these influencers. Other than that, I'd love to know what red flags you're looking for when dealing with influencers. What just absolutely makes your spidey sense is tingle. What lets you know like, hey, this guy, this girl is about to finesse me. Like, what are you looking for? Outside of that, if you feel like you learned anything today, please like and share this video. Hit those post notifications as well as I wouldn't want you guys to miss anything. Once again, my name is Corey and I'll see y'all next time.


Hello, my name is Catalina and I'm studying civil engineering at the University of Greenwich. I chose civil engineering because I like learning about structures and design and architecture. I also like the more like practical mathematical aspect of it. I chose the University of Greenwich because I know that they give good opportunities to international students. There's a big diversity and international community. I got the chance to learn about different cultures and also there's a lot of opportunities to learn from the practical aspect of the theory. I chose civil engineering because when I was in school I really was keen on maths and physics, so especially mechanics so that's why I was interested in doing, well, following an engineering discipline. Hi, my name is Destiny. I'm currently studying civil engineering bachelor's. I chose civil engineering because I enjoyed maths and problem solving at school. And also because I came from an engineering discipline family and so I felt like that was the best choice. I chose Greenwich because I'd like those different opportunities available from theory to practical, from visiting different sites and doing different lab work and that's why I enjoyed it and chose it. I'm a final year student and I just finished my dissertation on waste management practices in the demolition industry. I got an opportunity through Greenwich to partner with a demolition contractor which allowed me to go on multiple different site visits and gain loads of different practical research to complete a dissertation that I really enjoyed. Student life is great. I've been able to make loads of friends, meet loads of different people, network of different lecturers and different professionals in the industry. I really enjoyed my time and I know that I'm going into the marketplace into a workplace with lifelong friends. Hi, my name is Manel Jalassi. I'm a third year civil engineering student at Greenwich University. I chose civil engineering because I was very good with maths and physics at college. I also had passion for design. What made me choose civil engineering was also the Bosch Califa which was constructed in Dubai, the tallest building in the world. Seeing all these civil engineers behind this amazing work really inspired me to work within this industry. The reason I chose Greenwich is because we have a lot of international students here at the university. It's a very vibrant university in that way and they also mixed theoretical learning with praxis. Recently we were working with Construction Area where we had a task to build a bridge, a miniature version of the Brewery Wolf Bridge which was quite fun. We were working on site and in teamwork and that was a very good experience how we can mix the learning with theoretical and praxis together.


All right, let's get started. Good morning, everybody. My name is Sebrin, and this is Scripting for Artists. It's actually a training course on Blender Cloud. How many people are Blender Cloud subscribers? Oh, that's so good. Thank you all, because you're paying my salary, among other things, so it's really great. Who have you have seen the Training for Artists course that actually exists on the cloud? A few people who have looked at it, a few videos. All right, well, that's good. I'm trying to cover a bit of the training as it is on the cloud and then skip some parts to keep you guys interested in what else is on there and also cover some things that people asked for but are not in the cloud stuff yet. It's aimed at artists who not necessarily want to become a programmer, but from Scripting could still be very useful. If you do any mundane monkey work that is doing the same thing over and over again, then Scripting could be for you. So basically, it starts with scratching your own itch. It doesn't have to be production ready. It doesn't have to be very fancy. As long as it works for you, that's fine, and you can already save a lot of time. So basically, it is getting to get Blender to press its own buttons. That's the whole goal. We're going to use Python for that, which is a programming language that Blender is using. So in the end, you will be a Blender programmer. Little bit about me. I got a PhD on crowd simulation before I started working at the Blender Institute Animation Studio thingy. I've been working in there since 2016. I got my first commit rights to Blender in 2014, and I've been programming stuff since 91. Then there is two very important things. This is a workshop, so it's not about me talking for an hour and then you guys just absorbing. So please interrupt me. I will try to keep my mouth shut every once in a while to get so that you have some space to think.  Even though, if it is, dude, I have no idea what you're saying right now. Just interrupt me, ask about it. We can discuss it. Maybe somebody else in the audience knows how to explain what I'm trying to explain in a way that clicks with you. So that's what I wanted to say about that.  They will just do as they're being told. Princeton is called an imperative language, which means that you tell the computer, do this, then do this. To give an example, Prolog is a programming language that is more logical, so you can actually describe your problem and then tell the computer, please, computer, answer me this question. And it's awesome, but it doesn't work for Python. So you really have to lay out the steps it needs to do. One example is that I've seen people say, OK, A equals x location of this object. And then they start changing the location of the object and they assume that the computer understands that A should always symbolically mean the x location of that object. But it doesn't happen that way. Computer just sees A equals location plus five, maybe. And it will compute that. It says 10, OK, A is 10. That's it. And then from then on, A is always 10. So it's a different way of thinking about things. As I said, it's a workshop. So if you have a laptop and you want to type along, please do. If you have any of your own scripts that you want to discuss, could also be cool. So roughly the outline of what we're going to talk about. Going to look at mindless copy pasting. Blender is really good at that. You can just copy paste stuff from the other interface into your script or the work. So that's pretty awesome. Then we're going to look a little bit more in depth about names and objects because that plays a critical role in programming these things. And then we'll look at stuff on this because that's usually what you do. I have this list of 1,000 objects that I want to look through and do things with. So by then we'll be able to do that. Then on the cloud, I look at data types, strings, numbers, meshes, that kind of stuff, and collections, lists, dictionaries, sets. I keep those as a teaser for you guys. And then we get to stuff that I don't cover on the cloud, which is don't mindlessly copy paste. And I will explain why. Turning your code into an add-on, people have asked me that a lot. Oh, cool. You're explaining scripting. So you're going to tell us how are you making an add-on? No, that's not on there. So we'll cover that here. And I also got some questions about the production of the actual videos. I have my face in there on top of Blender, and it can be hidden, and shown, and I can cut it. And I also use scripting for that, and some drivers, and some Blender magic to get it all working. So maybe we'll get to this. I have no idea about the timing of all of this because that depends a lot on you guys, how much you let me talk, and how much you do the talking yourself, how many questions we get, how many discussion we can get. So I really don't mind if we only cover the first three bits. That's all fine. Maybe we cover everything. We'll just see where we end up. So mindlessly copy-pacing. That is pretty much the basic where you want to start. Oh, by the way, how many of you have actual Python knowledge? Oh, that's quite a lot. How many of you say, OK, I don't know how to program stuff, and I want to learn? That's also good. Nice. That's a nice mixture. So for the Python guys, I'm sorry. The first few slides will be familiar. So the Python console, I will show you in Blender itself. I was hoping I could get a mirror of what is shown there on here, but I can't. So I'm going to have to do it like this, and apparently maximizing, there we go. Is the interface size big enough? Can you guys read what's down here? OK, if I say 1 plus 2, can you guys read it's 3? There we go. So you can do math. 3 times 4 is 12, and 3 plus 4 times 5 equals 23, because multiplication goes before addition. Python is smart like that. If you want to do 3 plus 4 first, and then the times 5, you have to use the brackets, and then you get 35. Usually, I don't even grab a calculator when I'm on my desktop. I just start Python and type everything there. One thing that took me a long time, I wanted to repeat a string. Just give me, I want to print a little header that's like 50 stars, or 25 As, and I was looking for the string type and functions on it. It doesn't exist, but you can just do 5 times A, and then you get 5 As. So let's just stick to Blender here for a moment. If you have this cube, yeah, this is a bit awkward, you can hover there. And in the tooltip, you can see that there is a little bit of Python. If you don't see it, you can turn it on in your user preferences. And that bit of Python gives you a lot of information that you need. From hard, I hope it's right. I can't read it. It's bpi.data.objects, square bracket, quote, cube, quote, square bracket, dot location, dot square bracket, something, yeah, 0, because I'm on the x. And that is actually the Python code that you can type in to get the location of the cube, which is 0 at the moment because it's default cube at 0. And we can move it on the x-axis and then it's changed. So that's how you can get the x-location of the cube. Instead of square bracket 0, 1 is the y, and then 2 is the z. You can also do dot x, dot y, or dot z. And you can also get the location, which is the three numbers. So if you want to do anything based on the location of the object, if it's in a certain area or in your scene and you want to hide it or show it, this is what you could use. Yes? Oh, yeah, sorry. Usually, this is where the timeline is, but because I'm not doing animation at the moment. But this one, I cheated because I copied pasted it off the slide that I have here in front of me. This one I typed in because these are actual input fields. And if you copy an input field, then it will copy the value. The mindless copy pasting comes a little bit later when we go and look at things in menu, some buttons, and everything because you can copy-paste those as well. Sorry? How does one paste things? Yeah, because I'm used to using TAB on a shell prompt and everything. So I've rebound my TAB key. Otherwise, it just jumps that way. But control space is the default for the autocomplete. So you can type epi.data.controlspace, and then look, that's everything you can type after that. So all the objects live in .objects. I only have one, so it autocompletes to a cube. You may have noticed that I was using the double quotes whereas Blender is now using the single quotes. Doesn't matter as long as you're consistent. If you want to do, it's me, you put in double quotes because then you have a single quote in your text. If you want to have, he said hi, you would use single quotes because then you have double quotes in your text. Doesn't really matter which one. So we have the cube there. You can use arrow up and down to go back and forth in history. It says a lot of typing. It has a location property. There we go, enter dot x. And if we go back here, you can see that you can also change it. You can say that equals 1. And then immediately the cube jumps to location 1. So you could use this to, for example, align objects to the grid or to anything that you want to. Maybe you've calculated where something has to be. Then you can just put it there. You can say, y plus equals, that means to increment 0.1. And then we just walk. Or you can say, well, I want it at 1, 2, 0.3 equals.  It's a thingy that has multiple thingies in it. That's about as generic as you can get. And Blender understands that a tuple of three numbers will match with that location. So then it just puts the cube there. As for the mindless copy-pacing, let's do some of that. So we can say, add mesh cube. Oh, let's try another one. Eichelsphere. Then you see here, I won't use the mouse to point it out because then the thing moves again. But here you see, bpi.ops of mesh of primitive Eichelsphere add. And this is what we call an operator, which is why it lives in the bpi.ops namespace. And this is the code that is actually called when you press that menu item. Hit Control C. And here in your code, Control V, there you have it. You press Enter. And then at the 3D cursor, as you're used to, you get that object. Yes. Yeah. Oh, yeah, by the way, if you have questions and you want them to be on the live stream and on the recorded video, you have to use this one. Otherwise, I will just repeat the question because that's a little bit easier. So the question was, do you just hover and then press Control C? Yeah, that's all there is to it. Oh, by the way, this is also true with these guys. I used to click on it, and then everything is selected. Then I click Control C. You don't have to, you can just hover over any input, and then Control C will also work. Control V for paste will also work. So this is already pretty cool. We can now create a primitive. I didn't put this in my slides, but there is a, I'll cover that later. You can also set the location of the 3D cursor so you can control where it goes. You can also pass it a location here as a parameter. There's a lot of things you can add between these brackets to specify exactly what you want to have. So these options that you get in the user interface for how many subdivisions and the location and the rotation and all that align with you, all these things are actually options that you can get here. So you do an opening bracket, and then again you click Control Space, and then you see, well, we have view align equals false. Well, that's the default. It doesn't align with your view by default. If you say view align equals true, it does. But probably more useful is the number of subdivisions, the size, the rotation is in there, the location is in there. So if you want to create 300 different icospheres of a certain size at specific locations, then it's fairly easy to do. Yeah? Oh, yeah, I can. I can do it now if you want. I can also do it when it's in the stuff on list. Well, probably have it there. No, let's just do it. So yeah, that's easy to do. Let's move back here. So this is what we've just seen. So where do you find this information? There is, the primary resource for me is still the blender user interface. You can go to the manual, but then you have to know that maybe Suzanne internally is called a monkey, or maybe it was the opposite. I always forget. Whereas in the user interface, you can just copy paste the stuff. So that is a good source. There's also Blender's API documentation on docstopblender.org. And the Python standard library is also very well documented. So there's a lot of things in Python itself that you can use in your scripts. And the Blender developers really try to keep the Python that is bundled with Blender as standard as possible so that you can take any Python tutorial and apply it to Blender and it will respond in the same way. Of course, generic Python tutorial will not cover Blender specific stuff, but at least Blender won't get in your way after a Python specific stuff.  We've seen how to use the Python console in Blender. We've seen how to copy paste stuff and we've seen some sources of information. We've used the console for calculating stuff and for modifying the scene. Any questions about this so far? Yes. Ooh, is it possible to link iPython to this Python? I have no experience with that. I know, I would love it. This Python console, especially when it comes to history, like what the arrows up and down do, it's slightly different from what Python does. And the iPython now to complete is really powerful and there's lots more going on there. So I would love that, but I wouldn't know what it entails. Might be interesting, maybe. Who knows, in 2.8. Okay, so let's move on to the next chapter, names and objects. Or what does that dot actually mean? We were talking here about names, like Python names and Python objects. And in that sense, names refer to objects. Objects is a thing in memory from Python's perspective. So this is, as a clarification of what's on the cloud now, here I really talk about Python names and Python objects. So an object in Python can be anything. It can be five, digit, number, it's an integer. And it's actually an object in Python's memory. But it can also be the big prime module. It's all of Blender composed of many different things. And because you can give it a name, it's also an object. So object means pretty much anything. How does it work? Well, see, you have a ledge somewhere with a stack of monkeys, as one has. And you wanna talk about one specific monkey, namely the third from the top, the one with the upside down tilted head. And that's quite a long way to describe this particular monkey, but it works. And you probably now know which monkey I'm talking about. But we could also call them Steve. And then the next time I'm talking about Steve, you guys also know what I mean. And this is basically all there is to it in Python as well. There's one thing, that monkey, there are no five monkeys named Steve. It's just that one monkey. That monkey doesn't change. It doesn't move because it's a photo. So it doesn't matter which name are used for it, that third monkey from the top on that particular ledge or Steve. Bless you. And in Python, it's pretty much the same way. It's not a ledge, it's a bepy. And it's not that particular tile on that ledge where they are on, but it's data. And then you have dot objects.  The monkey has a location, it has an X property. And that is what that dot does. It becomes more specific. It walks down this hierarchy of names. But we can also call it Steve. And after you've done this, these two things become exactly the same. Both said Steve's X location to minus 0.5. Except that it might be easier to read because it's all about Steve. It's probably also easier to avoid mistakes because if you have a whole line of these bepy.data.objects, monkey.do something with it, you have to be careful that on each and every line you have the same monkey.  And you have to be careful that you always use it in the same way. Whereas if you say, okay, Steve is the monkey that I'm talking about now and then do everything on Steve, it becomes much clearer. And it also becomes faster to execute because every dot is a lookup in some table of names. So even for a blender itself, it will be faster to, if you say Steve, than if you say be part of data, the objects of monkey. And this works perfectly until we allocate something else. So it could also say Steve equals three. And that's the thing with Python name. In Python, objects are really strict to have a type. It's a mesh, it's a blender object, it's a digit. It's very strict, it won't change in the same way that that monkey will always remain a monkey. But those names are interchangeable and they can change dynamically what they are pointing to. And that's why Python is called a dynamic language. Steve equals three is also perfectly valid. Even if before we use Steve to point to a monkey, we can now say, okay, Steve now points to that object that represents the number three. And then, of course, Steve.location.x equals something won't work if we'll give you an attribute error location to something that's something after the dot is called an attribute. And it says an int object, which means an integer in memory, has no attribute location. So if you see an error like this, you know that maybe Steve isn't what you think it is. Yes, that's a very good question. The naming of Steve is that limited to the blend file or to anything else. And because we're talking about Python here, it's all about instructions that are being executed. So before this line Steve equals something is executed, it doesn't exist. There is no such thing as Steve. It is created on the fly when that line is executed. So it isn't even limited to that particular blend file because the next time you load up the blend file, the script hasn't executed yet. You start with a clean slate as far as Python is concerned. And so the name Steve has gone until it has executed again. And then it only lives in memory, so you can save the blend file. But that particular name Steve, it's gone. It has no meaning anymore.  So it runs the entire script from top to bottom. And at some point you say, OK, Steve is the thing I want to work with, and then you work with it. So every time the line number 2, 3, and 4 are executing, that means that number 1 has already been executed and Steve is available for use. That sounds a bit weird. So this whole concept of we have a name and what it refers to can change over time gives rise to Blender's context. And this is the thing that in your script you will use all the time. It's available as bpy.context.something. And that something depends on what you want to use it for. So you have .activeObject, which means the currently active object. You have .selectedObjects, which are the list of currently selected objects, and so on. I'm going to speed up a little bit because it's already half past 11. So you can get bpy.context.activeObject. If you want to know the name of it, do .name. If you want to have the modifiers list, you get .modifiers, and then you can look at it by name again, and then you have options of that particular modifier. You can keep dotting, and dotting, and dotting. And this you can also see in, if I can all tap, yeah. So let's add, oh, I can't click. Let's add a modifier here. Decimate modifier. And here you actually see that whole thing. So you've got bpy.data.objects.icosphere300, because we just added a few, modifiers.decimate.vertexgroup. And that just gives you the information. But it's particular to this object. So say we have, I don't know, 300 icospheres, and we all added meshes to that. You can replace this bit with bpy.context.activeObject, if you only want your script to look at the current active object. And sometimes you don't even need a name if you want to do, but I'll skip that. So to recap, everything is an object. Names refer to objects. We've seen how to use a context very briefly. And you can just dig through these names with the dot and the control space in the Python console. So you can look it up from that tooltip, but you can also just browse around, pressing dot control space, see what kind of list of interesting stuff you get. Next thing is stuff on lists. It's called looping or iterating over a list. It's like going over a list and hitting everything in there. As I just said, bpy.context.selectedObject is a list of all these selected objects. It changes over time depending on what you do in Blender's interface. And let's just copy paste this into Blender and see what happens. There we go. I've selected a few. And there we have the name of the selected objects. So the way it works is you say for some name. Could be Steve, could be ob, because we're now working with objects, we usually use ob. In whatever thing that contains many things that you want to loop over. And a column. And after that, you can see that I put four spaces. And this is how Python knows which bits to keep repeating and which bits not. So I can do this again and do that and then go back and say print hello. What did I do wrong? I don't know. It's wonderful, it's wonderful. There's probably me messing around with my Blender install as I'm a developer and mess around with stuff. What you would have seen was all those names because that first print statement was indented. That meant that it was part of the loop body and then the next print statement was pulled back again. That means it's not part of the loop body so it's only executed after loop is done. Yes. Do you need four spaces exactly? Yes and no. It's all up to you as far as Python is concerned. So any consistent white space would do. If you want to use a tab coverter, that's fine. If you want to use two spaces or eight spaces, that's fine. And fortunately, nowadays, mixing up spaces and tabs is forbidden as long as you're consistent. So that's the yes part of this answer. The no part is that there is the Python style guide and that says, OK, just use four spaces. If you Google it, it's PEP8, the Python enhancement proposal number eight that shows you how to name things, when to use underscores between words, when to use capital letters, when how many spaces to use, et cetera. And the thing is if you adhere to that, initially it's your own personal choice because it's your own personal script. But then if you want to go on to, say, the Stack Exchange website, you want to have some help with your script because you can't figure something out, it really helps in your response. If you follow that standard Python style guide, then people will be more likely to understand what you're coding because it's easier for their eyes because they're used to it. And it's more likely that you get a useful answer. It's also for collaboration is nice if everybody uses the same programming style. So another thing that we can do is not just print a name, but we can also modify a name. So we can just say, op.name equals op.name.upper. So let's see if I can copy, paste this in here. No, you know what? Let's just restart Blender, duplicate this cube a few times, select everything. Op.name equals op.name.upper.  That means that I have to do this part first because otherwise I don't know what to do with the rest. So it computes op.name.upper. That becomes cube in all capital letters because you can do like cube.upper is cube. And then it assigns it to op.name again. So it's a, it can look very strange that you say, well, the name is not quite the name. And if you say that to somebody, they may think you're a bit thin in the head. But for computer, this actually makes sense because it sees it as something to execute. And now we should see, well, there you have it in the corner, it's all capitalized. So you could extend this question, yes. All right, so the question is, is op.name now defined as op.name.upper? And will that stay that way? Or is something else going on? Did I? Yes, something else is going on. A name refers to an object. So before I did this, the cube was called cube with a capital C and lowercase rest. And that string of characters, cube, was in memory. And then op.name was just a little pointer pointing at it saying, yeah, that is my name. That's my content basically, that's my name. And then what we did was take that, construct a new string in memory. That is cube with all capitals. And that is basically this part. This says, construct that for me in memory. And then by assigning it to this name, that little pointer, op.name that pointed to the original string now points to the new one. And that is a fixed situation. That if you change, if you save your blend file, that is what will be saved to disk, the content of Blender's memory. I hope that answers your question. So that relation. Yes. So the question is, if you, right. So the question is, will it mess up something in the future because I'm now redefining something. And maybe you forget that you've redefined something and will that cause problems in the future? I think it's a brilliant question. It won't mess up anything. That relationship that it was something else that we turned into an uppercase version of itself. After this has been executed, it's forgotten. It doesn't matter, it's the new thing now, it's the new name. So if Steve becomes Alan, then from then on it's Alan. And the history is forgotten. So it's exactly the same as if you would go to every single object, go to its name property, type in the name in capital letters. That would do exactly the same thing as in the script except that here you've automated it. Very good question. What would happen if you would rename an object to a name that already exists? Exactly the same as what would happen if you typed it in. So I think by heart it would change the object to the name that you give it. And then the other one gets the .00 something suffix. And that is a very good question. It hints on what I'm not going to be able to reach, I think, in the presentation. So I'll just do it now. A lot of scripters think about these objects in say, Blender objects by name. So that's cube, that's Steve, that's Victor, that's Coro. And when you start scripting it's very tempting to keep using that name. Especially since in the tooltip you also see Bpi.data objects and then the name of the object. So it seems like a nice identifier for the thing. And my suggestion is don't. I can see if I can... Raise to that slide. Here we go. So don't try this at home. Every script if you start running it from the anything but the Python console it has to start with import Bpi. That binds the name Bpi to Blender's Python interface and from then on you can do Bpi.something. Before that Python doesn't even know you want to use it as that name. In the Python console in Blender this is already done for you as a convenience. But in your script you have to do it yourself. And then we create a cube in the same way just blame copy paste from the user interface and I call a function reset position with the name of that cube. Because I know if you create a cube it's called cube. And reset position. So I'm skipped ahead a bit. You can define functions with our bits of code that take a name. In this case it's reset position. And it gets parameters. In this case it's opname. And that parameter points to whatever I put in. So in this case this contains the string cube. This looks up as we've seen before Bpi data objects cube. And then we set the location to zero. This is a silly example but it brings across what's going on. Because that cube might not be cube. It might be cube.0025 if you're already added a few. So this is something tricky because it may break your code unexpectedly. You may test this on an empty Blender file and it will just work fine. Or maybe you test this with a default cube and then adding an icosphere and it will work fine. But then for other people it won't. So that's so tricky about using names. Also names are not unique. And this is something people also tend to forget. You can link in objects from other blend files. So I can have a cube that is local to this blend file. And I can link in a cube that is stored in another blend file. And then if you have 25 of those cubes linked in they can all be called cube but all come from different blend files. So you never know which one you will get if you just use the name. So the solution is, as you guys all know because you're all Blender artists, if you add a cube it becomes the active object. And we've seen bpoint.context.activeObject which is a reference to exactly that object that was just added. And if you use that, pass it as a parameter then you can just say ob.location equals 0000 and you've done exactly the same thing as you've done before. Except that you're 100% certain it works on the object that you just added. So that's a little discretion. There's a sidetrack on naming. Any questions about this? Yeah. Well maybe just grab this one so I don't have to repeat it. Interesting. I wouldn't, anybody? Yes. Yes. So for the guys listening on YouTube most likely there's a difference between what is exported. So you could change the object name or you could change the mesh name and probably one of the two is used in the obj import. The mesh you can reach by .data by the way. So if you have the object, so bpoint.context.activeObject or one of the selected objects you're looping over, you have that object, then you want to reach the mesh or the curve, if you're talking about a curve object or the text information, if you're talking about a text object, is all .data. So the thing that is linked inside that object is always .data. That's just something to remember because if you look up .mesh because you're looking for the mesh, you won't find it. We've already been there. So let's look at a more or actually useful example. Say you want to select all hidden objects that have .00 in their name. This is just an example, but I think you can always already see that if you can do this, you can also say select everything that has .00 in their name and you also know how to manipulate the name so then you can say remove that .something suffix from it. Like this you can extend to, oh, I've duplicated all my objects and then remove the originals and now I want to get rid of all these .something suffixes. This is a kind of code that you would use. So again, it starts with import PPI, then a little comment that's very important when coding. Comment the broad steps of your code and when it comes a little bit trickier, also comment why you're doing it that way.  So we're going to select all hidden objects which means that after this, I want that my selection reflects that. So we start by deselecting everything, then we go over all the objects in the current scene. So the current scene is given by BPI.context.scene and all the objects that are linked in that scene, you can find in that objects. We loop over them. Object.hide is either true or false. It's a checkbox. It's called a Boolean after Mr. Boole who invented all the logic behind that. And with an if statement, you can say, okay, if this is true, then do this, else do that. The else clause is optional. So this allows your code to branch. So far we've seen stuff that always happened. Every name was converted to uppercase. Here we can be more granular. So if it's not hidden, it doesn't match our criteria of the objects we want to operate on. So we say continue. That means stop with whatever you're doing in this iteration with this particular object, skip whatever I'm going to write next and just go to the next iteration of the for loop. Go look at the next object. If .00 not in op.name, some string in some other string gives you a true or a false depending on whether it's in there or not. And if you add a not in between, then it's exactly the opposite. So it reads pretty much like English, this. That's also why I like Python. It's very, very readable. Who agrees, by the way, that this is readable? Pretty okay. Who thinks this is not readable? Good. It's continued the same as return. In a sense, it's a flow control command. So it does cause your code execution path to jump. In this case, it basically means skip all the way to the end of this for block and continue with the next one. If you were on the last object, it would just stop looping because it's done. If you're on the first, it will continue to the second, et cetera. And this is also an approach that I really like to do. I will, it's been messing up the indentation. This will cause an error because Python won't understand what I mean. This has to be like four spaces that way. I will try and fix this before I put the slides online. But this is what we actually want to do. We want it to select it. So we set the select property to true and we want to unhide it because otherwise they were hidden. You can select hidden objects, but I want to see what's going on. I want to do something with that selection later. Maybe delete it, maybe move them to a different layer. So I want to unhide them. So I set up.hide equals false. And that is the script that selects all hidden objects that have .00 in their name. And as you can see, I've taken a bit of an opposite approach to this. Instead of saying if the object is hidden and it has .00 in op.name, I'm going to execute this code. And that's perfectly fine, but it does mean that if you add yet another condition, maybe you want to check that the color is red. Maybe you want to check that it's actually a mesh object before doing something. That one if statement becomes longer and longer and longer and longer. And with this, you just add two more lines to your code. And then the bit that actually does something is always here at the bottom. It's much easier to spot. Yes. Yes, it's all about, we loop over everything here. This is indiscriminate theory, everything. Then we exclude what we don't want to see. And then we do the thing. And I apply this to pretty much every programming I do, also on Blender Cloud. Say you have some entry point into the web server and then I say, if you're not allowed to do this, return an error message. And then it breaks away from the control flow. It returns that error message you're done. So in the end, when you see those steps of validation and maybe you typed your passwording wrong, et cetera, et cetera, then you get to the block that actually does the thing. And if you do, if it's good, then if it's good and if the other thing is good and if the other thing is good, you start moving to the side and then you get to the else clause. Oh, but if that one wasn't good, then we have to do this. And then the password was wrong and then we do this. Oh, you didn't type the password at all. Oh, that was there. And you get this curve in your code. It becomes a mess. So excluding is a nice approach. Well, yes, another question. Hello, two questions. The first one is, are we able to assign something with a frame number? And the second question, can we put in some code that gets called when the frame changes? Thank you. The answers are yes and yes. Thank you. You're welcome. So frames are putting stuff in F curves. You can do that. Basically, you have to do a few different steps. I hope I still know them by heart. I've used it a lot myself. With the crowd simulation that I did during my PhD research, I wanted to do this a lot. I used the game engine to run the simulation which recorded all the motions of the crowd agents to F curves. And then I also wanted to store some choices that my crowd simulation system made and also put them into animation data. Angles that it found between different characters, distances, that kind of stuff. So basically what you have to do is first you have to ensure that there is an animation data block for that particular object. Which is something like B pi dot, I'm going to see C by the way because here, you see C equals B pi dot context. So here you can just type C. It's like your context, Steve. Yeah. C dot active object. Animation data lives on the object level. So this, and then animation, there we go. Data create, create animation data to this ID. ID is another word for data block, I think in Blender's memory. Note that not all the ID types support this. Yeah, fine, we know it's a mesh, it does. So this creates an anim data object. And then there we go, that's that animation data. It's an optimization, like normally in the user interface, you don't have to do this. You just say I want to have a keyframe here and then Blender does this behind the scenes. But when you're scripting, you have to do this automatically. It doesn't create animation data for every object because that would be very inefficient. So now that we have this, how do we do that again? Well, you can see the drivers, you can see, hey, there we go, keyframe insert. And that takes all the way up there, there we go. A data path, an index, a frame. That data path you can also get from the user interface. So these are the things that are location or location, bracket zero. So let's say I want to keyframe the location. There you go, copy data path. And we paste it in. Oh, we press the wrong button. Oh, this happens by the way. You see the little dots that did change? The standard prompt is the little arrows. It changes to dots, it did that in for loop. The column, it knew I had to have an indented bit of code so it started with dots and it stops that when it understands that you're done. Here, I try to do backspace, I hit enter. And it has an open bracket. It knows this has to be balanced. So if you see those dots, you know that you've told Python something that needs to be continued and to get out of this, you can try and keep entering but it doesn't work. So you have to just close the thing, swallow the error message that you get. Jesus, oh, I hope that it's still working. So the data path equals one. Then, sorry, equals our location. Then we had that index that had a default value of minus one, which means no, no index whatsoever. This works for a property that's just one number. Opacity, that will be have index minus one because it's one number. But location, as we've seen, takes a zero, one, two. It consists of multiple things, color as well. So then we have to say the index, well, say we want to change the x-coordinate index zero, add a certain frame, let's say frame 25, is that enough? No, I've ruined it. I have ruined it. That's beautiful. It's the live demo effect. I've never seen this error before. Restart blender. Yeah. Oh well, in short, that is the keyframe insert function is where you want to be. Then you can, yes. So say that again, you can copy from? Maybe you could call it from the log window. Yeah, yeah, you could do that. I hardly use that myself but there are people very happy with it. Do you say insert single keyframe? No, nothing coming up. I think that, there you go. I'm moving it here, what does it say? Yeah, it just has that translate operator call here because that log window, it doesn't log everything that's happening. It logs the operators and operators are the bits of code that are linked to hotkeys, menu items, buttons, everything. All the user interface stuff. But inserting a keyframe as we saw was calling a function on that NM data and that's not an operator so it won't get logged there. The default frame is the current frame but you can also say I want to insert it at frame one, two, three, four, five. So you could be reading in a text file that has location on every line as like three numbers for the location. You could loop over every line, split every line into three numbers and create keyframe from that. There's actually a good one because it's fast. It doesn't require a blender to change the current frame so you can just insert keyframes like that. If you say, okay, current frame equals something then you move blender to a new frame then you use some operator to insert that keyframe there and then you move to the next frame. That's going to be much slower. So we're already one minute past and who's the monkey work? Yeah, well, this is basically what we've already seen except that now there's 600 tiny monkeys. I don't do them in a straight line but in a grid of 25 rows of 25. If you're interested in how to create the monkeys, how to smooth them, subdivide them, you can do it like this. I will race through the slide. I will be here today and tomorrow. If you have questions, maybe if more people have questions or interested in more scripting stuff, we can book a room. We can do a more like a smaller scale workshop. Walk up to me and then we can do that. One common thing and the last thing I want to really cover is do not modify the collection that you're looping over. If you're looping over all selected objects, don't start selecting other objects. Don't start de-selecting them because you're looping over that list of selected objects. If you start changing that, Python becomes confused, things drop out, it could crash, it could just skip certain objects. So don't do that. So here this will fail. You're looping over contacts of selected objects, you say all those selected was false. So a much safer approach is to create a list of empty lists, that's the square brackets. To de-select dot append will append the object to that list and that's all we do. So instead of having Steve, it becomes to de-select zero and then the next one becomes to de-select one and then to de-select. So while we're looping over the selected objects, we're just adding them to a list if we find them interesting. And then once we're done, we say, okay, for every object in that list that we found interesting, we're going to do something. We're going to de-select them. And now we're no longer looping over de-selected objects but just offered to de-select. And again, we're not changing to de-select, we're just looping over it. And by the time we're done, Python knows that