[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"github-stars":3,"marketplace-site-banners":110,"@directus-labs\u002Fai-text-extraction-operation":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",{"name":116,"description":117,"verified":8,"id":118,"readme":119,"type":120,"last_updated":121,"host_version":122,"downloads":123,"total_downloads":126,"sandbox":76,"license":190,"publisher":191,"versions":200,"formatted_name":249,"formatted_readme":250,"formatted_description":117,"featured_image":251,"images":252,"recent_downloads_7_days":151,"recent_downloads_30_days":253},"@directus-labs\u002Fai-text-extraction-operation","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","operation","2024-12-18T11:12:52.036Z","^10.10.0",[124,127,130,132,134,136,139,141,143,145,147,149,152,154,156,159,161,164,166,168,170,172,174,176,178,180,182,184,186,188],{"date":125,"count":126},"2026-06-17",0,{"date":128,"count":129},"2026-06-18",4,{"date":131,"count":126},"2026-06-19",{"date":133,"count":126},"2026-06-20",{"date":135,"count":126},"2026-06-21",{"date":137,"count":138},"2026-06-22",1,{"date":140,"count":126},"2026-06-23",{"date":142,"count":126},"2026-06-24",{"date":144,"count":126},"2026-06-25",{"date":146,"count":126},"2026-06-26",{"date":148,"count":126},"2026-06-27",{"date":150,"count":151},"2026-06-28",2,{"date":153,"count":151},"2026-06-29",{"date":155,"count":126},"2026-06-30",{"date":157,"count":158},"2026-07-01",3,{"date":160,"count":138},"2026-07-02",{"date":162,"count":163},"2026-07-03",6,{"date":165,"count":151},"2026-07-04",{"date":167,"count":138},"2026-07-05",{"date":169,"count":138},"2026-07-06",{"date":171,"count":126},"2026-07-07",{"date":173,"count":138},"2026-07-08",{"date":175,"count":126},"2026-07-09",{"date":177,"count":126},"2026-07-10",{"date":179,"count":126},"2026-07-11",{"date":181,"count":126},"2026-07-12",{"date":183,"count":138},"2026-07-13",{"date":185,"count":126},"2026-07-14",{"date":187,"count":126},"2026-07-15",{"date":189,"count":138},"2026-07-16","MIT",{"username":192,"verified":76,"id":193,"github_username":192,"github_name":194,"github_blog":195,"github_bio":196,"github_location":197,"github_company":198,"github_avatar_url":199},"ukmadlz","74ce2e77-733a-4e9a-b96d-93bf6264f622","Mike Elsmore","http:\u002F\u002Felsmore.me","(╯°□°）╯︵ TABLEFLIP","UK","@DigitalSpeed","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F804683?v=4",[201,219,234],{"version":202,"package":118,"publisher":203,"type":120,"host_version":122,"publish_date":204,"verified":8,"id":205,"url_repository":78,"url_homepage":78,"url_bugs":78,"file_count":129,"unpacked_size":206,"sandbox":76,"sandbox_requested_scopes":207,"license":190,"bundled":214,"maintainers":215},"1.0.1","8486d50d-a6bc-45c6-8627-60f3c144732c","2024-03-18T20:24:10.930Z","1e96470b-1296-4d34-bea1-1cbf953ec402",5490,{"request":208,"log":213},{"urls":209,"methods":211},[210],"https:\u002F\u002Fapi.clarifai.com\u002Fv2\u002F**",[212],"POST",{},[],[216,217,218],10598,10599,10600,{"version":220,"package":118,"publisher":203,"type":120,"host_version":122,"publish_date":221,"verified":8,"id":222,"url_repository":78,"url_homepage":78,"url_bugs":78,"file_count":129,"unpacked_size":223,"sandbox":76,"sandbox_requested_scopes":224,"license":190,"bundled":229,"maintainers":230},"1.0.0","2024-03-18T20:09:57.886Z","4c55974d-807c-442d-99b8-7ca4edc4e5a9",5460,{"request":225,"log":228},{"urls":226,"methods":227},[210],[212],{},[],[231,232,233],10586,10587,10588,{"version":235,"package":118,"publisher":193,"type":120,"host_version":122,"publish_date":121,"verified":8,"id":236,"url_repository":78,"url_homepage":78,"url_bugs":78,"file_count":129,"unpacked_size":237,"sandbox":76,"sandbox_requested_scopes":238,"license":190,"bundled":243,"maintainers":244},"1.0.2","6f2aad14-4c6a-43e8-b66d-aebb34797358",5619,{"request":239,"log":242},{"urls":240,"methods":241},[210],[212],{},[],[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],22]