[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"marketplace-site-banners":3,"github-stars":9,"@directus-labs\u002Fai-image-moderation-operation":115},[4],{"id":5,"icon":6,"content":7,"link":8,"include_paths":6,"exclude_paths":6},"5cf2f5f6-aecf-4395-8c23-69de326fdf02",null,"Directus V12 is here","https:\u002F\u002Fdirectus.com\u002Fresources\u002Fv12-built-for-the-whole-team",{"id":10,"node_id":11,"name":12,"full_name":13,"private":14,"owner":15,"html_url":33,"description":34,"fork":14,"url":35,"forks_url":36,"keys_url":37,"collaborators_url":38,"teams_url":39,"hooks_url":40,"issue_events_url":41,"events_url":42,"assignees_url":43,"branches_url":44,"tags_url":45,"blobs_url":46,"git_tags_url":47,"git_refs_url":48,"trees_url":49,"statuses_url":50,"languages_url":51,"stargazers_url":52,"contributors_url":53,"subscribers_url":54,"subscription_url":55,"commits_url":56,"git_commits_url":57,"comments_url":58,"issue_comment_url":59,"contents_url":60,"compare_url":61,"merges_url":62,"archive_url":63,"downloads_url":64,"issues_url":65,"pulls_url":66,"milestones_url":67,"notifications_url":68,"labels_url":69,"releases_url":70,"deployments_url":71,"created_at":72,"updated_at":73,"pushed_at":74,"git_url":75,"ssh_url":76,"clone_url":77,"svn_url":33,"homepage":78,"size":79,"stargazers_count":80,"watchers_count":80,"language":81,"has_issues":82,"has_projects":82,"has_downloads":82,"has_wiki":14,"has_pages":14,"has_discussions":82,"forks_count":83,"mirror_url":6,"archived":14,"disabled":14,"open_issues_count":84,"license":85,"allow_forking":82,"is_template":14,"web_commit_signoff_required":14,"has_pull_requests":82,"pull_request_creation_policy":90,"topics":91,"visibility":32,"forks":83,"open_issues":84,"watchers":80,"default_branch":111,"temp_clone_token":6,"custom_properties":112,"organization":113,"network_count":83,"subscribers_count":114},7122594,"MDEwOlJlcG9zaXRvcnk3MTIyNTk0","directus","directus\u002Fdirectus",false,{"login":12,"id":16,"node_id":17,"avatar_url":18,"gravatar_id":19,"url":20,"html_url":21,"followers_url":22,"following_url":23,"gists_url":24,"starred_url":25,"subscriptions_url":26,"organizations_url":27,"repos_url":28,"events_url":29,"received_events_url":30,"type":31,"user_view_type":32,"site_admin":14},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,399,{"key":86,"name":87,"spdx_id":88,"url":6,"node_id":89},"other","Other","NOASSERTION","MDc6TGljZW5zZTA=","all",[92,93,94,95,96,97,12,98,99,100,101,102,103,104,105,106,107,108,109,110],"api","app","cms","composable","data-visualization","database","graphql","headless-cms","javascript","mariadb","mssql","mysql","no-code","node","postgresql","sql","sqlite","typescript","vue","main",{},{"login":12,"id":16,"node_id":17,"avatar_url":18,"gravatar_id":19,"url":20,"html_url":21,"followers_url":22,"following_url":23,"gists_url":24,"starred_url":25,"subscriptions_url":26,"organizations_url":27,"repos_url":28,"events_url":29,"received_events_url":30,"type":31,"user_view_type":32,"site_admin":14},326,{"name":116,"description":117,"verified":14,"id":118,"readme":119,"type":120,"last_updated":121,"host_version":122,"downloads":123,"total_downloads":124,"sandbox":82,"license":125,"publisher":126,"versions":135,"formatted_name":170,"formatted_readme":171,"formatted_description":117,"featured_image":172,"images":173,"recent_downloads_7_days":124,"recent_downloads_30_days":124},"@directus-labs\u002Fai-image-moderation-operation","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":127,"verified":82,"id":128,"github_username":127,"github_name":129,"github_blog":130,"github_bio":131,"github_location":132,"github_company":133,"github_avatar_url":134},"ukmadlz","74ce2e77-733a-4e9a-b96d-93bf6264f622","Mike Elsmore","http:\u002F\u002Felsmore.me","(╯°□°）╯︵ TABLEFLIP","UK","@DigitalSpeed","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F804683?v=4",[136,155],{"version":137,"package":118,"publisher":138,"type":120,"host_version":122,"publish_date":139,"verified":14,"id":140,"url_repository":6,"url_homepage":6,"url_bugs":6,"file_count":141,"unpacked_size":142,"sandbox":82,"sandbox_requested_scopes":143,"license":125,"bundled":150,"maintainers":151},"1.0.0","8486d50d-a6bc-45c6-8627-60f3c144732c","2024-03-15T19:46:41.601Z","2b7dd32e-3c99-42ee-b383-fa935324fda1",4,5140,{"request":144,"log":149},{"urls":145,"methods":147},[146],"https:\u002F\u002Fapi.clarifai.com\u002Fv2\u002F**",[148],"POST",{},[],[152,153,154],10571,10572,10573,{"version":156,"package":118,"publisher":128,"type":120,"host_version":122,"publish_date":121,"verified":14,"id":157,"url_repository":6,"url_homepage":6,"url_bugs":6,"file_count":141,"unpacked_size":158,"sandbox":82,"sandbox_requested_scopes":159,"license":125,"bundled":164,"maintainers":165},"1.0.1","f767a1d6-51ec-412d-897c-d363874c9488",4703,{"request":160,"log":163},{"urls":161,"methods":162},[146],[148],{},[],[166,167,168,169],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",[172,174],"https:\u002F\u002Fraw.githubusercontent.com\u002Fdirectus-labs\u002Fextensions\u002Fmain\u002Fpackages\u002Fai-image-moderation-operation\u002Fdocs\u002Foutput.png"]