[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"github-stars":3,"marketplace-site-banners":110,"clarifai":115},{"id":4,"node_id":5,"name":6,"full_name":7,"private":8,"owner":9,"html_url":27,"description":28,"fork":8,"url":29,"forks_url":30,"keys_url":31,"collaborators_url":32,"teams_url":33,"hooks_url":34,"issue_events_url":35,"events_url":36,"assignees_url":37,"branches_url":38,"tags_url":39,"blobs_url":40,"git_tags_url":41,"git_refs_url":42,"trees_url":43,"statuses_url":44,"languages_url":45,"stargazers_url":46,"contributors_url":47,"subscribers_url":48,"subscription_url":49,"commits_url":50,"git_commits_url":51,"comments_url":52,"issue_comment_url":53,"contents_url":54,"compare_url":55,"merges_url":56,"archive_url":57,"downloads_url":58,"issues_url":59,"pulls_url":60,"milestones_url":61,"notifications_url":62,"labels_url":63,"releases_url":64,"deployments_url":65,"created_at":66,"updated_at":67,"pushed_at":68,"git_url":69,"ssh_url":70,"clone_url":71,"svn_url":27,"homepage":72,"size":73,"stargazers_count":74,"watchers_count":74,"language":75,"has_issues":76,"has_projects":76,"has_downloads":76,"has_wiki":8,"has_pages":8,"has_discussions":76,"forks_count":77,"mirror_url":78,"archived":8,"disabled":8,"open_issues_count":79,"license":80,"allow_forking":76,"is_template":8,"web_commit_signoff_required":8,"has_pull_requests":76,"pull_request_creation_policy":85,"topics":86,"visibility":26,"forks":77,"open_issues":79,"watchers":74,"default_branch":106,"temp_clone_token":78,"custom_properties":107,"organization":108,"network_count":77,"subscribers_count":109},7122594,"MDEwOlJlcG9zaXRvcnk3MTIyNTk0","directus","directus\u002Fdirectus",false,{"login":6,"id":10,"node_id":11,"avatar_url":12,"gravatar_id":13,"url":14,"html_url":15,"followers_url":16,"following_url":17,"gists_url":18,"starred_url":19,"subscriptions_url":20,"organizations_url":21,"repos_url":22,"events_url":23,"received_events_url":24,"type":25,"user_view_type":26,"site_admin":8},15967950,"MDEyOk9yZ2FuaXphdGlvbjE1OTY3OTUw","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F15967950?v=4","","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus","https:\u002F\u002Fgithub.com\u002Fdirectus","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Ffollowers","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Ffollowing{\u002Fother_user}","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Fgists{\u002Fgist_id}","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Fstarred{\u002Fowner}{\u002Frepo}","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Fsubscriptions","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Forgs","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Frepos","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Fevents{\u002Fprivacy}","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Freceived_events","Organization","public","https:\u002F\u002Fgithub.com\u002Fdirectus\u002Fdirectus","The flexible backend for all your projects 🐰 Turn your DB into a headless CMS, admin panels, or apps with a custom UI, instant APIs, auth & more.","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fforks","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fkeys{\u002Fkey_id}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcollaborators{\u002Fcollaborator}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fteams","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fhooks","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fissues\u002Fevents{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fevents","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fassignees{\u002Fuser}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fbranches{\u002Fbranch}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Ftags","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fgit\u002Fblobs{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fgit\u002Ftags{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fgit\u002Frefs{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fgit\u002Ftrees{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fstatuses\u002F{sha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Flanguages","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fstargazers","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcontributors","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fsubscribers","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fsubscription","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcommits{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fgit\u002Fcommits{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcomments{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fissues\u002Fcomments{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcontents\u002F{+path}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcompare\u002F{base}...{head}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fmerges","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002F{archive_format}{\u002Fref}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fdownloads","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fissues{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fpulls{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fmilestones{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fnotifications{?since,all,participating}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Flabels{\u002Fname}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Freleases{\u002Fid}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fdeployments","2012-12-12T01:35:36Z","2026-07-18T05:08:19Z","2026-07-17T21:10:45Z","git:\u002F\u002Fgithub.com\u002Fdirectus\u002Fdirectus.git","git@github.com:directus\u002Fdirectus.git","https:\u002F\u002Fgithub.com\u002Fdirectus\u002Fdirectus.git","https:\u002F\u002Fdirectus.com",447310,36507,"TypeScript",true,4850,null,399,{"key":81,"name":82,"spdx_id":83,"url":78,"node_id":84},"other","Other","NOASSERTION","MDc6TGljZW5zZTA=","all",[87,88,89,90,91,92,6,93,94,95,96,97,98,99,100,101,102,103,104,105],"api","app","cms","composable","data-visualization","database","graphql","headless-cms","javascript","mariadb","mssql","mysql","no-code","node","postgresql","sql","sqlite","typescript","vue","main",{},{"login":6,"id":10,"node_id":11,"avatar_url":12,"gravatar_id":13,"url":14,"html_url":15,"followers_url":16,"following_url":17,"gists_url":18,"starred_url":19,"subscriptions_url":20,"organizations_url":21,"repos_url":22,"events_url":23,"received_events_url":24,"type":25,"user_view_type":26,"site_admin":8},326,[111],{"id":112,"icon":78,"content":113,"link":114,"include_paths":78,"exclude_paths":78},"5cf2f5f6-aecf-4395-8c23-69de326fdf02","Directus V12 is here","https:\u002F\u002Fdirectus.com\u002Fresources\u002Fv12-built-for-the-whole-team",{"metadata":78,"logo":116,"helpful_resources":117,"extensions":121,"date_updated":125,"user_updated":126,"date_created":127,"user_created":128,"sort":78,"id":129,"category":130,"description":131,"slug":132,"name":133,"content":134,"website":135,"status":136,"external_resources":137,"extensionDetails":138},"e6d62ce7-cfb3-4ff3-82e7-019d41014563",[118],{"title":119,"url":120},"Clarifai API Documentation","https:\u002F\u002Fdocs.clarifai.com\u002F",[122,123,124],"@directus-labs\u002Fai-alt-text-writer-operation","@directus-labs\u002Fai-image-moderation-operation","@directus-labs\u002Fai-text-extraction-operation","2025-07-31T13:05:13.514Z","1a9ab95a-93bc-4908-af85-0d42bb6e6aa6","2025-07-11T14:29:17.190Z","1cd0a355-b103-477d-9375-61e88f3110f8","df35b17b-e21f-4531-a2cd-2b8d07850a33","AI","Computer vision and AI image analysis with Clarifai's recognition models","clarifai","Clarifai","\u003Cp>Clarifai is a leading AI platform specializing in computer vision and image analysis. Their tools use advanced recognition models to identify, classify, and extract information from images, making them popular in fields that need accurate visual data processing.\u003C\u002Fp>\n\u003Cp>For teams working with Directus, Clarifai&rsquo;s integrations offer practical ways to manage and enhance visual content. With the AI Alt Text Writer extension, you can automatically generate descriptive alt text for images, improving accessibility and SEO without manual effort.\u003C\u002Fp>\n\u003Cp>The AI Image Moderation tool helps flag and filter out inappropriate or unwanted images before they reach your users, keeping your content safe and on-brand. If you need to pull text from images for indexing, search, or automation, the AI Text Extraction extension makes it easy to turn visual data into usable text. These tools help simplify the process of handling large amounts of image data within Directus.\u003C\u002Fp>\n\u003Cp>They support content creators and data managers by automating repetitive tasks, reducing the risk of human error, and speeding up workflows. If you&rsquo;re looking to add robust image recognition or moderation to your Directus project, Clarifai&rsquo;s extensions are a reliable choice for integrating AI-driven data tooling.\u003C\u002Fp>","https:\u002F\u002Fwww.clarifai.com","published",[],[139,198,253],{"name":123,"description":140,"verified":8,"id":141,"readme":142,"type":143,"last_updated":144,"host_version":145,"downloads":146,"total_downloads":147,"sandbox":76,"license":148,"publisher":149,"versions":158,"formatted_name":193,"formatted_readme":194,"formatted_description":140,"featured_image":195,"images":196,"recent_downloads_7_days":147,"recent_downloads_30_days":147},"Use Clarifai's Moderation Recognition Model to analyze image safety.","1fe238d2-c520-4306-b1d5-d81c05ade200","# AI Image Moderation Operation\n\nAnalyze images for drugs, suggestive or explicit material, powered by Clarifai.\n\n![The AI Image Moderation operation, showing a Clarifai API Token field, File URL, and threshold](https:\u002F\u002Fraw.githubusercontent.com\u002Fdirectus-labs\u002Fextensions\u002Fmain\u002Fpackages\u002Fai-image-moderation-operation\u002Fdocs\u002Foptions.png)\n\nThis operation contains four configuration options - a [Clarifai API Key](https:\u002F\u002Fclarifai.com\u002Fsettings\u002Fsecurity), a link to a file, and a threshold percentage for the concepts to be 'flagged'. It returns a JSON object containing a score for each concept, and an array of which concepts are over the threshold.\n\n![The output showing a JSON object containing a list of conecpts with values, and an array of flagged concepts.](https:\u002F\u002Fraw.githubusercontent.com\u002Fdirectus-labs\u002Fextensions\u002Fmain\u002Fpackages\u002Fai-image-moderation-operation\u002Fdocs\u002Foutput.png)\n\n## Output\n\nThis operation outputs a JSON object with the following structure:\n\n```json\n{\n  \"concepts\": [\n    {\n      \"name\": \"drug\",\n      \"value\": \"99.99\"\n    },\n    {\n      \"name\": \"suggestive\",\n      \"value\": \"0.00\"\n    },\n    {\n      \"name\": \"gore\",\n      \"value\": \"0.00\"\n    },\n    {\n      \"name\": \"explicit\",\n      \"value\": \"0.00\"\n    }\n  ],\n  \"flags\": [\n    \"drug\"\n  ]\n}\n```\n\n## Flow Setup\n\n### Automatically Moderate New Files\n\nCreate a Flow with an **Event Hook** action trigger and a scope of `files.upload`. Use the AI Image Moderation operation, setting the File URL to `https:\u002F\u002Fyour-directus-project-url\u002Fassets\u002F{{ $trigger.key }}`, being sure to provide your specific Directus Project URL.\n\nThis will work if your file is public, but if it isn't, you can append `?access_token=token` to the File URL, replacing the value with a valid user token that has access to the file.\n\nThis operation will trigger on every new file upload, regardless of location or filetype. You may wish to add a conditional step between the trigger and moderation operation. The following condition rule will check that the file is an image:\n\n```json\n{\n    \"$trigger\": {\n        \"payload\": {\n            \"type\": {\n                \"_contains\": \"image\"\n            }\n        }\n    }\n}\n```\n","operation","2024-12-18T11:07:42.786Z","^10.10.0",[],0,"MIT",{"username":150,"verified":76,"id":151,"github_username":150,"github_name":152,"github_blog":153,"github_bio":154,"github_location":155,"github_company":156,"github_avatar_url":157},"ukmadlz","74ce2e77-733a-4e9a-b96d-93bf6264f622","Mike Elsmore","http:\u002F\u002Felsmore.me","(╯°□°）╯︵ TABLEFLIP","UK","@DigitalSpeed","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F804683?v=4",[159,178],{"version":160,"package":141,"publisher":161,"type":143,"host_version":145,"publish_date":162,"verified":8,"id":163,"url_repository":78,"url_homepage":78,"url_bugs":78,"file_count":164,"unpacked_size":165,"sandbox":76,"sandbox_requested_scopes":166,"license":148,"bundled":173,"maintainers":174},"1.0.0","8486d50d-a6bc-45c6-8627-60f3c144732c","2024-03-15T19:46:41.601Z","2b7dd32e-3c99-42ee-b383-fa935324fda1",4,5140,{"request":167,"log":172},{"urls":168,"methods":170},[169],"https:\u002F\u002Fapi.clarifai.com\u002Fv2\u002F**",[171],"POST",{},[],[175,176,177],10571,10572,10573,{"version":179,"package":141,"publisher":151,"type":143,"host_version":145,"publish_date":144,"verified":8,"id":180,"url_repository":78,"url_homepage":78,"url_bugs":78,"file_count":164,"unpacked_size":181,"sandbox":76,"sandbox_requested_scopes":182,"license":148,"bundled":187,"maintainers":188},"1.0.1","f767a1d6-51ec-412d-897c-d363874c9488",4703,{"request":183,"log":186},{"urls":184,"methods":185},[169],[171],{},[],[189,190,191,192],11739,11740,11741,11742,"AI Image Moderation Operation","\u003Ch1>AI Image Moderation Operation\u003C\u002Fh1>\n\u003Cp>Analyze images for drugs, suggestive or explicit material, powered by Clarifai.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fdirectus-labs\u002Fextensions\u002Fmain\u002Fpackages\u002Fai-image-moderation-operation\u002Fdocs\u002Foptions.png\" alt=\"The AI Image Moderation operation, showing a Clarifai API Token field, File URL, and threshold\">\u003C\u002Fp>\n\u003Cp>This operation contains four configuration options - a \u003Ca href=\"https:\u002F\u002Fclarifai.com\u002Fsettings\u002Fsecurity\">Clarifai API Key\u003C\u002Fa>, a link to a file, and a threshold percentage for the concepts to be 'flagged'. It returns a JSON object containing a score for each concept, and an array of which concepts are over the threshold.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fdirectus-labs\u002Fextensions\u002Fmain\u002Fpackages\u002Fai-image-moderation-operation\u002Fdocs\u002Foutput.png\" alt=\"The output showing a JSON object containing a list of conecpts with values, and an array of flagged concepts.\">\u003C\u002Fp>\n\u003Ch2>Output\u003C\u002Fh2>\n\u003Cp>This operation outputs a JSON object with the following structure:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n  \"concepts\": [\n    {\n      \"name\": \"drug\",\n      \"value\": \"99.99\"\n    },\n    {\n      \"name\": \"suggestive\",\n      \"value\": \"0.00\"\n    },\n    {\n      \"name\": \"gore\",\n      \"value\": \"0.00\"\n    },\n    {\n      \"name\": \"explicit\",\n      \"value\": \"0.00\"\n    }\n  ],\n  \"flags\": [\n    \"drug\"\n  ]\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>Flow Setup\u003C\u002Fh2>\n\u003Ch3>Automatically Moderate New Files\u003C\u002Fh3>\n\u003Cp>Create a Flow with an \u003Cstrong>Event Hook\u003C\u002Fstrong> action trigger and a scope of \u003Ccode>files.upload\u003C\u002Fcode>. Use the AI Image Moderation operation, setting the File URL to \u003Ccode>https:\u002F\u002Fyour-directus-project-url\u002Fassets\u002F{{ $trigger.key }}\u003C\u002Fcode>, being sure to provide your specific Directus Project URL.\u003C\u002Fp>\n\u003Cp>This will work if your file is public, but if it isn't, you can append \u003Ccode>?access_token=token\u003C\u002Fcode> to the File URL, replacing the value with a valid user token that has access to the file.\u003C\u002Fp>\n\u003Cp>This operation will trigger on every new file upload, regardless of location or filetype. You may wish to add a conditional step between the trigger and moderation operation. The following condition rule will check that the file is an image:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n    \"$trigger\": {\n        \"payload\": {\n            \"type\": {\n                \"_contains\": \"image\"\n            }\n        }\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n","https:\u002F\u002Fraw.githubusercontent.com\u002Fdirectus-labs\u002Fextensions\u002Fmain\u002Fpackages\u002Fai-image-moderation-operation\u002Fdocs\u002Foptions.png",[195,197],"https:\u002F\u002Fraw.githubusercontent.com\u002Fdirectus-labs\u002Fextensions\u002Fmain\u002Fpackages\u002Fai-image-moderation-operation\u002Fdocs\u002Foutput.png",{"name":124,"description":199,"verified":8,"id":200,"readme":201,"type":143,"last_updated":202,"host_version":145,"downloads":203,"total_downloads":147,"sandbox":76,"license":148,"publisher":204,"versions":205,"formatted_name":249,"formatted_readme":250,"formatted_description":199,"featured_image":251,"images":252,"recent_downloads_7_days":147,"recent_downloads_30_days":147},"Use Clarifai to find and extract text from image files.","60dbf6dd-b697-417e-95a4-b8634a22f51c","# AI Text Extraction Operation\n\nExtract text from image files within Directus Files with this custom operation, using [Clarifai](https:\u002F\u002Fwww.clarifai.com).\n\n![Sample output](https:\u002F\u002Fraw.githubusercontent.com\u002Fdirectus-labs\u002Fextensions\u002Fmain\u002Fpackages\u002Fai-text-extraction-operation\u002Fdocs\u002Foptions.png)\n\nThis operation requires two options to be set - first a personal access token from [Clarifai](https:\u002F\u002Fwww.clarifai.com) (you can find this in your personal settings under [Security](https:\u002F\u002Fclarifai.com\u002Fsettings\u002Fsecurity)), and a link to the image file. It will return a JSON object, with all the found text into a single merged string and a list of regions where the texts were found.\n\nYou can use the operation to then save the result to a file description or item, or run further automation on the output.\n\n## Output\n\nThis operation outputs a JSON object with the following structure:\n\n```json\n{\n  \"text\": \"DIGGING\\nTHE RABBIT HOLE\",\n  \"regions\": [\n    {\n      \"id\": \"1e3fcaca88308d377d567966e4ae1dda\",\n      \"region_info\": {\n        \"bounding_box\": {\n          \"top_row\": 0.6302083,\n          \"left_col\": 0.102489024,\n          \"bottom_row\": 0.703125,\n          \"right_col\": 0.32796484\n        }\n      },\n      \"data\": {\n        \"text\": {\n          \"raw\": \"DIGGING\",\n          \"text_info\": {\n            \"encoding\": \"UnknownTextEnc\"\n          }\n        }\n      },\n      \"value\": 0.9584053\n    },\n      ...\n  ]\n}\n```\n\n## Flow Setup\n\n### Automatically Extract Text From New Files\n\nCreate a Flow with an **Event Hook** action trigger and a scope of `files.upload`. Use the AI Text Extraction operation, setting the File URL to `https:\u002F\u002Fyour-directus-project-url\u002Fassets\u002F{{ $trigger.key }}`, being sure to provide your specific Directus Project URL.\n\nThis will work if your file is public, but if it isn't, you can append `?access_token=token` to the File URL, replacing the value with a valid user token that has access to the file.\n\nThis operation will trigger on every new file upload, regardless of location or filetype. You may wish to add a conditional step between the trigger and transcription operation. The following condition rule will check that the file is an image:\n\n```json\n{\n    \"$trigger\": {\n        \"payload\": {\n            \"type\": {\n                \"_contains\": \"image\"\n            }\n        }\n    }\n}\n```\n\n### Extract Text On-Demand\n\nCreate a Flow with a **Manual** trigger and select a collection with a file field, which should contain an image file. Set the Location to Item Page Only. To receive the file ID create a **Read Data** operation for the same collection, setting IDs to `{{ $trigger.body.keys[0] }}`.\n\nUse the AI Text Extraction operation, setting the File URL to `https:\u002F\u002Fyour-directus-project-url\u002Fassets\u002F{{ $last.file_field_name }}`, being sure to provide your specific Directus Project URL and file field name.\n","2024-12-18T11:12:52.036Z",[],{"username":150,"verified":76,"id":151,"github_username":150,"github_name":152,"github_blog":153,"github_bio":154,"github_location":155,"github_company":156,"github_avatar_url":157},[206,220,234],{"version":179,"package":200,"publisher":161,"type":143,"host_version":145,"publish_date":207,"verified":8,"id":208,"url_repository":78,"url_homepage":78,"url_bugs":78,"file_count":164,"unpacked_size":209,"sandbox":76,"sandbox_requested_scopes":210,"license":148,"bundled":215,"maintainers":216},"2024-03-18T20:24:10.930Z","1e96470b-1296-4d34-bea1-1cbf953ec402",5490,{"request":211,"log":214},{"urls":212,"methods":213},[169],[171],{},[],[217,218,219],10598,10599,10600,{"version":160,"package":200,"publisher":161,"type":143,"host_version":145,"publish_date":221,"verified":8,"id":222,"url_repository":78,"url_homepage":78,"url_bugs":78,"file_count":164,"unpacked_size":223,"sandbox":76,"sandbox_requested_scopes":224,"license":148,"bundled":229,"maintainers":230},"2024-03-18T20:09:57.886Z","4c55974d-807c-442d-99b8-7ca4edc4e5a9",5460,{"request":225,"log":228},{"urls":226,"methods":227},[169],[171],{},[],[231,232,233],10586,10587,10588,{"version":235,"package":200,"publisher":151,"type":143,"host_version":145,"publish_date":202,"verified":8,"id":236,"url_repository":78,"url_homepage":78,"url_bugs":78,"file_count":164,"unpacked_size":237,"sandbox":76,"sandbox_requested_scopes":238,"license":148,"bundled":243,"maintainers":244},"1.0.2","6f2aad14-4c6a-43e8-b66d-aebb34797358",5619,{"request":239,"log":242},{"urls":240,"methods":241},[169],[171],{},[],[245,246,247,248],11735,11736,11737,11738,"AI Text Extraction Operation","\u003Ch1>AI Text Extraction Operation\u003C\u002Fh1>\n\u003Cp>Extract text from image files within Directus Files with this custom operation, using \u003Ca href=\"https:\u002F\u002Fwww.clarifai.com\">Clarifai\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fdirectus-labs\u002Fextensions\u002Fmain\u002Fpackages\u002Fai-text-extraction-operation\u002Fdocs\u002Foptions.png\" alt=\"Sample output\">\u003C\u002Fp>\n\u003Cp>This operation requires two options to be set - first a personal access token from \u003Ca href=\"https:\u002F\u002Fwww.clarifai.com\">Clarifai\u003C\u002Fa> (you can find this in your personal settings under \u003Ca href=\"https:\u002F\u002Fclarifai.com\u002Fsettings\u002Fsecurity\">Security\u003C\u002Fa>), and a link to the image file. It will return a JSON object, with all the found text into a single merged string and a list of regions where the texts were found.\u003C\u002Fp>\n\u003Cp>You can use the operation to then save the result to a file description or item, or run further automation on the output.\u003C\u002Fp>\n\u003Ch2>Output\u003C\u002Fh2>\n\u003Cp>This operation outputs a JSON object with the following structure:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n  \"text\": \"DIGGING\\nTHE RABBIT HOLE\",\n  \"regions\": [\n    {\n      \"id\": \"1e3fcaca88308d377d567966e4ae1dda\",\n      \"region_info\": {\n        \"bounding_box\": {\n          \"top_row\": 0.6302083,\n          \"left_col\": 0.102489024,\n          \"bottom_row\": 0.703125,\n          \"right_col\": 0.32796484\n        }\n      },\n      \"data\": {\n        \"text\": {\n          \"raw\": \"DIGGING\",\n          \"text_info\": {\n            \"encoding\": \"UnknownTextEnc\"\n          }\n        }\n      },\n      \"value\": 0.9584053\n    },\n      ...\n  ]\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>Flow Setup\u003C\u002Fh2>\n\u003Ch3>Automatically Extract Text From New Files\u003C\u002Fh3>\n\u003Cp>Create a Flow with an \u003Cstrong>Event Hook\u003C\u002Fstrong> action trigger and a scope of \u003Ccode>files.upload\u003C\u002Fcode>. Use the AI Text Extraction operation, setting the File URL to \u003Ccode>https:\u002F\u002Fyour-directus-project-url\u002Fassets\u002F{{ $trigger.key }}\u003C\u002Fcode>, being sure to provide your specific Directus Project URL.\u003C\u002Fp>\n\u003Cp>This will work if your file is public, but if it isn't, you can append \u003Ccode>?access_token=token\u003C\u002Fcode> to the File URL, replacing the value with a valid user token that has access to the file.\u003C\u002Fp>\n\u003Cp>This operation will trigger on every new file upload, regardless of location or filetype. You may wish to add a conditional step between the trigger and transcription operation. The following condition rule will check that the file is an image:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n    \"$trigger\": {\n        \"payload\": {\n            \"type\": {\n                \"_contains\": \"image\"\n            }\n        }\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Extract Text On-Demand\u003C\u002Fh3>\n\u003Cp>Create a Flow with a \u003Cstrong>Manual\u003C\u002Fstrong> trigger and select a collection with a file field, which should contain an image file. Set the Location to Item Page Only. To receive the file ID create a \u003Cstrong>Read Data\u003C\u002Fstrong> operation for the same collection, setting IDs to \u003Ccode>{{ $trigger.body.keys[0] }}\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>Use the AI Text Extraction operation, setting the File URL to \u003Ccode>https:\u002F\u002Fyour-directus-project-url\u002Fassets\u002F{{ $last.file_field_name }}\u003C\u002Fcode>, being sure to provide your specific Directus Project URL and file field name.\u003C\u002Fp>\n","https:\u002F\u002Fraw.githubusercontent.com\u002Fdirectus-labs\u002Fextensions\u002Fmain\u002Fpackages\u002Fai-text-extraction-operation\u002Fdocs\u002Foptions.png",[251],{"name":122,"description":254,"verified":8,"id":255,"readme":256,"type":143,"last_updated":257,"host_version":145,"downloads":258,"total_downloads":147,"sandbox":76,"license":148,"publisher":259,"versions":262,"formatted_name":325,"formatted_readme":326,"formatted_description":254,"featured_image":327,"images":328,"repository_url":309,"recent_downloads_7_days":147,"recent_downloads_30_days":147},"Use Clarifai to create captions for your image files.","ea8dce82-795e-42fa-a12b-d0cb48d7d218","# AI Alt Text Writer Operation\n\nCreate captions for your images within Directus Files with this custom operation, using [Clarifai](https:\u002F\u002Fwww.clarifai.com).\n\n![The AI Alt Text Writer operation, showing available options](https:\u002F\u002Fraw.githubusercontent.com\u002Fdirectus-labs\u002Fextensions\u002Fmain\u002Fpackages\u002Fai-alt-text-writer\u002Fdocs\u002Foptions.png)\n\nThis operation requires two options to be set - first a personal access token from [Clarifai](https:\u002F\u002Fwww.clarifai.com) (you can find this in your personal settings under [Security](https:\u002F\u002Fclarifai.com\u002Fsettings\u002Fsecurity)), and a link to the image file. The operation will return a string containing a text that describes the image.\n\nYou can use the operation to then save the result to a file description or item, or run further automation on the output.\n\n## Output\n\nThis operation will output the text that was generated from the provided image:\n\n```json\n\"a photograph of a man standing in front of a large explosion of smoke\"\n```\n\n## Flow Setup\n\n### Automatically Write Alt Text For New Files\n\nCreate a Flow with an **Event Hook** action trigger and a scope of `files.upload`. Use the AI Alt Text Writer operation, setting the File URL to `https:\u002F\u002Fyour-directus-project-url\u002Fassets\u002F{{ $trigger.key }}`, being sure to provide your specific Directus Project URL.\n\nThis will work if your file is public, but if it isn't, you can append `?access_token=token` to the File URL, replacing the value with a valid user token that has access to the file.\n\nThis operation will trigger on every new file upload, regardless of location or filetype. You may wish to add a conditional step between the trigger and transcription operation. The following condition rule will check that the file is an image:\n\n```json\n{\n    \"$trigger\": {\n        \"payload\": {\n            \"type\": {\n                \"_contains\": \"image\"\n            }\n        }\n    }\n}\n```\n\n### Write Alt Text On-Demand\n\nCreate a Flow with a **Manual** trigger and select a collection with a file field, which should contain an image file. Set the Location to Item Page Only. To receive the file ID create a **Read Data** operation for the same collection, setting IDs to `{{ $trigger.body.keys[0] }}`.\n\nUse the AI Alt Text Writer operation, setting the File URL to `https:\u002F\u002Fyour-directus-project-url\u002Fassets\u002F{{ $last.file_field_name }}`, being sure to provide your specific Directus Project URL and file field name.\n","2025-12-24T06:57:23.792Z",[],{"username":260,"verified":8,"id":261,"github_username":78,"github_name":78,"github_blog":78,"github_bio":78,"github_location":78,"github_company":78,"github_avatar_url":78},"GitHub Actions","d490bc00-b01e-443a-a62f-2c109aa009f9",[263,277,291,306],{"version":179,"package":255,"publisher":161,"type":143,"host_version":145,"publish_date":264,"verified":8,"id":265,"url_repository":78,"url_homepage":78,"url_bugs":78,"file_count":164,"unpacked_size":266,"sandbox":76,"sandbox_requested_scopes":267,"license":148,"bundled":272,"maintainers":273},"2024-03-18T20:25:32.841Z","27b52b93-5630-4897-9e0e-54e7d0eab79f",4990,{"request":268,"log":271},{"urls":269,"methods":270},[169],[171],{},[],[274,275,276],10595,10596,10597,{"version":160,"package":255,"publisher":161,"type":143,"host_version":145,"publish_date":278,"verified":8,"id":279,"url_repository":78,"url_homepage":78,"url_bugs":78,"file_count":164,"unpacked_size":280,"sandbox":76,"sandbox_requested_scopes":281,"license":148,"bundled":286,"maintainers":287},"2024-03-18T20:09:35.691Z","c28542e2-9e30-4175-b11e-2d4fbc7ffb1c",4924,{"request":282,"log":285},{"urls":283,"methods":284},[169],[171],{},[],[288,289,290],10592,10593,10594,{"version":235,"package":255,"publisher":151,"type":143,"host_version":145,"publish_date":292,"verified":8,"id":293,"url_repository":78,"url_homepage":78,"url_bugs":78,"file_count":164,"unpacked_size":294,"sandbox":76,"sandbox_requested_scopes":295,"license":148,"bundled":300,"maintainers":301},"2024-12-18T11:05:18.193Z","f2b9b799-8659-4486-b528-643ce8666593",5119,{"request":296,"log":299},{"urls":297,"methods":298},[169],[171],{},[],[302,303,304,305],11715,11716,11717,11718,{"version":307,"package":255,"publisher":261,"type":143,"host_version":145,"publish_date":257,"verified":8,"id":308,"url_repository":309,"url_homepage":310,"url_bugs":311,"file_count":164,"unpacked_size":312,"sandbox":76,"sandbox_requested_scopes":313,"license":148,"bundled":318,"maintainers":319},"1.0.3","f7b2aee2-38e9-42c7-a2d4-ffff11863420","https:\u002F\u002Fgithub.com\u002Fdirectus-labs\u002Fextensions.git","https:\u002F\u002Fgithub.com\u002Fdirectus-labs\u002Fextensions#readme","https:\u002F\u002Fgithub.com\u002Fdirectus-labs\u002Fextensions\u002Fissues",5229,{"request":314,"log":317},{"urls":315,"methods":316},[169],[171],{},[],[320,321,322,323,324],13503,13504,13505,13506,13507,"AI Alt Text Writer Operation","\u003Ch1>AI Alt Text Writer Operation\u003C\u002Fh1>\n\u003Cp>Create captions for your images within Directus Files with this custom operation, using \u003Ca href=\"https:\u002F\u002Fwww.clarifai.com\">Clarifai\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fdirectus-labs\u002Fextensions\u002Fmain\u002Fpackages\u002Fai-alt-text-writer\u002Fdocs\u002Foptions.png\" alt=\"The AI Alt Text Writer operation, showing available options\">\u003C\u002Fp>\n\u003Cp>This operation requires two options to be set - first a personal access token from \u003Ca href=\"https:\u002F\u002Fwww.clarifai.com\">Clarifai\u003C\u002Fa> (you can find this in your personal settings under \u003Ca href=\"https:\u002F\u002Fclarifai.com\u002Fsettings\u002Fsecurity\">Security\u003C\u002Fa>), and a link to the image file. The operation will return a string containing a text that describes the image.\u003C\u002Fp>\n\u003Cp>You can use the operation to then save the result to a file description or item, or run further automation on the output.\u003C\u002Fp>\n\u003Ch2>Output\u003C\u002Fh2>\n\u003Cp>This operation will output the text that was generated from the provided image:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">\"a photograph of a man standing in front of a large explosion of smoke\"\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>Flow Setup\u003C\u002Fh2>\n\u003Ch3>Automatically Write Alt Text For New Files\u003C\u002Fh3>\n\u003Cp>Create a Flow with an \u003Cstrong>Event Hook\u003C\u002Fstrong> action trigger and a scope of \u003Ccode>files.upload\u003C\u002Fcode>. Use the AI Alt Text Writer operation, setting the File URL to \u003Ccode>https:\u002F\u002Fyour-directus-project-url\u002Fassets\u002F{{ $trigger.key }}\u003C\u002Fcode>, being sure to provide your specific Directus Project URL.\u003C\u002Fp>\n\u003Cp>This will work if your file is public, but if it isn't, you can append \u003Ccode>?access_token=token\u003C\u002Fcode> to the File URL, replacing the value with a valid user token that has access to the file.\u003C\u002Fp>\n\u003Cp>This operation will trigger on every new file upload, regardless of location or filetype. You may wish to add a conditional step between the trigger and transcription operation. The following condition rule will check that the file is an image:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n    \"$trigger\": {\n        \"payload\": {\n            \"type\": {\n                \"_contains\": \"image\"\n            }\n        }\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Write Alt Text On-Demand\u003C\u002Fh3>\n\u003Cp>Create a Flow with a \u003Cstrong>Manual\u003C\u002Fstrong> trigger and select a collection with a file field, which should contain an image file. Set the Location to Item Page Only. To receive the file ID create a \u003Cstrong>Read Data\u003C\u002Fstrong> operation for the same collection, setting IDs to \u003Ccode>{{ $trigger.body.keys[0] }}\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>Use the AI Alt Text Writer operation, setting the File URL to \u003Ccode>https:\u002F\u002Fyour-directus-project-url\u002Fassets\u002F{{ $last.file_field_name }}\u003C\u002Fcode>, being sure to provide your specific Directus Project URL and file field name.\u003C\u002Fp>\n","https:\u002F\u002Fraw.githubusercontent.com\u002Fdirectus-labs\u002Fextensions\u002Fmain\u002Fpackages\u002Fai-alt-text-writer\u002Fdocs\u002Foptions.png",[327]]