{"id":361884,"date":"2026-11-14T15:57:50","date_gmt":"2026-11-14T15:57:50","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ai-vision-product-attributes-schema-for-woocommerce\/"},"modified":"2026-11-14T15:57:30","modified_gmt":"2026-11-14T15:57:30","slug":"twt-visual-product-attributes","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/twt-visual-product-attributes\/","author":6277636,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.4","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"TWT Visual Product Attributes & Schema for WooCommerce","header_author":"Tampa Web Technologies","header_description":"Auto-detect colors, materials, patterns, and style from product images to build WooCommerce attributes and rich JSON-LD schema for AI shopping agents.","last_updated":"2026-11-14 15:57:30","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/tampawebtech.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":44,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"jadeslair","date":"2026-11-14 15:57:30","revision":3802180}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3802250,"resolution":"1","location":"assets","locale":"","width":1360,"height":796},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3802250,"resolution":"2","location":"assets","locale":"","width":1360,"height":580},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3802250,"resolution":"3","location":"assets","locale":"","width":1360,"height":573},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3802250,"resolution":"4","location":"assets","locale":"","width":1520,"height":600}},"screenshots":{"1":"The \"Visual Product Attributes\" meta box on the product edit screen with extracted values ready for review.","2":"Settings screen: provider, model, API key, apply mode, and confidence threshold.","3":"Bulk action on the Products list.","4":"Enriched JSON-LD in Google's Rich Results Test."}},"plugin_section":[],"plugin_tags":[2353,9032,2516,245147,286],"plugin_category":[45],"plugin_contributors":[270656],"plugin_business_model":[],"class_list":["post-361884","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-attributes","plugin_tags-json-ld","plugin_tags-product-schema","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-jadeslair","plugin_committers-jadeslair"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/twt-visual-product-attributes.svg","icon_2x":false,"generated":true},"screenshots":[{"src":"https:\/\/ps.w.org\/twt-visual-product-attributes\/assets\/screenshot-1.png?rev=3802250","caption":"The \"Visual Product Attributes\" meta box on the product edit screen with extracted values ready for review."},{"src":"https:\/\/ps.w.org\/twt-visual-product-attributes\/assets\/screenshot-2.png?rev=3802250","caption":"Settings screen: provider, model, API key, apply mode, and confidence threshold."},{"src":"https:\/\/ps.w.org\/twt-visual-product-attributes\/assets\/screenshot-3.png?rev=3802250","caption":"Bulk action on the Products list."},{"src":"https:\/\/ps.w.org\/twt-visual-product-attributes\/assets\/screenshot-4.png?rev=3802250","caption":"Enriched JSON-LD in Google's Rich Results Test."}],"raw_content":"<!--section=description-->\n<p>Most stores upload product photos with little to no metadata. WooCommerce natively outputs barebones schema (name, price, availability, SKU) \u2014 leaving out the exact visual attributes that Google Merchant Center, Google Lens, and AI shopping agents (ChatGPT, Gemini, Perplexity) rely on for visual grounding and product recommendations.<\/p>\n\n<p><strong>TWT Visual Product Attributes<\/strong> fixes that with one click:<\/p>\n\n<ol>\n<li>Open a product, click <strong>\"Extract Attributes with AI\"<\/strong>.<\/li>\n<li>A vision model looks at your featured image and returns structured attributes: primary\/secondary colour, material, pattern, style, item type, gender\/age group, visible features, and suggested alt text.<\/li>\n<li>Review (and edit) the values, click <strong>Apply<\/strong> \u2014 and the plugin:\n\n<ul>\n<li>Assigns <strong>WooCommerce global attributes<\/strong> (<code>pa_color<\/code>, <code>pa_material<\/code>, <code>pa_pattern<\/code>, <code>pa_style<\/code>, \u2026), creating attributes and terms as needed, so faceted shop filters work out of the box.<\/li>\n<li>Writes <strong>image alt text<\/strong> (only when the image has none) for accessibility and image SEO.<\/li>\n<li>Enriches your <strong>Product JSON-LD<\/strong> with <code>color<\/code>, <code>material<\/code>, <code>pattern<\/code>, <code>audience<\/code>, and <code>additionalProperty<\/code> nodes \u2014 merging into Yoast SEO or Rank Math schema when present, never emitting a competing Product node.<\/li>\n<\/ul><\/li>\n<\/ol>\n\n<h4>Uses the AI WordPress already has \u2014 or bring your own key<\/h4>\n\n<p>On <strong>WordPress 7.0+<\/strong>, the plugin plugs straight into the core <strong>WordPress AI Client<\/strong>: if you've connected a provider through one of the official AI Provider plugins (Anthropic, Google, or OpenAI), extraction works immediately with <strong>no API key entered here at all<\/strong> \u2014 your credentials stay where WordPress keeps them.<\/p>\n\n<p>On any WordPress from 6.2, or if you prefer direct control, connect your own API key for <strong>Google Gemini<\/strong> (Flash models are free-tier friendly), <strong>OpenAI<\/strong>, or <strong>Anthropic Claude<\/strong>. Images go directly from your server to the provider you chose. No middleman service, no monthly fee, no telemetry.<\/p>\n\n<h4>Bulk processing<\/h4>\n\n<p>Select products in the Products list and run <strong>\"Extract attributes with AI\"<\/strong> as a bulk action. Jobs run in the background through Action Scheduler (bundled with WooCommerce), staggered to respect API rate limits. Choose whether results apply automatically above a confidence threshold or wait for review.<\/p>\n\n<h4>External services<\/h4>\n\n<p>This plugin sends data to exactly one third-party service: the AI vision provider you choose. Nothing is sent anywhere until you configure a provider and click \"Extract Attributes with AI\" (or run the bulk action).<\/p>\n\n<p>What is sent per extraction: the product image (as base64), the product title, its category names, and a short excerpt of its description \u2014 sent solely to generate the attribute suggestions. No other data, no analytics, no telemetry, and nothing is proxied through any service of ours.<\/p>\n\n<p>When using the <strong>WordPress AI<\/strong> provider option (WordPress 7.0+), that data is routed through the WordPress AI Client to whichever provider your site has connected via an official AI Provider plugin \u2014 the terms of that connected provider apply. When using a direct provider with your own API key, data is sent from your server to one of:<\/p>\n\n<ul>\n<li><strong>Google Gemini API<\/strong> (generativelanguage.googleapis.com) \u2014 <a href=\"https:\/\/ai.google.dev\/gemini-api\/terms\">Terms<\/a>, <a href=\"https:\/\/policies.google.com\/privacy\">Privacy<\/a><\/li>\n<li><strong>OpenAI API<\/strong> (api.openai.com) \u2014 <a href=\"https:\/\/openai.com\/policies\/terms-of-use\">Terms<\/a>, <a href=\"https:\/\/openai.com\/policies\/privacy-policy\">Privacy<\/a><\/li>\n<li><strong>Anthropic API<\/strong> (api.anthropic.com) \u2014 <a href=\"https:\/\/www.anthropic.com\/legal\/consumer-terms\">Terms<\/a>, <a href=\"https:\/\/www.anthropic.com\/legal\/privacy\">Privacy<\/a><\/li>\n<\/ul>\n\n<h4>Built to not fight your stack<\/h4>\n\n<ul>\n<li>No page builder, no SEO-suite takeover \u2014 one meta box, one settings screen, one bulk action.<\/li>\n<li>Only fills schema properties that are absent; your existing values and other plugins always win.<\/li>\n<li>Existing product attribute values are preserved \u2014 extracted terms are appended, never removed.<\/li>\n<li>Every step is filterable: <code>avpa_schema_fields<\/code>, <code>avpa_prompt<\/code>, <code>avpa_providers<\/code>, <code>avpa_terms_by_taxonomy<\/code>, <code>avpa_jsonld<\/code>.<\/li>\n<\/ul>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20paid%20ai%20subscription%3F\"><h3>Do I need a paid AI subscription?<\/h3><\/dt>\n<dd><p>No subscription to this plugin, ever. On WordPress 7.0+ with a connected AI provider, the plugin uses your site's existing WordPress AI credentials \u2014 nothing extra to set up. Otherwise you need an API key from Google, OpenAI, or Anthropic. Gemini Flash's free tier comfortably covers small catalogs; paid usage typically costs a fraction of a cent per image.<\/p><\/dd>\n<dt id=\"what%20is%20the%20%22wordpress%20ai%22%20provider%20option%3F\"><h3>What is the \"WordPress AI\" provider option?<\/h3><\/dt>\n<dd><p>WordPress 7.0 ships the AI Client in core, and the official AI Provider plugins register your credentials with it site-wide, so every AI-aware plugin can share one key. Install any of them \u2014 <a href=\"https:\/\/wordpress.org\/plugins\/ai-provider-for-anthropic\/\">AI Provider for Anthropic<\/a>, <a href=\"https:\/\/wordpress.org\/plugins\/ai-provider-for-google\/\">AI Provider for Google<\/a>, or <a href=\"https:\/\/wordpress.org\/plugins\/ai-provider-for-openai\/\">AI Provider for OpenAI<\/a> \u2014 add your key on its settings screen, and this plugin routes extraction through it: WordPress picks the model, your key never touches this plugin's settings, and the External services notes for the connected provider apply.<\/p><\/dd>\n<dt id=\"where%20is%20my%20api%20key%20stored%3F\"><h3>Where is my API key stored?<\/h3><\/dt>\n<dd><p>In the WordPress options table. For stronger secrecy, define <code>AVPA_API_KEY<\/code> in <code>wp-config.php<\/code> \u2014 it overrides the stored key and the key never touches the database.<\/p><\/dd>\n<dt id=\"are%20my%20images%20sent%20anywhere%20else%3F\"><h3>Are my images sent anywhere else?<\/h3><\/dt>\n<dd><p>Only to the AI provider you configured, directly from your server. Nothing is proxied through third-party services.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20yoast%20seo%20or%20rank%20math%3F\"><h3>Does it work with Yoast SEO or Rank Math?<\/h3><\/dt>\n<dd><p>Yes. When either plugin outputs the Product schema node, this plugin enriches <em>their<\/em> node via their filter APIs instead of printing a duplicate.<\/p><\/dd>\n<dt id=\"does%20it%20overwrite%20my%20existing%20attributes%20or%20alt%20text%3F\"><h3>Does it overwrite my existing attributes or alt text?<\/h3><\/dt>\n<dd><p>No. Attribute terms are appended to whatever is already assigned, and alt text is only written when the image has none.<\/p><\/dd>\n<dt id=\"which%20image%20is%20analysed%3F\"><h3>Which image is analysed?<\/h3><\/dt>\n<dd><p>The featured image, falling back to the first gallery image.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: WordPress AI Client support (7.0+) plus direct Gemini \/ OpenAI \/ Anthropic BYOK providers, review-and-apply meta box, global attribute writing, alt text, JSON-LD enrichment, Action Scheduler bulk runs.<\/li>\n<\/ul>","raw_excerpt":"Auto-detect colors, materials, patterns, and style from product images to build WooCommerce attributes and rich JSON-LD schema for AI shopping agents.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/361884","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=361884"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/jadeslair"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=361884"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=361884"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=361884"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=361884"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=361884"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=361884"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}