{"id":21247,"date":"2014-07-22T12:29:53","date_gmt":"2014-07-22T12:29:53","guid":{"rendered":"http:\/\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary"},"modified":"2025-02-25T14:58:58","modified_gmt":"2025-02-25T22:58:58","slug":"automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary","title":{"rendered":"Automatic image moderation, removing adult or inappropriate photos using WebPurify and Cloudinary"},"content":{"rendered":"<div class=\"wp-block-cloudinary-markdown \"><p>If your web or mobile application involves user-generated content, you may encounter users who upload inappropriate photos or images to your application. These could be images which offend other users &#8211; adult content, violent photos, etc. &#8211; or images which cause your site to violate laws or regulations.<\/p>\n<p>There are two ways to identify and remove such images: you can either require approval of each image before it is displayed to your users, or display images immediately after upload, and then quickly remove them from your site as soon as a moderator has found them to be inappropriate.<\/p>\n<p>Another issue is who does the moderation. You can hire and train internal personnel to manually moderate your images. In Cloudinary\u2019s image management solution, we provide a <a href=\"https:\/\/cloudinary.com\/blog\/image_moderation_made_easy_using_cloud_based_ui_and_api\">manual moderation web interface and API<\/a> to help do this efficiently. However, manual moderation is time consuming and expensive, and so we wanted to provide an additional option &#8211; automatic moderation of images as your users upload them.<\/p>\n<h2>Introducing Cloudinary\u2019s WebPurity add-on &#8211; seamless automatic image moderation<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary\/image\/upload\/c_crop,g_east,w_0.99\/w_0.5\/webpurify_post_logo.png\" alt=\"WebPurify logo\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"115\" height=\"60\"\/>\nWebPurify is an online service for automatically moderating and filtering out inappropriate photos, preventing adult content or other kinds of offensive photos from creeping into your website. WebPurify performs quick and thorough <strong>human review<\/strong> of your user-uploaded images, behind the scenes.<\/p>\n<p>Cloudinary can manage your entire image lifecycle &#8211; upload and cloud storage of images, transforming images to match your graphic design, and delivery of images to users over a fast CDN. With our new <strong>WebPurify Image Moderation add-on<\/strong>, you can also use Cloudinary to seamlessly perform automatic moderation of images uploaded by your users. Rejected images are automatically removed from your site, and you will be notified on every reject.<\/p>\n<h2>Enabling automatic image moderation by WebPurify within Cloudinary<\/h2>\n<p><a href=\"https:\/\/cloudinary.com\/users\/register\/free\">Sign up to a Cloudinary account<\/a> if you don\u2019t have one already. <a href=\"https:\/\/cloudinary.com\/addons#webpurify\">Subscribe to the WebPurify add-on<\/a>, free tier available.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary\/image\/upload\/w_560\/webpurify_addon.png\" alt=\"WebPurify Cloudinary Add-on\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"560\" height=\"241\"\/><\/p>\n<p>Cloudinary provides an <a href=\"https:\/\/cloudinary.com\/documentation\/upload_images\">image upload API<\/a>. Simply set the <code>moderation<\/code> parameter to <code>webpurify<\/code> when calling Cloudinary\u2019s upload API, as you can see in the following code samples.<\/p>\n<cld-code-widget\n      class=\" c-code-widget\"\n      snippets=\"[{&quot;sdkId&quot;:&quot;ruby&quot;,&quot;framework&quot;:&quot;ruby&quot;,&quot;language&quot;:&quot;ruby&quot;,&quot;displayName&quot;:&quot;Ruby&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;rawCodeSnippet&quot;:&quot;Cloudinary::Uploader.upload(\\&quot;local_file.jpg\\&quot;, :moderation =&gt; \\&quot;webpurify\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;Cloudinary::Uploader.upload(\\&quot;local_file.jpg\\&quot;, :moderation =&gt; \\&quot;webpurify\\&quot;)&quot;},{&quot;sdkId&quot;:&quot;php&quot;,&quot;framework&quot;:&quot;php&quot;,&quot;language&quot;:&quot;php&quot;,&quot;displayName&quot;:&quot;PHP&quot;,&quot;packageName&quot;:&quot;cloudinary_php&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;rawCodeSnippet&quot;:&quot;\\\\Cloudinary\\\\Uploader::upload(\\&quot;local_file.jpg\\&quot;, array(\\&quot;moderation\\&quot; =&gt; \\&quot;webpurify\\&quot;));&quot;,&quot;codeSnippet&quot;:&quot;\\\\Cloudinary\\\\Uploader::upload(\\&quot;local_file.jpg\\&quot;, array(\\&quot;moderation\\&quot; =&gt; \\&quot;webpurify\\&quot;));&quot;},{&quot;sdkId&quot;:&quot;python&quot;,&quot;framework&quot;:&quot;python&quot;,&quot;language&quot;:&quot;python&quot;,&quot;displayName&quot;:&quot;Python&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.uploader.upload(\\&quot;local_file.jpg\\&quot;, moderation = \\&quot;webpurify\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.uploader.upload(\\&quot;local_file.jpg\\&quot;, moderation = \\&quot;webpurify\\&quot;)&quot;},{&quot;sdkId&quot;:&quot;nodejs&quot;,&quot;framework&quot;:&quot;nodejs&quot;,&quot;language&quot;:&quot;javascript&quot;,&quot;displayName&quot;:&quot;Node.js&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.uploader.upload(\\&quot;local_file.jpg\\&quot;, \\n  function(result) { console.log(result); }, { moderation: \\&quot;webpurify\\&quot; });&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.uploader.upload(\\&quot;local_file.jpg\\&quot;, \\n  function(result) { console.log(result); }, { moderation: \\&quot;webpurify\\&quot; });&quot;},{&quot;sdkId&quot;:&quot;java&quot;,&quot;framework&quot;:&quot;java&quot;,&quot;language&quot;:&quot;java&quot;,&quot;displayName&quot;:&quot;Java&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.uploader().upload(\\&quot;local_file.jpg\\&quot;, \\n  Cloudinary.asMap(\\&quot;moderation\\&quot;, \\&quot;webpurify\\&quot;));&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.uploader().upload(\\&quot;local_file.jpg\\&quot;, \\n  Cloudinary.asMap(\\&quot;moderation\\&quot;, \\&quot;webpurify\\&quot;));&quot;}]\"\n      parsed-url=\"[]\"\n      with-url=\"false\"\n    >\n      <span class=\"u-visually-hidden\">Loading code examples<\/span>\n    <\/cld-code-widget>\n<p>The uploaded image is marked as \u2018pending moderation\u2019 and is automatically sent to WebPurify. Moderation is performed asynchronously after the upload call is completed. You can decide whether to display the image to your users immediately, or wait for moderation approval. If you decide not to wait, the image is delivered with short-term cache settings, allowing fast removal of rejected images.<\/p>\n<p><strong>Note<\/strong> &#8211; Cloudinary delivers images using a fast CDN (images are cached close to the geographical location of your users). While an image is pending moderation, the cache will be set to \u2018short-term\u2019, so that if it\u2019s rejected in moderation, it will be easy to roll back and remove it from all cache servers.<\/p>\n<p>If you are already using Cloudinary for user-uploaded images, simply subscribe to the WebPurify add-on and set the <code>moderation<\/code> parameter as above. It\u2019s that easy to ensure all the images on your dynamic site are safe for users and comply with relevant laws.<\/p>\n<h2>Handling moderation results<\/h2>\n<p>If an uploaded photo is approved by the WebPurify add-on, it is marked as \u2018approved\u2019 in your cloud-based media library managed by Cloudinary. Cloudinary updates the approved images, and all their transformed versions (Cloudinary can generate thumbnails, resized versions, and many other on-the-fly image transformations) to long term caching. This optimizes delivery of the images to users around the world, now that there is no longer a need to \u201croll back\u201d the image in case they are rejected.<\/p>\n<p>When an uploaded photo is rejected by the WebPurify add-on, because it includes inappropriate content, the image is automatically deleted from your media library, all delivered versions of the rejected image expire quickly, and the rejected image is no longer displayed. The original rejected images are stored in the backup repository of your Cloudinary account, which you can still access through our web interface.<\/p>\n<p>You may want to automatically update your application when an image is rejected by the WebPurify add-on. In order to do that, you can set the <code>notification_url<\/code> upload parameter to a URL on your site:<\/p>\n<cld-code-widget\n      class=\" c-code-widget\"\n      snippets=\"[{&quot;sdkId&quot;:&quot;ruby&quot;,&quot;framework&quot;:&quot;ruby&quot;,&quot;language&quot;:&quot;ruby&quot;,&quot;displayName&quot;:&quot;Ruby&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;rawCodeSnippet&quot;:&quot;Cloudinary::Uploader.upload(\\&quot;local_file.jpg\\&quot;, \\n  :moderation =&gt; \\&quot;webpurify\\&quot;,\\n  :notification_url =&gt; \\&quot;http:\\\/\\\/mysite.example.com\\\/hooks\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;Cloudinary::Uploader.upload(\\&quot;local_file.jpg\\&quot;, \\n  :moderation =&gt; \\&quot;webpurify\\&quot;,\\n  :notification_url =&gt; \\&quot;http:\\\/\\\/mysite.example.com\\\/hooks\\&quot;)&quot;},{&quot;sdkId&quot;:&quot;php&quot;,&quot;framework&quot;:&quot;php&quot;,&quot;language&quot;:&quot;php&quot;,&quot;displayName&quot;:&quot;PHP&quot;,&quot;packageName&quot;:&quot;cloudinary_php&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;,&quot;packageStatus&quot;:&quot;legacy&quot;,&quot;rawCodeSnippet&quot;:&quot;\\\\Cloudinary\\\\Uploader::upload(\\&quot;local_file.jpg\\&quot;, \\n  array(\\n    \\&quot;moderation\\&quot; =&gt; \\&quot;webpurify\\&quot;,\\n    \\&quot;notification_url\\&quot; =&gt; \\&quot;http:\\\/\\\/mysite.example.com\\\/hooks\\&quot;));&quot;,&quot;codeSnippet&quot;:&quot;\\\\Cloudinary\\\\Uploader::upload(\\&quot;local_file.jpg\\&quot;, \\n  array(\\n    \\&quot;moderation\\&quot; =&gt; \\&quot;webpurify\\&quot;,\\n    \\&quot;notification_url\\&quot; =&gt; \\&quot;http:\\\/\\\/mysite.example.com\\\/hooks\\&quot;));&quot;},{&quot;sdkId&quot;:&quot;python&quot;,&quot;framework&quot;:&quot;python&quot;,&quot;language&quot;:&quot;python&quot;,&quot;displayName&quot;:&quot;Python&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageVersion&quot;:&quot;1.x&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.uploader.upload(\\&quot;local_file.jpg\\&quot;,\\n  moderation = \\&quot;webpurify\\&quot;,\\n  notification_url = \\&quot;http:\\\/\\\/mysite.example.com\\\/hooks\\&quot;)&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.uploader.upload(\\&quot;local_file.jpg\\&quot;,\\n  moderation = \\&quot;webpurify\\&quot;,\\n  notification_url = \\&quot;http:\\\/\\\/mysite.example.com\\\/hooks\\&quot;)&quot;},{&quot;sdkId&quot;:&quot;nodejs&quot;,&quot;framework&quot;:&quot;nodejs&quot;,&quot;language&quot;:&quot;javascript&quot;,&quot;displayName&quot;:&quot;Node.js&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.uploader.upload(\\&quot;local_file.jpg\\&quot;, \\n  function(result) { console.log(result); }, \\n  { \\n    moderation: \\&quot;webpurify\\&quot;,\\n    notification_url: \\&quot;http:\\\/\\\/mysite.example.com\\\/hooks\\&quot; \\n});&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.uploader.upload(\\&quot;local_file.jpg\\&quot;, \\n  function(result) { console.log(result); }, \\n  { \\n    moderation: \\&quot;webpurify\\&quot;,\\n    notification_url: \\&quot;http:\\\/\\\/mysite.example.com\\\/hooks\\&quot; \\n});&quot;},{&quot;sdkId&quot;:&quot;java&quot;,&quot;framework&quot;:&quot;java&quot;,&quot;language&quot;:&quot;java&quot;,&quot;displayName&quot;:&quot;Java&quot;,&quot;packageName&quot;:&quot;cloudinary&quot;,&quot;packageVersion&quot;:&quot;2.x&quot;,&quot;packageStatus&quot;:&quot;&quot;,&quot;rawCodeSnippet&quot;:&quot;cloudinary.uploader().upload(\\&quot;local_file.jpg\\&quot;, \\n  Cloudinary.asMap(\\&quot;moderation\\&quot;, \\&quot;webpurify\\&quot;, \\n    \\&quot;notification_url\\&quot;, \\&quot;http:\\\/\\\/mysite.example.com\\\/hooks\\&quot;));&quot;,&quot;codeSnippet&quot;:&quot;cloudinary.uploader().upload(\\&quot;local_file.jpg\\&quot;, \\n  Cloudinary.asMap(\\&quot;moderation\\&quot;, \\&quot;webpurify\\&quot;, \\n    \\&quot;notification_url\\&quot;, \\&quot;http:\\\/\\\/mysite.example.com\\\/hooks\\&quot;));&quot;}]\"\n      parsed-url=\"[]\"\n      with-url=\"false\"\n    >\n      <span class=\"u-visually-hidden\">Loading code examples<\/span>\n    <\/cld-code-widget>\n<p>An HTTP callback request will be sent to your servers when the moderation process is completed (either approved or rejected). The request data includes the identifier and URLs of the moderated images.<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json shcb-wrap-lines\">{\n <span class=\"hljs-attr\">\"moderation_response\"<\/span>: <span class=\"hljs-string\">\"rejected\"<\/span>,\n <span class=\"hljs-attr\">\"moderation_status\"<\/span>: <span class=\"hljs-string\">\"rejected\"<\/span>,\n\u00a0<span class=\"hljs-attr\">\"moderation_kind\"<\/span>: <span class=\"hljs-string\">\"webpurify\"<\/span>,\n\u00a0<span class=\"hljs-attr\">\"moderation_updated_at\"<\/span>: <span class=\"hljs-string\">\"2014-03-02T20:47:48Z\"<\/span>,\n\u00a0<span class=\"hljs-attr\">\"public_id\"<\/span>: <span class=\"hljs-string\">\"nuzn4riqxhhzfyfljjxv\"<\/span>,\n\u00a0<span class=\"hljs-attr\">\"uploaded_at\"<\/span>: <span class=\"hljs-string\">\"2014-03-02T20:47:47Z\"<\/span>,\n\u00a0<span class=\"hljs-attr\">\"version\"<\/span>: <span class=\"hljs-number\">1393793267<\/span>,\n\u00a0<span class=\"hljs-attr\">\"url\"<\/span>:\n\u00a0<span class=\"hljs-string\">\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/v1393793267\/nuzn4riqxhhzfyfljjxv.jpg\"<\/span>,\n\u00a0<span class=\"hljs-attr\">\"secure_url\"<\/span>:\n\u00a0<span class=\"hljs-string\">\"https:\/\/res.cloudinary.com\/demo\/image\/upload\/v1393793267\/nuzn4riqxhhzfyfljjxv.jpg\"<\/span>,\n\u00a0<span class=\"hljs-attr\">\"etag\"<\/span>:<span class=\"hljs-string\">\"06778590d96907b60b5fa83795e7df3b\"<\/span>,\n\u00a0<span class=\"hljs-attr\">\"notification_type\"<\/span>:<span class=\"hljs-string\">\"moderation\"<\/span>\n} \u00a0\u00a0\u00a0\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>In addition, Cloudinary provides tools for further managing the image moderation flow. You can use Cloudinary\u2019s Admin API to list the queue of images pending moderation, and list rejected or approved images. Or you can view these lists using Cloudinary\u2019s Media Library web interface.<\/p>\n<p>You can also use the API or web interface to alter the automatic moderation decision. You can browse rejected or approved images, and manually approve or reject them.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary\/image\/upload\/w_620,bo_1px_solid_rgb:aaa\/webpurify_post_media_screenshot_r9c8lm.jpg\" alt=\"WebPurify moderation - media library\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"622\" height=\"355\"\/><\/p>\n<p>If you choose to approve a previously rejected image, the original version of the rejected image will be restored from backup. If you choose to reject a previously approved image, cache invalidation will be performed for the image so it is gradually erased from all the CDN cache servers.<\/p>\n<p>For more details about the various moderation management APIs, take a look at <strong><a href=\"https:\/\/cloudinary.com\/documentation\/webpurify_image_moderation_addon\">our detailed documentation of the WebPurify image moderation add-on<\/a><\/strong>.<\/p>\n<h2>Summary<\/h2>\n<p>Websites enabling user-uploaded content have become very common. Most web and mobile apps skip moderation and take the chance that adult or inappropriate content might be uploaded and displayed to their users. Some apps support user reporting of problematic content, but this might be too late in certain scenarios, and the reporting feature can be abused as well.<\/p>\n<p>Cloudinary takes care of the entire image lifecycle &#8211; uploading images to the cloud, dynamically transforming them to match your graphic design, and delivering them to users optimized and cached via fast CDN. Now with the <a href=\"https:\/\/cloudinary.com\/addons#webpurify\">WebPurify add-on<\/a>, Cloudinary can automatically and quickly filter out problematic photos. This makes the decision of whether to moderate uploaded photos a no-brainer. You can focus on building great applications, allow your users to freely upload content to your app and let Cloudinary, together with WebPurify, make sure your app displays high quality images completely safe for any audience.<\/p>\n<p>You are welcome to share any question or feedback you have regarding the automatic image moderation solution described in this post.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":41,"featured_media":23421,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[25,91,165,176,214,227,229,257],"class_list":["post-21247","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-asset-management","tag-django","tag-image-transformation","tag-java","tag-node","tag-performance-optimization","tag-php","tag-ruby-on-rails"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Automatic Image Moderation with Minimal Developer Effort<\/title>\n<meta name=\"description\" content=\"How to do end-to-end automatic image moderation for inappropriate photos, without hiring in-house moderators and no complex integration\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Automatic image moderation, removing adult or inappropriate photos using WebPurify and Cloudinary\" \/>\n<meta property=\"og:description\" content=\"How to do end-to-end automatic image moderation for inappropriate photos, without hiring in-house moderators and no complex integration\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2014-07-22T12:29:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-02-25T22:58:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1647372818\/53_auto_image_moderation\/53_auto_image_moderation-jpg?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1100\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Automatic image moderation, removing adult or inappropriate photos using WebPurify and Cloudinary\",\"datePublished\":\"2014-07-22T12:29:53+00:00\",\"dateModified\":\"2025-02-25T22:58:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary\"},\"wordCount\":12,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647372818\/53_auto_image_moderation\/53_auto_image_moderation.jpg?_i=AA\",\"keywords\":[\"Asset Management\",\"Django\",\"Image Transformation\",\"Java\",\"Node\",\"Performance Optimization\",\"PHP\",\"Ruby on Rails\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2014\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary\",\"url\":\"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary\",\"name\":\"Automatic Image Moderation with Minimal Developer Effort\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647372818\/53_auto_image_moderation\/53_auto_image_moderation.jpg?_i=AA\",\"datePublished\":\"2014-07-22T12:29:53+00:00\",\"dateModified\":\"2025-02-25T22:58:58+00:00\",\"description\":\"How to do end-to-end automatic image moderation for inappropriate photos, without hiring in-house moderators and no complex integration\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647372818\/53_auto_image_moderation\/53_auto_image_moderation.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647372818\/53_auto_image_moderation\/53_auto_image_moderation.jpg?_i=AA\",\"width\":2000,\"height\":1100},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Automatic image moderation, removing adult or inappropriate photos using WebPurify and Cloudinary\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Automatic Image Moderation with Minimal Developer Effort","description":"How to do end-to-end automatic image moderation for inappropriate photos, without hiring in-house moderators and no complex integration","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary","og_locale":"en_US","og_type":"article","og_title":"Automatic image moderation, removing adult or inappropriate photos using WebPurify and Cloudinary","og_description":"How to do end-to-end automatic image moderation for inappropriate photos, without hiring in-house moderators and no complex integration","og_url":"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary","og_site_name":"Cloudinary Blog","article_published_time":"2014-07-22T12:29:53+00:00","article_modified_time":"2025-02-25T22:58:58+00:00","og_image":[{"width":2000,"height":1100,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1647372818\/53_auto_image_moderation\/53_auto_image_moderation-jpg?_i=AA","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary"},"author":{"name":"","@id":""},"headline":"Automatic image moderation, removing adult or inappropriate photos using WebPurify and Cloudinary","datePublished":"2014-07-22T12:29:53+00:00","dateModified":"2025-02-25T22:58:58+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary"},"wordCount":12,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647372818\/53_auto_image_moderation\/53_auto_image_moderation.jpg?_i=AA","keywords":["Asset Management","Django","Image Transformation","Java","Node","Performance Optimization","PHP","Ruby on Rails"],"inLanguage":"en-US","copyrightYear":"2014","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary","url":"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary","name":"Automatic Image Moderation with Minimal Developer Effort","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647372818\/53_auto_image_moderation\/53_auto_image_moderation.jpg?_i=AA","datePublished":"2014-07-22T12:29:53+00:00","dateModified":"2025-02-25T22:58:58+00:00","description":"How to do end-to-end automatic image moderation for inappropriate photos, without hiring in-house moderators and no complex integration","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647372818\/53_auto_image_moderation\/53_auto_image_moderation.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647372818\/53_auto_image_moderation\/53_auto_image_moderation.jpg?_i=AA","width":2000,"height":1100},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/automatic_image_moderation_removing_adult_or_inappropriate_photos_using_webpurify_and_cloudinary#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Automatic image moderation, removing adult or inappropriate photos using WebPurify and Cloudinary"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":""}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1647372818\/53_auto_image_moderation\/53_auto_image_moderation.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21247","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=21247"}],"version-history":[{"count":2,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21247\/revisions"}],"predecessor-version":[{"id":37014,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/21247\/revisions\/37014"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/23421"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=21247"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=21247"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=21247"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}