{"id":357839,"date":"2026-08-27T10:32:18","date_gmt":"2026-08-27T10:32:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/photo-check\/"},"modified":"2026-08-27T10:31:47","modified_gmt":"2026-08-27T10:31:47","slug":"fotalyze","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/fotalyze\/","author":23553967,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.3.1","stable_tag":"0.3.1","tested":"7.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Fotalyze","header_author":"Gr\u00e9goire","header_description":"Scores the customer's photo at upload, before checkout: sharpness, exposure, resolution. Warns without blocking.","assets_banners_color":"fafdfb","last_updated":"2026-08-27 10:31:47","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":54,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.3.1":{"tag":"0.3.1","author":"warzi37","date":"2026-08-27 10:31:47","revision":3668596}},"upgrade_notice":{"0.2.0":"<p>Adds optional Fotalyze Pro (blocking, per-product thresholds, order\nhistory). Nothing changes for the free tier.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3668596,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3668596,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3669429,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3669429,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.3.1"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[133,10685,9014,259,286],"plugin_category":[45,50],"plugin_contributors":[277825],"plugin_business_model":[],"class_list":["post-357839","plugin","type-plugin","status-publish","hentry","plugin_tags-image","plugin_tags-personalization","plugin_tags-quality","plugin_tags-upload","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-media","plugin_contributors-warzi37","plugin_committers-warzi37"],"banners":{"banner":"https:\/\/ps.w.org\/fotalyze\/assets\/banner-772x250.png?rev=3669429","banner_2x":"https:\/\/ps.w.org\/fotalyze\/assets\/banner-1544x500.png?rev=3669429","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/fotalyze\/assets\/icon-128x128.png?rev=3668596","icon_2x":"https:\/\/ps.w.org\/fotalyze\/assets\/icon-256x256.png?rev=3668596","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Personalized-product shops receive unusable photos: blurry, backlit, too\nsmall to print. The problem is discovered after the order, and costs an email\nexchange, a refund, or an unhappy customer.<\/p>\n\n<p>Fotalyze scores the photo the moment the customer picks it, and tells them\nclearly what's wrong \u2014 before they pay.<\/p>\n\n<h4>The photo never leaves the customer's device<\/h4>\n\n<p>All the analysis happens in the browser. No image is ever sent to a server,\nneither yours nor the plugin's. There is no third-party service, no account to\ncreate, no outgoing request, no personal data transmitted.<\/p>\n\n<h4>Warns, never blocks<\/h4>\n\n<p>By default, the plugin warns the customer and lets them order anyway. This is\ndeliberate: no automated tool judges a photo as well as a human does, and\nrejecting a good photo costs a sale.<\/p>\n\n<p>Blocking the add-to-cart button exists as a Pro feature, so it's a deliberate\nchoice you make once the thresholds have been proven on your own orders \u2014 not\nsomething a fresh install can do by accident.<\/p>\n\n<h4>What is measured<\/h4>\n\n<ul>\n<li><strong>Sharpness<\/strong> \u2014 Laplacian variance, to catch motion blur or missed focus.<\/li>\n<li><strong>Exposure<\/strong> \u2014 overexposed or overly dark areas, where detail is permanently lost.<\/li>\n<li><strong>Backlight<\/strong> \u2014 a subject noticeably darker than its background. Warns only.<\/li>\n<li><strong>Resolution<\/strong> \u2014 actual image size compared to what your print format requires.<\/li>\n<li><strong>Screenshot detection<\/strong> \u2014 recognises files that aren't photographs at all.<\/li>\n<\/ul>\n\n<p>Shop-wide thresholds are adjustable from WooCommerce \u2192 Fotalyze.<\/p>\n\n<h4>The score stays attached to the order<\/h4>\n\n<p>The verdict the customer saw is recorded on the order line \u2014 for free, on\nevery order. So if a dispute comes up, you know the customer was warned and\nordered anyway.<\/p>\n\n<h4>Free vs. Pro<\/h4>\n\n<p>Free forever:<\/p>\n\n<ul>\n<li>Photo scoring with every metric above.<\/li>\n<li>Customer-facing warning \u2014 never blocks the order.<\/li>\n<li>Shop-wide thresholds.<\/li>\n<li>The score attached to every order line.<\/li>\n<\/ul>\n\n<p>Fotalyze Pro adds:<\/p>\n\n<ul>\n<li>Optional blocking of the add-to-cart button, once you trust your thresholds.<\/li>\n<li>Per-product thresholds \u2014 a large-format print can demand a higher\nresolution than a small one, without changing the shop-wide default.<\/li>\n<li>A history screen listing every order with a photo score, instead of opening\norders one by one.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Open WooCommerce \u2192 Fotalyze to adjust the thresholds if needed.<\/li>\n<li>That's it: the plugin attaches itself to the file fields present on your\nproduct pages, whichever plugin provides them.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"are%20my%20customers%27%20photos%20sent%20anywhere%3F\"><h3>Are my customers' photos sent anywhere?<\/h3><\/dt>\n<dd><p>No. The analysis happens in the customer's browser. No file is transmitted,\nstored, or accessed by any third party. The plugin makes no outgoing request.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20the%20upload%20plugin%20i%20already%20use%3F\"><h3>Does it work with the upload plugin I already use?<\/h3><\/dt>\n<dd><p>The plugin doesn't attach to a specific field: it watches for image-accepting\nfile fields on the product page. So it works with most upload plugins without\nany configuration.<\/p><\/dd>\n<dt id=\"can%20the%20customer%20order%20despite%20a%20warning%3F\"><h3>Can the customer order despite a warning?<\/h3><\/dt>\n<dd><p>Yes, by default. Blocking is an option you enable yourself.<\/p><\/dd>\n<dt id=\"does%20the%20score%20recorded%20on%20the%20order%20count%20as%20proof%3F\"><h3>Does the score recorded on the order count as proof?<\/h3><\/dt>\n<dd><p>No. It's computed in the customer's browser and submitted with the form: it's\na self-reported statement, not binding proof. It's more than enough to inform\nan ordinary customer conversation.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20the%20file%20can%27t%20be%20read%3F\"><h3>What happens if the file can't be read?<\/h3><\/dt>\n<dd><p>The plugin doesn't judge what it couldn't measure: it flags this and lets the\ncustomer order anyway.<\/p><\/dd>\n<dt id=\"does%20licensing%20collect%20any%20data%3F\"><h3>Does licensing collect any data?<\/h3><\/dt>\n<dd><p>The photo-scoring engine itself doesn't \u2014 it stays entirely in the customer's\nbrowser, free or Pro. Licensing is handled by Freemius, which asks for your\nown opt-in (not your customers') on activation, and may then collect\nnon-sensitive site data (URL, WordPress and plugin versions) to manage your\nlicense and check for updates. See\n<a href=\"https:\/\/freemius.com\/privacy\/\">Freemius's privacy policy<\/a> for details. This\nis separate from and unrelated to customer photos, which Freemius never sees.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.3.1<\/h4>\n\n<ul>\n<li>Renamed from SnapProof to Fotalyze: the WordPress.org review team found\nSnapProof already in use by several independent photography products.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Renamed from Photo-Check to SnapProof.<\/li>\n<li>Fotalyze Pro (blocking, per-product thresholds, order history) is now a\nseparate add-on, sold through Freemius and installed on top of this plugin\nonce purchased \u2014 the code for those features no longer ships in this free\nplugin at all. Nothing changes for the free tier itself.<\/li>\n<li>Dropped the bundled French translation file \u2014 translations are now handled\nentirely through translate.wordpress.org.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Fotalyze Pro: optional blocking, per-product thresholds, order history\nscreen. Free tier unchanged \u2014 photo scoring, customer warning, shop-wide\nthresholds, and the score attached to every order stay free.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First release: photo scoring at upload, customer warning, adjustable\nthresholds, optional blocking, screenshot detection, score attached to the\norder line.<\/li>\n<\/ul>","raw_excerpt":"Checks the customer&#039;s photo before checkout and warns them if it won&#039;t print well. Everything is computed in their browser.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/357839","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=357839"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/warzi37"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=357839"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=357839"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=357839"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=357839"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=357839"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=357839"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}