[{"data":1,"prerenderedAt":430},["ShallowReactive",2],{"footer-primary":3,"footer-secondary":93,"footer-description":119,"ai-ai-focal-point-detection":121,"ai-ai-focal-point-detection-next":166,"sales-reps":178},{"items":4},[5,29,49,69],{"id":6,"title":7,"url":8,"page":8,"children":9},"522e608a-77b0-4333-820d-d4f44be2ade1","Solutions",null,[10,15,20,25],{"id":11,"title":12,"url":8,"page":13},"fcafe85a-a798-4710-9e7a-776fe413aae5","Headless CMS",{"permalink":14},"/solutions/headless-cms",{"id":16,"title":17,"url":8,"page":18},"79972923-93cf-4777-9e32-5c9b0315fc10","Backend-as-a-Service",{"permalink":19},"/solutions/backend-as-a-service",{"id":21,"title":22,"url":8,"page":23},"0fa8d0c1-7b64-4f6f-939d-d7fdb99fc407","Product Information",{"permalink":24},"/solutions/product-information-management",{"id":26,"title":27,"url":28,"page":8},"63946d54-6052-4780-8ff4-91f5a9931dcc","100+ Things to Build","https://directus.io/blog/100-tools-apps-and-platforms-you-can-build-with-directus",{"id":30,"title":31,"url":8,"page":8,"children":32},"8ab4f9b1-f3e2-44d6-919b-011d91fe072f","Resources",[33,37,41,45],{"id":34,"title":35,"url":36,"page":8},"f951fb84-8777-4b84-9e91-996fe9d25483","Documentation","https://docs.directus.io",{"id":38,"title":39,"url":40,"page":8},"366febc7-a538-4c08-a326-e6204957f1e3","Guides","https://docs.directus.io/guides/",{"id":42,"title":43,"url":44,"page":8},"aeb9128e-1c5f-417f-863c-2449416433cd","Community","https://directus.chat",{"id":46,"title":47,"url":48,"page":8},"da1c2ed8-0a77-49b0-a903-49c56cb07de5","Release Notes","https://github.com/directus/directus/releases",{"id":50,"title":51,"url":8,"page":8,"children":52},"d61fae8c-7502-494a-822f-19ecff3d0256","Support",[53,57,61,65],{"id":54,"title":55,"url":56,"page":8},"8c43c781-7ebd-475f-a931-747e293c0a88","Issue Tracker","https://github.com/directus/directus/issues",{"id":58,"title":59,"url":60,"page":8},"d77bb78e-cf7b-4e01-932a-514414ba49d3","Feature Requests","https://github.com/directus/directus/discussions?discussions_q=is:open+sort:top",{"id":62,"title":63,"url":64,"page":8},"4346be2b-2c53-476e-b53b-becacec626a6","Community Chat","https://discord.com/channels/725371605378924594/741317677397704757",{"id":66,"title":67,"url":68,"page":8},"26c115d2-49f7-4edc-935e-d37d427fb89d","Cloud Dashboard","https://directus.cloud",{"id":70,"title":71,"url":8,"page":8,"children":72},"49141403-4f20-44ac-8453-25ace1265812","Organization",[73,78,84,88],{"id":74,"title":75,"url":76,"page":77},"1f36ea92-8a5e-47c8-914c-9822a8b9538a","About","/about",{"permalink":76},{"id":79,"title":80,"url":81,"page":82},"b84bf525-5471-4b14-a93c-225f6c386005","Careers","#",{"permalink":83},"/careers",{"id":85,"title":86,"url":87,"page":8},"86aabc3a-433d-434b-9efa-ad1d34be0a34","Brand Assets","https://drive.google.com/drive/folders/1lBOTba4RaA5ikqOn8Ewo4RYzD0XcymG9?usp=sharing",{"id":89,"title":90,"url":8,"page":91},"8d2fa1e3-198e-4405-81e1-2ceb858bc237","Contact",{"permalink":92},"/contact",{"items":94},[95,101,107,113],{"id":96,"title":97,"url":8,"page":98,"children":100},"8a1b7bfa-429d-4ffc-a650-2a5fdcf356da","Cloud Policies",{"permalink":99},"/cloud-policies",[],{"id":102,"title":103,"url":81,"page":104,"children":106},"bea848ef-828f-4306-8017-6b00ec5d4a0c","License",{"permalink":105},"/bsl",[],{"id":108,"title":109,"url":81,"page":110,"children":112},"4e914f47-4bee-42b7-b445-3119ee4196ef","Terms",{"permalink":111},"/terms",[],{"id":114,"title":115,"url":81,"page":116,"children":118},"ea69eda6-d317-4981-8421-fcabb1826bfd","Privacy",{"permalink":117},"/privacy",[],{"description":120},"\u003Cp>A composable backend to build your Headless CMS, BaaS, and more.&nbsp;\u003C/p>",{"id":122,"slug":123,"vimeo_id":124,"description":125,"tile":126,"length":127,"resources":8,"people":8,"episode_number":128,"published":129,"title":130,"video_transcript_html":131,"video_transcript_text":132,"content":8,"status":133,"episode_people":134,"recommendations":146,"season":147,"seo":165},"42784fad-29d4-4f01-a076-43f1817655b7","ai-focal-point-detection","945761249","Determine an image's primary point of interest with this custom operation, powered by OpenAI.","f93156b0-e977-44bf-8616-71ae745e47d9",4,3,"2024-05-16","AI Focal Point Detection","\u003Cp>Speaker 0: The AI focal point detection operation uses AI to determine the point of interest inside of an image. You can combine this with Directus' new focal point functionality to make sure that as images are automatically cropped, or cropped via API requests that your points of interests are are not lost in that cropping. Otherwise, by default, it happens from the center. So that's what we're gonna set up today. We're gonna do this whenever a new file is uploaded.\u003C/p>\u003Cp>So focal point. We're gonna do this whenever a new file is uploaded. So we will do files dot upload. This will run with every single file upload regardless of location, regardless of file types in the reel. You will want a condition just to check that this is indeed an image.\u003C/p>\u003Cp>The documentation for this operation in the marketplace, the listing page, shows you how to set that up. For now, we're gonna assume every file needs this treatment applied to it. So we are gonna go in, and we are gonna use our AI focal point detection end point. Now this uses OpenAI. So we have to put in our open AI API key and a full file URL.\u003C/p>\u003Cp>So first thing is our director's project URL, so that's mine, slash assets slash and then a dynamic value trigger dot key. That's the ID of the image that was uploaded and triggered this flow to actually start. So that will come back with an object, which contains a focal point x, a focal point y, and a reason. The reason could be interesting based on your use case. We're not gonna do anything with it.\u003C/p>\u003Cp>Instead, we're just gonna update the directives files item, specifically the item that triggered this whole flow to start. And we are going to update the focal point x value to be the value that came from the last operation focal point x. We're gonna do the same for focal point y. And, again, you know, you may choose to do something, you may choose to do something with the reason, but we are not going to. So focal point y and with Jason no hanging commas.\u003C/p>\u003Cp>That's the whole thing. That's how you use AI to set up focal points. It's really, really cool, and really leverages this new feature of Directus along with AI to just really make your media library a lot more expressive when you're using it in your actual applications. So let's try this out. I just uploaded a new image, that should have triggered that whole flow, the focal points to be, to be generated, and then save to that back to the focal point x and y value.\u003C/p>\u003Cp>And there it is. Now you don't need to do anything more with these values. When you start to crop the image using URL parameters, using the on the fly media transformations that directors provide, that will be the central point which the image is cropped around. So I hope you found this interesting, and I'll see you in the next video.\u003C/p>","The AI focal point detection operation uses AI to determine the point of interest inside of an image. You can combine this with Directus' new focal point functionality to make sure that as images are automatically cropped, or cropped via API requests that your points of interests are are not lost in that cropping. Otherwise, by default, it happens from the center. So that's what we're gonna set up today. We're gonna do this whenever a new file is uploaded. So focal point. We're gonna do this whenever a new file is uploaded. So we will do files dot upload. This will run with every single file upload regardless of location, regardless of file types in the reel. You will want a condition just to check that this is indeed an image. The documentation for this operation in the marketplace, the listing page, shows you how to set that up. For now, we're gonna assume every file needs this treatment applied to it. So we are gonna go in, and we are gonna use our AI focal point detection end point. Now this uses OpenAI. So we have to put in our open AI API key and a full file URL. So first thing is our director's project URL, so that's mine, slash assets slash and then a dynamic value trigger dot key. That's the ID of the image that was uploaded and triggered this flow to actually start. So that will come back with an object, which contains a focal point x, a focal point y, and a reason. The reason could be interesting based on your use case. We're not gonna do anything with it. Instead, we're just gonna update the directives files item, specifically the item that triggered this whole flow to start. And we are going to update the focal point x value to be the value that came from the last operation focal point x. We're gonna do the same for focal point y. And, again, you know, you may choose to do something, you may choose to do something with the reason, but we are not going to. So focal point y and with Jason no hanging commas. That's the whole thing. That's how you use AI to set up focal points. It's really, really cool, and really leverages this new feature of Directus along with AI to just really make your media library a lot more expressive when you're using it in your actual applications. So let's try this out. I just uploaded a new image, that should have triggered that whole flow, the focal points to be, to be generated, and then save to that back to the focal point x and y value. And there it is. Now you don't need to do anything more with these values. When you start to crop the image using URL parameters, using the on the fly media transformations that directors provide, that will be the central point which the image is cropped around. So I hope you found this interesting, and I'll see you in the next video.","published",[135],{"people_id":136},{"id":137,"first_name":138,"last_name":139,"avatar":140,"bio":141,"links":142},"82b3f7e5-637b-4890-93b2-378b497d5dc6","Kevin","Lewis","a662f91b-1ee9-4277-8c9d-3ac1878e44ad","Director of Developer Experience at Directus",[143],{"url":144,"service":145},"https://directus.io/team/kevin-lewis","website",[],{"id":148,"number":149,"year":150,"episodes":151,"show":162},"25c1b8ec-a696-4551-8d13-4e2abfbc7cb5",1,"2024",[152,153,122,154,155,156,157,158,159,160,161],"6aee5cdc-3d0a-4fa6-acee-49c1860a553d","50b4447b-73c7-4b49-9e70-d210595d1a7e","d948815e-2417-4319-814b-87d7c5fbdd43","2d94463a-5c39-4274-ba39-287e9059cc9c","afb17dd7-48b9-4297-ada8-f22c1daa82ce","be92a983-6a6a-411f-8f07-2cba4aa9308c","afc8f09e-f82f-473d-8643-14176380ae52","3d978332-855b-4eb0-a878-b932e0f9d704","40e14c84-7b60-4fc2-a125-beec15e39a28","be07b8cd-0d0f-4713-affe-88c210c29d9a",{"title":163,"tile":164},"Directus AI","b3609dd7-2fea-4925-ae4a-8a4a69a1b64b",{"title":8,"meta_description":8},{"id":154,"slug":167,"season":148,"vimeo_id":168,"description":169,"tile":170,"length":127,"resources":8,"people":8,"episode_number":127,"published":129,"title":171,"video_transcript_html":172,"video_transcript_text":173,"content":8,"seo":174,"status":133,"episode_people":175,"recommendations":177},"ai-image-generation","945761480","Generate new images within Directus Automate with this custom operation, powered by OpenAI.","ad0578de-c6af-432b-aa4d-6749ee367e0e","AI Image Generation","\u003Cp>Speaker 0: The Directus AI image generation operation will take in a prompt and a couple of other settings and use OpenAI's DALL E 3 model to generate an image, which you can then save into your director's project. So here we have a recipes collection and an item with a recipe that I wrote and there is an empty field here for an image. Because I'm actually not a good chef we're gonna use AI to generate an image which we can then use on things like social media or the recipe website header, things like that. So, we are going to create a new flow, and we'll call this one generate image, and we'll make this a manual flow trigger on the recipes collection. So a button appears on the right.\u003C/p>\n\u003Cp>Now we are gonna manually give it a prompt because we don't have an amount of text suitable to send for an image generation, only a big recipe that's too long. So without a single field here, I'll just call it prompt. You might choose to call it something nicer, and we'll just make it a little text input here. Now that had a key of prompt, and what that means is whenever that button is pressed, we will receive the ID of the item where we press the button and also the prompt itself. And so we are gonna use that prompt and send it off for image generation.\u003C/p>\n\u003Cp>So we will go ahead and create a new operation here, and we will use the AI image generation operation. Now we need to use our open AI API key, we'll pop that in here and our prompt. And once again this is gonna be dynamic so trigger dot body dot prompt. We want high quality, standard quality will do, and we'll make it square so we can share it on our Instagram grid. So we'll hit save.\u003C/p>\n\u003Cp>This will result in having, a URL. So we now need to import that URL into our directors project. To do that, we will use the request URL operation, and we'll make a post request to this Directus project URL slash files slash import. Just a note that I've made image, file creation body, we are going to set the URL to the value that was returned from the last operation, which is just a URL string. So that will import the image to our file library.\u003C/p>\n\u003Cp>The final step is that we want to save that image into into the actual item where we triggered the flow to begin. So we're gonna add one final operation here, which is to update data. We are going to update the recipe specifically trigger dot body dot keys 0 which is the ID. And we are going to update the file value. File, and that is going to be last dot data dot data dot ID because that is a response for an API call.\u003C/p>\n\u003Cp>And that should be it. You should be able to press the button. It will come up with a box for the prompt. It will go and generate the image, import it, and save it back to the image. So let's try that out.\u003C/p>\n\u003Cp>Let's go in here. Let's generate image. I've got this rudimentary prompt written, and we'll run Flow on current item. Now image generation takes a little while so we'll come back when it's done. We're back and it did not work because it is not called file, it is called image.\u003C/p>\n\u003Cp>So we're gonna update that and we'll go back and run it again. Welcome back, and it turns out I'm not a very good engineer because that is not an easy stuffed bell pepper. It is a bowl stuffed with bell peppers. But in any case, you need to write better prompts but that is how you use the Directus AI image generation operation. I'll see you in the next video.\u003C/p>","The Director's AI image generation operation will take in a prompt and a couple of other settings and use OpenAI's DALL E 3 model to generate an image, which you can then save into your director's project. So here we have a recipes collection and an item with a recipe that I wrote and there is an empty field here for an image. Because I'm actually not a good chef we're gonna use AI to generate an image which we can then use on things like social media or the recipe website header, things like that. So, we are going to create a new flow, and we'll call this one generate image, and we'll make this a manual flow trigger on the recipes collection. So a button appears on the right. Now we are gonna manually give it a prompt because we don't have an amount of text suitable to send for an image generation, only a big recipe that's too long. So without a single field here, I'll just call it prompt. You might choose to call it something nicer, and we'll just make it a little text input here. Now that had a key of prompt, and what that means is whenever that button is pressed, we will receive the ID of the item where we press the button and also the prompt itself. And so we are gonna use that prompt and send it off for image generation. So we will go ahead and create a new operation here, and we will use the AI image generation operation. Now we need to use our open AI API key, we'll pop that in here and our prompt. And once again this is gonna be dynamic so trigger dot body dot prompt. We want high quality, standard quality will do, and we'll make it square so we can share it on our Instagram grid. So we'll hit save. This will result in having, a URL. So we now need to import that URL into our directors project. To do that, we will use the request URL operation, and we'll make a post request to this Directus project URL slash files slash import. Just a note that I've made image, file creation body, we are going to set the URL to the value that was returned from the last operation, which is just a URL string. So that will import the image to our file library. The final step is that we want to save that image into into the actual item where we triggered the flow to begin. So we're gonna add one final operation here, which is to update data. We are going to update the recipe specifically trigger dot body dot keys 0 which is the ID. And we are going to update the file value. File, and that is going to be last dot data dot data dot ID because that is a response for an API call. And that should be it. You should be able to press the button. It will come up with a box for the prompt. It will go and generate the image, import it, and save it back to the image. So let's try that out. Let's go in here. Let's generate image. I've got this rudimentary prompt written, and we'll run Flow on current item. Now image generation takes a little while so we'll come back when it's done. We're back and it did not work because it is not called file, it is called image. So we're gonna update that and we'll go back and run it again. Welcome back, and it turns out I'm not a very good engineer because that is not an easy stuffed bell pepper. It is a bowl stuffed with bell peppers. But in any case, you need to write better prompts but that is how you use the Directus AI image generation operation. I'll see you in the next video.","b6a9a85e-53cc-4086-b7cd-4096ba305a02",[176],"d711f2a8-80dc-4f48-95c8-8b21e0171d66",[],{"reps":179},[180,236],{"name":181,"sdr":8,"link":182,"countries":183,"states":185},"John Daniels","https://meet.directus.io/meetings/john2144/john-contact-form-meeting",[184],"United States",[186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235],"Michigan","Indiana","Ohio","West Virginia","Kentucky","Virginia","Tennessee","North Carolina","South Carolina","Georgia","Florida","Alabama","Mississippi","New York","MI","IN","OH","WV","KY","VA","TN","NC","SC","GA","FL","AL","MS","NY","Connecticut","CT","Delaware","DE","Maine","ME","Maryland","MD","Massachusetts","MA","New Hampshire","NH","New Jersey","NJ","Pennsylvania","PA","Rhode Island","RI","Vermont","VT","Washington DC","DC",{"name":237,"link":238,"countries":239},"Michelle Riber","https://meetings.hubspot.com/mriber",[240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,217,428,429],"Albania","ALB","Algeria","DZA","Andorra","AND","Angola","AGO","Austria","AUT","Belgium","BEL","Benin","BEN","Bosnia and Herzegovina","BIH","Botswana","BWA","Bulgaria","BGR","Burkina Faso","BFA","Burundi","BDI","Cameroon","CMR","Cape Verde","CPV","Central African Republic","CAF","Chad","TCD","Comoros","COM","Côte d'Ivoire","CIV","Croatia","HRV","Czech Republic","CZE","Democratic Republic of Congo","COD","Denmark","DNK","Djibouti","DJI","Egypt","EGY","Equatorial Guinea","GNQ","Eritrea","ERI","Estonia","EST","Eswatini","SWZ","Ethiopia","ETH","Finland","FIN","France","FRA","Gabon","GAB","Gambia","GMB","Ghana","GHA","Greece","GRC","Guinea","GIN","Guinea-Bissau","GNB","Hungary","HUN","Iceland","ISL","Ireland","IRL","Italy","ITA","Kenya","KEN","Latvia","LVA","Lesotho","LSO","Liberia","LBR","Libya","LBY","Liechtenstein","LIE","Lithuania","LTU","Luxembourg","LUX","Madagascar","MDG","Malawi","MWI","Mali","MLI","Malta","MLT","Mauritania","MRT","Mauritius","MUS","Moldova","MDA","Monaco","MCO","Montenegro","MNE","Morocco","MAR","Mozambique","MOZ","Namibia","NAM","Niger","NER","Nigeria","NGA","North Macedonia","MKD","Norway","NOR","Poland","POL","Portugal","PRT","Republic of Congo","COG","Romania","ROU","Rwanda","RWA","San Marino","SMR","São Tomé and Príncipe","STP","Senegal","SEN","Serbia","SRB","Seychelles","SYC","Sierra Leone","SLE","Slovakia","SVK","Slovenia","SVN","Somalia","SOM","South Africa","ZAF","South Sudan","SSD","Spain","ESP","Sudan","SDN","Sweden","SWE","Tanzania","TZA","Togo","TGO","Tunisia","TUN","Uganda","UGA","United Kingdom","GBR","Vatican City","VAT","Zambia","ZMB","Zimbabwe","ZWE","UK","Germany","Netherlands","Switzerland","CH","NL",1773850433491]