<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>PlantLab.ai | Blog</title>
    <link>https://blog.plantlab.ai/</link>
    <description>AI based plant health diagnosis</description>
    <pubDate>Fri, 28 Aug 2026 19:05:39 +0000</pubDate>
    <image>
      <url>https://i.snap.as/7V8pjnV9.jpeg</url>
      <title>PlantLab.ai | Blog</title>
      <link>https://blog.plantlab.ai/</link>
    </image>
    <item>
      <title>What Shipped This Summer: A PlantLab Progress Report</title>
      <link>https://blog.plantlab.ai/plantlab-progress-summer-2026?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[Three antique botanical study plates side by side - two vigorous cannabis specimens and one with drooping, ochre-faded lower leaves - above a fine ink rule punctuated with engraved tick marks like a season of logged entries&#xA;&#xA;The Short Version&#xA;&#xA;Between June and August 2026, PlantLab learned to diagnose several plants in one photo, started naming the family of a condition when it isn&#39;t sure of the specific name, made model upgrades visible to your code, and fixed an upload failure that took three tries to actually kill.&#xA;&#xA;The middle two change what comes back in your JSON.&#xA;&#xA;!--more--&#xA;&#xA;I don&#39;t write these often. Most of what happens on a project like this isn&#39;t worth a post, and I&#39;d rather publish something useful about spider mites than a changelog with a bow on it. But enough landed this summer to be worth one place to see it, and the failures are more interesting than the features.&#xA;&#xA;---&#xA;&#xA;One Photo, Several Plants&#xA;&#xA;The API used to assume your photo held one plant. Shoot a whole tent and it averaged everything into one answer for the room, which is the wrong answer for every plant in it.&#xA;&#xA;It now finds each plant separately and returns a results array - one entry per plant, each with its own bounding box, health call, growth stage and conditions. Three plants, two fine and one yellowing, gets you exactly that, and the box tells you which pot to walk to.&#xA;&#xA;This was a breaking change: the per-plant fields moved off the top level into results]. A single-plant photo returns an array of one, so it&#39;s the same code path either way. There&#39;s a [longer write-up if you&#39;re wiring it up.&#xA;&#xA;---&#xA;&#xA;It Admits When It&#39;s Unsure&#xA;&#xA;The change I&#39;m happiest with, and the least flashy.&#xA;&#xA;Some plant problems look nearly identical in a photograph. Calcium and magnesium deficiencies need different fixes, and there are images where nothing in the RGB data cleanly separates them. The honest move there isn&#39;t to pick one and sound confident.&#xA;&#xA;So every condition and pest now carries a coarsegroup - the clinical family it belongs to, one of six. The family is often right when the specific name is shaky, so you can alert on &#34;something in the mobile nutrient family is happening&#34; and stand on much firmer ground than &#34;it&#39;s definitely magnesium.&#34;&#xA;&#xA;A secondary finding can also come back marked suspected: true. That flags something for your attention without claiming it. Show those to a human. Don&#39;t dose on them.&#xA;&#xA;Both fields are additive, so nothing broke when they appeared.&#xA;&#xA;---&#xA;&#xA;Model Upgrades Are Visible Now&#xA;&#xA;Responses carry an engineversion naming the build and model iteration that served your call.&#xA;&#xA;That matters because the models behind a diagnosis were replaced over the summer, and they&#39;ll be replaced again. If you cache results or tune thresholds against particular behavior, watch that field and invalidate when it moves. It used to be that a model upgrade quietly changed things underneath you. Now you can branch on it.&#xA;&#xA;The honest numbers haven&#39;t moved much and I won&#39;t inflate them: cannabis verification sits at 99.96% balanced accuracy, health screening at 98.4%, both on plants held out from training. Naming the exact condition is still harder than noticing something&#39;s wrong. That gap is why the hedging fields exist.&#xA;&#xA;---&#xA;&#xA;The Upload Bug That Took Three Tries&#xA;&#xA;My favorite failure of the summer.&#xA;&#xA;Uploads from phones started failing. Not all of them, not reproducibly, and never on my machine. The pattern turned out to be full-resolution photos over slow upstream connections - which describes a lot of growers and almost no developers.&#xA;&#xA;The server was hanging up while the phone was still sending. I raised the read timeout from 30 seconds to 120 and shipped it. Reports kept coming. Raised it to 300 and shipped that. Reports kept coming.&#xA;&#xA;There were three timeouts in that path, not one, and they were all different: the API&#39;s own, the reverse proxy in front of it, and the client&#39;s. Fixing one just moved the failure to whichever was now shortest. The connection died at the tightest link no matter what I did to the others. Aligned all three at 300 seconds and the reports stopped.&#xA;&#xA;I shouldn&#39;t have needed this lesson twice: when a timeout fix doesn&#39;t work, the timeout you fixed isn&#39;t the one that fired. Find every layer that can hang up before you touch any of them.&#xA;&#xA;The mobile app shipped with the aligned values in July.&#xA;&#xA;---&#xA;&#xA;Quieter Things&#xA;&#xA;The API no longer dies at boot on a transient database hiccup. It used to try once and exit, so a DNS blip during a deploy could take the service down until someone noticed.&#xA;There&#39;s a partners page now for hardware and platform companies who want plant health inside their own products.&#xA;/usage returns your counts, limits and remaining quota, and doesn&#39;t itself consume quota.&#xA;I measured what ruins a diagnosis photo. Tight close-ups and overexposure hurt far more than blur or purple light, which is the opposite of what most people assume.&#xA;Infrastructure runs in Europe. That happened earlier in the year, and here&#39;s why.&#xA;&#xA;---&#xA;&#xA;What&#39;s Next&#xA;&#xA;More work on naming the specific condition rather than the family, since that&#39;s the honest weak point and everything else is downstream of it. And better handling of the photos growers actually take, which are lit by purple LEDs at midnight rather than by a photographer.&#xA;&#xA;Free tier is 3 diagnoses a day, no card. The full contract is at plantlab.ai/openapi.json, with a field-by-field walkthrough if you want it, plus guides for Home Assistant and Node-RED.&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://i.snap.as/qg2X9wjJ.png" alt="Three antique botanical study plates side by side - two vigorous cannabis specimens and one with drooping, ochre-faded lower leaves - above a fine ink rule punctuated with engraved tick marks like a season of logged entries"/></p>

<h2 id="the-short-version">The Short Version</h2>

<p>Between June and August 2026, PlantLab learned to diagnose several plants in one photo, started naming the family of a condition when it isn&#39;t sure of the specific name, made model upgrades visible to your code, and fixed an upload failure that took three tries to actually kill.</p>

<p>The middle two change what comes back in your JSON.</p>



<p>I don&#39;t write these often. Most of what happens on a project like this isn&#39;t worth a post, and I&#39;d rather publish something useful about spider mites than a changelog with a bow on it. But enough landed this summer to be worth one place to see it, and the failures are more interesting than the features.</p>

<hr/>

<h2 id="one-photo-several-plants">One Photo, Several Plants</h2>

<p>The API used to assume your photo held one plant. Shoot a whole tent and it averaged everything into one answer for the room, which is the wrong answer for every plant in it.</p>

<p>It now finds each plant separately and returns a <code>results</code> array – one entry per plant, each with its own bounding box, health call, growth stage and conditions. Three plants, two fine and one yellowing, gets you exactly that, and the box tells you which pot to walk to.</p>

<p>This was a breaking change: the per-plant fields moved off the top level into <code>results[]</code>. A single-plant photo returns an array of one, so it&#39;s the same code path either way. There&#39;s a <a href="https://blog.plantlab.ai/plantlab-multi-plant-analysis-schema-3">longer write-up</a> if you&#39;re wiring it up.</p>

<hr/>

<h2 id="it-admits-when-it-s-unsure">It Admits When It&#39;s Unsure</h2>

<p>The change I&#39;m happiest with, and the least flashy.</p>

<p>Some plant problems look nearly identical in a photograph. Calcium and magnesium deficiencies need different fixes, and there are images where nothing in the RGB data cleanly separates them. The honest move there isn&#39;t to pick one and sound confident.</p>

<p>So every condition and pest now carries a <code>coarse_group</code> – the clinical family it belongs to, one of six. The family is often right when the specific name is shaky, so you can alert on “something in the mobile nutrient family is happening” and stand on much firmer ground than “it&#39;s definitely magnesium.”</p>

<p>A secondary finding can also come back marked <code>suspected: true</code>. That flags something for your attention without claiming it. Show those to a human. Don&#39;t dose on them.</p>

<p>Both fields are additive, so nothing broke when they appeared.</p>

<hr/>

<h2 id="model-upgrades-are-visible-now">Model Upgrades Are Visible Now</h2>

<p>Responses carry an <code>engine_version</code> naming the build and model iteration that served your call.</p>

<p>That matters because the models behind a diagnosis were replaced over the summer, and they&#39;ll be replaced again. If you cache results or tune thresholds against particular behavior, watch that field and invalidate when it moves. It used to be that a model upgrade quietly changed things underneath you. Now you can branch on it.</p>

<p>The honest numbers haven&#39;t moved much and I won&#39;t inflate them: cannabis verification sits at 99.96% balanced accuracy, health screening at 98.4%, both on plants held out from training. Naming the exact condition is still harder than noticing something&#39;s wrong. That gap is why the hedging fields exist.</p>

<hr/>

<h2 id="the-upload-bug-that-took-three-tries">The Upload Bug That Took Three Tries</h2>

<p>My favorite failure of the summer.</p>

<p>Uploads from phones started failing. Not all of them, not reproducibly, and never on my machine. The pattern turned out to be full-resolution photos over slow upstream connections – which describes a lot of growers and almost no developers.</p>

<p>The server was hanging up while the phone was still sending. I raised the read timeout from 30 seconds to 120 and shipped it. Reports kept coming. Raised it to 300 and shipped that. Reports kept coming.</p>

<p>There were three timeouts in that path, not one, and they were all different: the API&#39;s own, the reverse proxy in front of it, and the client&#39;s. Fixing one just moved the failure to whichever was now shortest. The connection died at the tightest link no matter what I did to the others. Aligned all three at 300 seconds and the reports stopped.</p>

<p>I shouldn&#39;t have needed this lesson twice: when a timeout fix doesn&#39;t work, the timeout you fixed isn&#39;t the one that fired. Find every layer that can hang up before you touch any of them.</p>

<p>The mobile app shipped with the aligned values in July.</p>

<hr/>

<h2 id="quieter-things">Quieter Things</h2>
<ul><li>The API no longer dies at boot on a transient database hiccup. It used to try once and exit, so a DNS blip during a deploy could take the service down until someone noticed.</li>
<li>There&#39;s a <a href="https://plantlab.ai/partners">partners page</a> now for hardware and platform companies who want plant health inside their own products.</li>
<li><code>/usage</code> returns your counts, limits and remaining quota, and doesn&#39;t itself consume quota.</li>
<li>I <a href="https://blog.plantlab.ai/how-to-photograph-cannabis-plants-for-diagnosis">measured what ruins a diagnosis photo</a>. Tight close-ups and overexposure hurt far more than blur or purple light, which is the opposite of what most people assume.</li>
<li>Infrastructure runs in Europe. That happened earlier in the year, and <a href="https://blog.plantlab.ai/plantlab-runs-in-europe">here&#39;s why</a>.</li></ul>

<hr/>

<h2 id="what-s-next">What&#39;s Next</h2>

<p>More work on naming the specific condition rather than the family, since that&#39;s the honest weak point and everything else is downstream of it. And better handling of the photos growers actually take, which are lit by purple LEDs at midnight rather than by a photographer.</p>

<p>Free tier is 3 diagnoses a day, no card. The full contract is at <a href="https://plantlab.ai/openapi.json">plantlab.ai/openapi.json</a>, with a <a href="https://blog.plantlab.ai/cannabis-plant-diagnosis-api">field-by-field walkthrough</a> if you want it, plus guides for <a href="https://blog.plantlab.ai/home-assistant-plant-monitoring">Home Assistant</a> and <a href="https://blog.plantlab.ai/node-red-plantlab-automation">Node-RED</a>.</p>
]]></content:encoded>
      <guid>https://blog.plantlab.ai/plantlab-progress-summer-2026</guid>
      <pubDate>Fri, 14 Aug 2026 16:17:14 +0000</pubDate>
    </item>
    <item>
      <title>The Cannabis Plant Diagnosis API: What One Photo Gets You Back</title>
      <link>https://blog.plantlab.ai/cannabis-plant-diagnosis-api?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[A herbarium specimen sheet in antique botanical style - a pressed cannabis leaf drawn in fine engraved ink on the left, joined by a single ruled line to a naturalist&#39;s record card of neat abstract pen strokes on the right&#xA;&#xA;What It Does&#xA;&#xA;The PlantLab API takes one image of a cannabis plant and returns structured JSON describing what&#39;s wrong with it: one of 30 conditions and pests (or healthy), a growth stage, a confidence score on every call it makes, and a bounding box per plant when the photo has more than one. It answers in about 18 milliseconds. Auth is a single X-API-Key header, and the free tier is 3 diagnoses a day without a card.&#xA;&#xA;If you already have a camera pointed at your tent, this is the piece that turns a JPEG into something your automation can branch on.&#xA;&#xA;!--more--&#xA;&#xA;Most grow stacks are blind in the same place. Temperature, humidity, VPD, EC, runoff pH, substrate moisture at three depths - all of it describes the room, none of it describes the plant. So the loop still ends at a person squinting at a phone.&#xA;&#xA;Every response below came out of the live engine.&#xA;&#xA;---&#xA;&#xA;One Call&#xA;&#xA;curl -X POST https://api.plantlab.ai/diagnose \&#xA;  -H &#34;X-API-Key: $PLANTLABAPIKEY&#34; \&#xA;  -F &#34;image=@canopy.jpg&#34;&#xA;&#xA;Multipart upload, one required field.&#xA;&#xA;---&#xA;&#xA;What Comes Back&#xA;&#xA;A real response, from a plant with powdery mildew on it:&#xA;&#xA;{&#xA;  &#34;requestid&#34;: &#34;8919a46e-a704-4a4e-a700-b754188165b5&#34;,&#xA;  &#34;schemaversion&#34;: &#34;3.1.0&#34;,&#xA;  &#34;engineversion&#34;: { &#34;api&#34;: &#34;1.0.166&#34;, &#34;models&#34;: &#34;v6&#34; },&#xA;  &#34;success&#34;: true,&#xA;  &#34;iscannabis&#34;: true,&#xA;  &#34;cannabisconfidence&#34;: 0.95,&#xA;  &#34;results&#34;: [&#xA;    {&#xA;      &#34;bbox&#34;: { &#34;x0&#34;: 0, &#34;y0&#34;: 0, &#34;x1&#34;: 1, &#34;y1&#34;: 1, &#34;normalized&#34;: true },&#xA;      &#34;ishealthy&#34;: false,&#xA;      &#34;healthconfidence&#34;: 0.1,&#xA;      &#34;growthstage&#34;: &#34;vegetative&#34;,&#xA;      &#34;growthstageconfidence&#34;: 0.9,&#xA;      &#34;conditions&#34;: [&#xA;        {&#xA;          &#34;classid&#34;: &#34;powderymildew&#34;,&#xA;          &#34;displayname&#34;: &#34;Powdery Mildew&#34;,&#xA;          &#34;confidence&#34;: 0.8,&#xA;          &#34;coarsegroup&#34;: &#34;fungaldisease&#34;&#xA;        },&#xA;        {&#xA;          &#34;classid&#34;: &#34;potassiumdeficiency&#34;,&#xA;          &#34;displayname&#34;: &#34;Potassium Deficiency&#34;,&#xA;          &#34;confidence&#34;: 0.6,&#xA;          &#34;suspected&#34;: true,&#xA;          &#34;coarsegroup&#34;: &#34;mobilenutrient&#34;&#xA;        }&#xA;      ]&#xA;    }&#xA;  ]&#xA;}&#xA;&#xA;It returned two things. The mildew is the call it&#39;s making. The potassium deficiency is marked suspected - something else worth a look, without claiming it.&#xA;&#xA;---&#xA;&#xA;The Fields&#xA;&#xA;| Field | Level | What it means |&#xA;|---|---|---|&#xA;| iscannabis | image | Whether the photo is cannabis at all. Decided first, so it sits at the top |&#xA;| cannabisconfidence | image | Probability the image is cannabis |&#xA;| results[] | image | One entry per detected plant. A single-plant photo returns an array of one |&#xA;| bbox | plant | Where this plant is, in normalized 0-1 coordinates. Multiply by width and height to draw it |&#xA;| ishealthy | plant | The health call for this plant |&#xA;| healthconfidence | plant | Probability the plant is healthy. Read the next section before using it |&#xA;| growthstage | plant | seedling, vegetative, or flowering |&#xA;| conditions[] | plant | Diseases and deficiencies, most confident first |&#xA;| pests[] | plant | Pests, same shape |&#xA;| schemaversion | response | Contract version, currently 3.1.0 |&#xA;| engineversion | response | The build and model iteration that served this call |&#xA;&#xA;The field people get wrong&#xA;&#xA;healthconfidence is the probability the plant is healthy. It isn&#39;t confidence in the verdict you were just handed.&#xA;&#xA;In the response above, ishealthy is false and healthconfidence is 0.1. That&#39;s not a shaky answer - it&#39;s a very confident sick one, because a 10% chance of healthy is a 90% chance of not. Write if healthconfidence &lt; 0.5: flaguncertain() and you&#39;ll fire uncertainty warnings on the clearest sick plants you own while staying quiet on the genuinely ambiguous ones.&#xA;&#xA;When ishealthy is false, low healthconfidence means more certain, not less.&#xA;&#xA;suspected and coarsegroup&#xA;&#xA;suspected: true marks a secondary finding the engine wants to flag but isn&#39;t asserting. Show it to a human; don&#39;t dose on it.&#xA;&#xA;coarsegroup is the clinical family a condition belongs to - one of mobilenutrient, immobilenewgrowth, water, light, fungaldisease, pest. Some problems genuinely look alike in a photograph, and the family is often right when the specific name is shaky. If you&#39;re deciding whether to alert rather than what to dose, group on this instead.&#xA;&#xA;Also in the response&#xA;&#xA;Three more fields show up when they apply.&#xA;&#xA;muldershypotheses names nutrient excesses that would explain the deficiency you&#39;re looking at. A calcium excess locking out nitrogen looks exactly like a nitrogen shortage, and feeding more nitrogen makes it worse.&#xA;&#xA;progressionrisks says what this turns into if nothing changes.&#xA;&#xA;stageadvisories adds context that depends on the plant&#39;s stage. Lower-leaf yellowing in late flower is usually normal, and it says so rather than letting you chase it.&#xA;&#xA;---&#xA;&#xA;The Rest of the Surface&#xA;&#xA;| Endpoint | Method | Purpose |&#xA;|---|---|---|&#xA;| /diagnose | POST | The one you came for |&#xA;| /usage | GET | Current counts, limits, remaining quota. Read-only, doesn&#39;t consume quota |&#xA;| /health | GET | Liveness. No key required |&#xA;| /info | GET | Metadata and capabilities |&#xA;| /history | GET | Past diagnoses, newest first. Pro tier and above, with data sharing enabled |&#xA;| /feedback | POST | Report a wrong result |&#xA;&#xA;/usage is the one integrators forget exists and then rebuild badly. Poll it instead of counting your own calls.&#xA;&#xA;The full machine-readable contract is at plantlab.ai/openapi.json, so generate a client rather than hand-rolling one.&#xA;&#xA;---&#xA;&#xA;Limits and Errors&#xA;&#xA;Free tier is 3 diagnoses a day. No card, no trial clock, and nothing to cancel - paid plans aren&#39;t live yet, so right now that&#39;s the whole offer. Higher-volume tiers exist in the API for granted accounts, and paid access is coming.&#xA;&#xA;429 means you hit a limit. 408 means inference timed out. 400 on upload usually means the image failed a sanity check rather than a malformed request.&#xA;&#xA;---&#xA;&#xA;What It Doesn&#39;t Do&#xA;&#xA;It&#39;s cannabis-specific. Point it at a tomato and iscannabis comes back false, which is correct and not useful.&#xA;&#xA;It reads a photograph, so it&#39;s bounded by what a photograph contains. Root-zone problems only appear once they reach the leaves, and two conditions that look identical in RGB are hard to separate in RGB. That&#39;s why suspected and coarsegroup exist instead of a single confident label.&#xA;&#xA;It&#39;s sensitive to how you shoot. Overexposure and tight close-ups reliably produce wrong answers - I measured what breaks a diagnosis, and the results aren&#39;t what most people guess.&#xA;&#xA;It doesn&#39;t replace looking at your plants. It notices things earlier and more consistently than you will at 11pm, and it never gets bored.&#xA;&#xA;On accuracy: cannabis verification runs at 99.96% balanced accuracy and health screening at 98.4%, both on plants held out from training. Naming the specific condition is a harder problem than deciding something is wrong, which is the honest reason those hedging fields are in the response at all.&#xA;&#xA;---&#xA;&#xA;Getting Started&#xA;&#xA;Sign up at plantlab.ai, copy your key from the dashboard, and run the curl command at the top of this post against one of your own plants.&#xA;&#xA;Prefer wires to code? There are guides for Home Assistant and Node-RED.&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://i.snap.as/QqSf42M2.png" alt="A herbarium specimen sheet in antique botanical style - a pressed cannabis leaf drawn in fine engraved ink on the left, joined by a single ruled line to a naturalist&#39;s record card of neat abstract pen strokes on the right"/></p>

<h2 id="what-it-does">What It Does</h2>

<p>The PlantLab API takes one image of a cannabis plant and returns structured JSON describing what&#39;s wrong with it: one of 30 conditions and pests (or healthy), a growth stage, a confidence score on every call it makes, and a bounding box per plant when the photo has more than one. It answers in about 18 milliseconds. Auth is a single <code>X-API-Key</code> header, and the free tier is 3 diagnoses a day without a card.</p>

<p>If you already have a camera pointed at your tent, this is the piece that turns a JPEG into something your automation can branch on.</p>



<p>Most grow stacks are blind in the same place. Temperature, humidity, VPD, EC, runoff pH, substrate moisture at three depths – all of it describes the room, none of it describes the plant. So the loop still ends at a person squinting at a phone.</p>

<p>Every response below came out of the live engine.</p>

<hr/>

<h2 id="one-call">One Call</h2>

<pre><code class="language-bash">curl -X POST https://api.plantlab.ai/diagnose \
  -H &#34;X-API-Key: $PLANTLAB_API_KEY&#34; \
  -F &#34;image=@canopy.jpg&#34;
</code></pre>

<p>Multipart upload, one required field.</p>

<hr/>

<h2 id="what-comes-back">What Comes Back</h2>

<p>A real response, from a plant with powdery mildew on it:</p>

<pre><code class="language-json">{
  &#34;request_id&#34;: &#34;8919a46e-a704-4a4e-a700-b754188165b5&#34;,
  &#34;schema_version&#34;: &#34;3.1.0&#34;,
  &#34;engine_version&#34;: { &#34;api&#34;: &#34;1.0.166&#34;, &#34;models&#34;: &#34;v6&#34; },
  &#34;success&#34;: true,
  &#34;is_cannabis&#34;: true,
  &#34;cannabis_confidence&#34;: 0.95,
  &#34;results&#34;: [
    {
      &#34;bbox&#34;: { &#34;x0&#34;: 0, &#34;y0&#34;: 0, &#34;x1&#34;: 1, &#34;y1&#34;: 1, &#34;normalized&#34;: true },
      &#34;is_healthy&#34;: false,
      &#34;health_confidence&#34;: 0.1,
      &#34;growth_stage&#34;: &#34;vegetative&#34;,
      &#34;growth_stage_confidence&#34;: 0.9,
      &#34;conditions&#34;: [
        {
          &#34;class_id&#34;: &#34;powdery_mildew&#34;,
          &#34;display_name&#34;: &#34;Powdery Mildew&#34;,
          &#34;confidence&#34;: 0.8,
          &#34;coarse_group&#34;: &#34;fungal_disease&#34;
        },
        {
          &#34;class_id&#34;: &#34;potassium_deficiency&#34;,
          &#34;display_name&#34;: &#34;Potassium Deficiency&#34;,
          &#34;confidence&#34;: 0.6,
          &#34;suspected&#34;: true,
          &#34;coarse_group&#34;: &#34;mobile_nutrient&#34;
        }
      ]
    }
  ]
}
</code></pre>

<p>It returned two things. The mildew is the call it&#39;s making. The potassium deficiency is marked <code>suspected</code> – something else worth a look, without claiming it.</p>

<hr/>

<h2 id="the-fields">The Fields</h2>

<table>
<thead>
<tr>
<th>Field</th>
<th>Level</th>
<th>What it means</th>
</tr>
</thead>

<tbody>
<tr>
<td><code>is_cannabis</code></td>
<td>image</td>
<td>Whether the photo is cannabis at all. Decided first, so it sits at the top</td>
</tr>

<tr>
<td><code>cannabis_confidence</code></td>
<td>image</td>
<td>Probability the image is cannabis</td>
</tr>

<tr>
<td><code>results[]</code></td>
<td>image</td>
<td>One entry per detected plant. A single-plant photo returns an array of one</td>
</tr>

<tr>
<td><code>bbox</code></td>
<td>plant</td>
<td>Where this plant is, in normalized 0-1 coordinates. Multiply by width and height to draw it</td>
</tr>

<tr>
<td><code>is_healthy</code></td>
<td>plant</td>
<td>The health call for this plant</td>
</tr>

<tr>
<td><code>health_confidence</code></td>
<td>plant</td>
<td>Probability the plant is <strong>healthy</strong>. Read the next section before using it</td>
</tr>

<tr>
<td><code>growth_stage</code></td>
<td>plant</td>
<td>seedling, vegetative, or flowering</td>
</tr>

<tr>
<td><code>conditions[]</code></td>
<td>plant</td>
<td>Diseases and deficiencies, most confident first</td>
</tr>

<tr>
<td><code>pests[]</code></td>
<td>plant</td>
<td>Pests, same shape</td>
</tr>

<tr>
<td><code>schema_version</code></td>
<td>response</td>
<td>Contract version, currently 3.1.0</td>
</tr>

<tr>
<td><code>engine_version</code></td>
<td>response</td>
<td>The build and model iteration that served this call</td>
</tr>
</tbody>
</table>

<h3 id="the-field-people-get-wrong">The field people get wrong</h3>

<p><code>health_confidence</code> is the probability the plant is <strong>healthy</strong>. It isn&#39;t confidence in the verdict you were just handed.</p>

<p>In the response above, <code>is_healthy</code> is <code>false</code> and <code>health_confidence</code> is <code>0.1</code>. That&#39;s not a shaky answer – it&#39;s a very confident sick one, because a 10% chance of healthy is a 90% chance of not. Write <code>if health_confidence &lt; 0.5: flag_uncertain()</code> and you&#39;ll fire uncertainty warnings on the clearest sick plants you own while staying quiet on the genuinely ambiguous ones.</p>

<p>When <code>is_healthy</code> is <code>false</code>, low <code>health_confidence</code> means more certain, not less.</p>

<h3 id="suspected-and-coarse-group"><code>suspected</code> and <code>coarse_group</code></h3>

<p><code>suspected: true</code> marks a secondary finding the engine wants to flag but isn&#39;t asserting. Show it to a human; don&#39;t dose on it.</p>

<p><code>coarse_group</code> is the clinical family a condition belongs to – one of <code>mobile_nutrient</code>, <code>immobile_newgrowth</code>, <code>water</code>, <code>light</code>, <code>fungal_disease</code>, <code>pest</code>. Some problems genuinely look alike in a photograph, and the family is often right when the specific name is shaky. If you&#39;re deciding <em>whether</em> to alert rather than <em>what</em> to dose, group on this instead.</p>

<h3 id="also-in-the-response">Also in the response</h3>

<p>Three more fields show up when they apply.</p>

<p><code>mulders_hypotheses</code> names nutrient excesses that would explain the deficiency you&#39;re looking at. A calcium excess locking out nitrogen looks exactly like a nitrogen shortage, and feeding more nitrogen makes it worse.</p>

<p><code>progression_risks</code> says what this turns into if nothing changes.</p>

<p><code>stage_advisories</code> adds context that depends on the plant&#39;s stage. Lower-leaf yellowing in late flower is usually normal, and it says so rather than letting you chase it.</p>

<hr/>

<h2 id="the-rest-of-the-surface">The Rest of the Surface</h2>

<table>
<thead>
<tr>
<th>Endpoint</th>
<th>Method</th>
<th>Purpose</th>
</tr>
</thead>

<tbody>
<tr>
<td><code>/diagnose</code></td>
<td>POST</td>
<td>The one you came for</td>
</tr>

<tr>
<td><code>/usage</code></td>
<td>GET</td>
<td>Current counts, limits, remaining quota. Read-only, doesn&#39;t consume quota</td>
</tr>

<tr>
<td><code>/health</code></td>
<td>GET</td>
<td>Liveness. No key required</td>
</tr>

<tr>
<td><code>/info</code></td>
<td>GET</td>
<td>Metadata and capabilities</td>
</tr>

<tr>
<td><code>/history</code></td>
<td>GET</td>
<td>Past diagnoses, newest first. Pro tier and above, with data sharing enabled</td>
</tr>

<tr>
<td><code>/feedback</code></td>
<td>POST</td>
<td>Report a wrong result</td>
</tr>
</tbody>
</table>

<p><code>/usage</code> is the one integrators forget exists and then rebuild badly. Poll it instead of counting your own calls.</p>

<p>The full machine-readable contract is at <a href="https://plantlab.ai/openapi.json">plantlab.ai/openapi.json</a>, so generate a client rather than hand-rolling one.</p>

<hr/>

<h2 id="limits-and-errors">Limits and Errors</h2>

<p>Free tier is 3 diagnoses a day. No card, no trial clock, and nothing to cancel – paid plans aren&#39;t live yet, so right now that&#39;s the whole offer. Higher-volume tiers exist in the API for granted accounts, and paid access is coming.</p>

<p><code>429</code> means you hit a limit. <code>408</code> means inference timed out. <code>400</code> on upload usually means the image failed a sanity check rather than a malformed request.</p>

<hr/>

<h2 id="what-it-doesn-t-do">What It Doesn&#39;t Do</h2>

<p>It&#39;s cannabis-specific. Point it at a tomato and <code>is_cannabis</code> comes back false, which is correct and not useful.</p>

<p>It reads a photograph, so it&#39;s bounded by what a photograph contains. Root-zone problems only appear once they reach the leaves, and two conditions that look identical in RGB are hard to separate in RGB. That&#39;s why <code>suspected</code> and <code>coarse_group</code> exist instead of a single confident label.</p>

<p>It&#39;s sensitive to how you shoot. Overexposure and tight close-ups reliably produce wrong answers – I <a href="https://blog.plantlab.ai/how-to-photograph-cannabis-plants-for-diagnosis">measured what breaks a diagnosis</a>, and the results aren&#39;t what most people guess.</p>

<p>It doesn&#39;t replace looking at your plants. It notices things earlier and more consistently than you will at 11pm, and it never gets bored.</p>

<p>On accuracy: cannabis verification runs at 99.96% balanced accuracy and health screening at 98.4%, both on plants held out from training. Naming the specific condition is a harder problem than deciding something is wrong, which is the honest reason those hedging fields are in the response at all.</p>

<hr/>

<h2 id="getting-started">Getting Started</h2>

<p>Sign up at <a href="https://plantlab.ai">plantlab.ai</a>, copy your key from the dashboard, and run the curl command at the top of this post against one of your own plants.</p>

<p>Prefer wires to code? There are guides for <a href="https://blog.plantlab.ai/home-assistant-plant-monitoring">Home Assistant</a> and <a href="https://blog.plantlab.ai/node-red-plantlab-automation">Node-RED</a>.</p>
]]></content:encoded>
      <guid>https://blog.plantlab.ai/cannabis-plant-diagnosis-api</guid>
      <pubDate>Fri, 14 Aug 2026 16:16:41 +0000</pubDate>
    </item>
    <item>
      <title>How to Photograph Cannabis Plants for an Accurate Diagnosis</title>
      <link>https://blog.plantlab.ai/how-to-photograph-cannabis-plants-for-diagnosis?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[An antique bellows plate camera on a tripod studying a cannabis specimen framed by hand-inked corner brackets, with two faded rejected alternatives in the corners: the plant lost in an oversized frame, and a single leaf overflowing a too-tight crop&#xA;&#xA;How to Photograph a Cannabis Plant for Diagnosis&#xA;&#xA;Frame the whole plant so it fills most of the shot, and use even light that isn&#39;t blown out. Don&#39;t zoom in on the damaged leaf, and don&#39;t shoot from across the tent. If your lights are blurple, that matters far less than whether the photo is overexposed.&#xA;&#xA;The mistakes that cost you most aren&#39;t the ones people expect.&#xA;&#xA;!--more--&#xA;&#xA;The One That Surprises Everyone&#xA;&#xA;When a leaf looks wrong, your instinct is to get close and photograph the damage. It feels like helping.&#xA;&#xA;It&#39;s the most reliable way to get a wrong answer.&#xA;&#xA;I took four labeled images - powdery mildew, spider mites, a nitrogen deficiency and a calcium deficiency - cropped each one tight around the affected area, and ran them through. Not one survived. The mildew came back healthy. The spider mites came back as a nitrogen deficiency. The calcium deficiency came back as septoria. The nitrogen crop wasn&#39;t recognized as cannabis at all.&#xA;&#xA;Diagnosis is comparative. Which leaves are affected, old growth or new. Whether the pattern is uniform or between the veins. How the rest of the plant looks by comparison. A close-up throws all of that away and leaves a patch of discolored green that could be six different things.&#xA;&#xA;Photograph the plant. The damage is already in the photo.&#xA;&#xA;But Don&#39;t Go Too Far Back&#xA;&#xA;The opposite mistake fails just as reliably. Shot from across the tent, all four went wrong: two returned the wrong condition, one came back healthy, and one wasn&#39;t recognized as cannabis at all.&#xA;&#xA;There&#39;s also a hard floor on size. Scaled to 256 pixels wide, three of four failed the cannabis check outright and returned nothing. Any modern phone clears this easily, so it only bites when something in your pipeline resizes before upload. If you&#39;re automating, send the original.&#xA;&#xA;One plant, filling most of the frame.&#xA;&#xA;Light Level Beats Light Color&#xA;&#xA;Overexposure is the dangerous failure, because it doesn&#39;t look like one.&#xA;&#xA;Brightened until the highlights clipped, two of the four sick plants came back healthy with reasonable confidence. Blown-out highlights wash out the exact color and texture differences a diagnosis rests on, and what&#39;s left looks like an untroubled plant. You get an all-clear on a plant that needs attention, and nothing in the response tells you to doubt it.&#xA;&#xA;Underexposure is gentler. Two of the four darkened images kept the exact right answer; of the other two, one dropped out of the cannabis check and one named the wrong pest. Neither returned a false all-clear. Wrong, or refused outright, you can recover from. Confidently-healthy you can&#39;t.&#xA;&#xA;Blurple light did less damage than expected - three of four still returned the correct condition under a heavy magenta cast. That&#39;s smaller than the effect of exposure. It still costs some confidence, so shoot during a lights-off window or use your flash when that&#39;s easy. When it isn&#39;t, shoot under the grow lights anyway and watch the confidence score.&#xA;&#xA;I simulated that color cast digitally rather than photographing under real fixtures, so it&#39;s directional rather than settled.&#xA;&#xA;Blur Is More Forgiving Than You Think&#xA;&#xA;A heavy blur kept the correct diagnosis on half the test images. On the other half it produced a wrong answer, with confidence collapsing to 0.10 and 0.15.&#xA;&#xA;That&#39;s the system working. When the image doesn&#39;t support a call, confidence drops instead of the answer quietly getting worse. Treat anything under about 0.3 as &#34;take another photo,&#34; not as a diagnosis.&#xA;&#xA;The reverse doesn&#39;t hold. A high score is not a guarantee: one tight crop returned the wrong condition at 0.70. Low confidence reliably means don&#39;t trust it. High confidence doesn&#39;t reliably mean you can.&#xA;&#xA;Still focus your shots. But given the choice between a slightly soft photo of the whole plant and a razor-sharp photo of one leaf, take the soft one.&#xA;&#xA;The Checklist&#xA;&#xA;| Do | Why |&#xA;|---|---|&#xA;| One plant, filling most of the frame | Diagnosis is comparative - it needs the whole plant |&#xA;| Even light, no blown highlights | Overexposure returns false healthy calls |&#xA;| Shoot lights-off, or use the flash | Costs less confidence than shooting under blurple |&#xA;| Send the original file | Aggressive downscaling breaks the cannabis check |&#xA;| Retake anything under 0.3 confidence | Low confidence often means the photo, not the plant |&#xA;&#xA;| Avoid | What happens |&#xA;|---|---|&#xA;| Close-up of the damaged leaf | Wrong answer or a false healthy, every time |&#xA;| Whole-tent wide shots | Wrong answer, or not recognized as cannabis |&#xA;| Brightening a dark photo to &#34;fix&#34; it | Turns a diagnosable photo into a healthy verdict |&#xA;&#xA;How I Tested&#xA;&#xA;Four labeled images - powdery mildew, spider mites, nitrogen deficiency, calcium deficiency. Eight versions of each: original, darkened, brightened, blurred, color-cast, tightly cropped, shot-from-distance, downscaled. Thirty-two diagnoses. All four originals returned the correct condition untouched.&#xA;&#xA;The variants were made digitally rather than by re-photographing under each condition. And four plants is four plants: enough to show a pattern that held every time, not enough to put a percentage on it. Hence directions rather than numbers.&#xA;&#xA;If You&#39;re Automating&#xA;&#xA;Same rules, plus two. Don&#39;t resize before upload. And branch on confidence instead of treating every response as equally solid - under 0.3 usually means trigger another capture, not raise an alert.&#xA;&#xA;The Home Assistant and Node-RED guides cover the wiring, and the API walkthrough covers what comes back.&#xA;&#xA;Try it on your own plants at plantlab.ai - three diagnoses a day, free, no card.&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://i.snap.as/buSZ5e3r.png" alt="An antique bellows plate camera on a tripod studying a cannabis specimen framed by hand-inked corner brackets, with two faded rejected alternatives in the corners: the plant lost in an oversized frame, and a single leaf overflowing a too-tight crop"/></p>

<h2 id="how-to-photograph-a-cannabis-plant-for-diagnosis">How to Photograph a Cannabis Plant for Diagnosis</h2>

<p>Frame the whole plant so it fills most of the shot, and use even light that isn&#39;t blown out. Don&#39;t zoom in on the damaged leaf, and don&#39;t shoot from across the tent. If your lights are blurple, that matters far less than whether the photo is overexposed.</p>

<p>The mistakes that cost you most aren&#39;t the ones people expect.</p>



<h2 id="the-one-that-surprises-everyone">The One That Surprises Everyone</h2>

<p>When a leaf looks wrong, your instinct is to get close and photograph the damage. It feels like helping.</p>

<p>It&#39;s the most reliable way to get a wrong answer.</p>

<p>I took four labeled images – powdery mildew, spider mites, a nitrogen deficiency and a calcium deficiency – cropped each one tight around the affected area, and ran them through. Not one survived. The mildew came back healthy. The spider mites came back as a nitrogen deficiency. The calcium deficiency came back as septoria. The nitrogen crop wasn&#39;t recognized as cannabis at all.</p>

<p>Diagnosis is comparative. Which leaves are affected, old growth or new. Whether the pattern is uniform or between the veins. How the rest of the plant looks by comparison. A close-up throws all of that away and leaves a patch of discolored green that could be six different things.</p>

<p>Photograph the plant. The damage is already in the photo.</p>

<h2 id="but-don-t-go-too-far-back">But Don&#39;t Go Too Far Back</h2>

<p>The opposite mistake fails just as reliably. Shot from across the tent, all four went wrong: two returned the wrong condition, one came back healthy, and one wasn&#39;t recognized as cannabis at all.</p>

<p>There&#39;s also a hard floor on size. Scaled to 256 pixels wide, three of four failed the cannabis check outright and returned nothing. Any modern phone clears this easily, so it only bites when something in your pipeline resizes before upload. If you&#39;re automating, send the original.</p>

<p>One plant, filling most of the frame.</p>

<h2 id="light-level-beats-light-color">Light Level Beats Light Color</h2>

<p>Overexposure is the dangerous failure, because it doesn&#39;t look like one.</p>

<p>Brightened until the highlights clipped, two of the four sick plants came back <strong>healthy</strong> with reasonable confidence. Blown-out highlights wash out the exact color and texture differences a diagnosis rests on, and what&#39;s left looks like an untroubled plant. You get an all-clear on a plant that needs attention, and nothing in the response tells you to doubt it.</p>

<p>Underexposure is gentler. Two of the four darkened images kept the exact right answer; of the other two, one dropped out of the cannabis check and one named the wrong pest. Neither returned a false all-clear. Wrong, or refused outright, you can recover from. Confidently-healthy you can&#39;t.</p>

<p>Blurple light did less damage than expected – three of four still returned the correct condition under a heavy magenta cast. That&#39;s smaller than the effect of exposure. It still costs some confidence, so shoot during a lights-off window or use your flash when that&#39;s easy. When it isn&#39;t, shoot under the grow lights anyway and watch the confidence score.</p>

<p>I simulated that color cast digitally rather than photographing under real fixtures, so it&#39;s directional rather than settled.</p>

<h2 id="blur-is-more-forgiving-than-you-think">Blur Is More Forgiving Than You Think</h2>

<p>A heavy blur kept the correct diagnosis on half the test images. On the other half it produced a wrong answer, with confidence collapsing to 0.10 and 0.15.</p>

<p>That&#39;s the system working. When the image doesn&#39;t support a call, confidence drops instead of the answer quietly getting worse. Treat anything under about 0.3 as “take another photo,” not as a diagnosis.</p>

<p>The reverse doesn&#39;t hold. A high score is not a guarantee: one tight crop returned the wrong condition at 0.70. Low confidence reliably means don&#39;t trust it. High confidence doesn&#39;t reliably mean you can.</p>

<p>Still focus your shots. But given the choice between a slightly soft photo of the whole plant and a razor-sharp photo of one leaf, take the soft one.</p>

<h2 id="the-checklist">The Checklist</h2>

<table>
<thead>
<tr>
<th>Do</th>
<th>Why</th>
</tr>
</thead>

<tbody>
<tr>
<td>One plant, filling most of the frame</td>
<td>Diagnosis is comparative – it needs the whole plant</td>
</tr>

<tr>
<td>Even light, no blown highlights</td>
<td>Overexposure returns false healthy calls</td>
</tr>

<tr>
<td>Shoot lights-off, or use the flash</td>
<td>Costs less confidence than shooting under blurple</td>
</tr>

<tr>
<td>Send the original file</td>
<td>Aggressive downscaling breaks the cannabis check</td>
</tr>

<tr>
<td>Retake anything under 0.3 confidence</td>
<td>Low confidence often means the photo, not the plant</td>
</tr>
</tbody>
</table>

<table>
<thead>
<tr>
<th>Avoid</th>
<th>What happens</th>
</tr>
</thead>

<tbody>
<tr>
<td>Close-up of the damaged leaf</td>
<td>Wrong answer or a false healthy, every time</td>
</tr>

<tr>
<td>Whole-tent wide shots</td>
<td>Wrong answer, or not recognized as cannabis</td>
</tr>

<tr>
<td>Brightening a dark photo to “fix” it</td>
<td>Turns a diagnosable photo into a healthy verdict</td>
</tr>
</tbody>
</table>

<h2 id="how-i-tested">How I Tested</h2>

<p>Four labeled images – powdery mildew, spider mites, nitrogen deficiency, calcium deficiency. Eight versions of each: original, darkened, brightened, blurred, color-cast, tightly cropped, shot-from-distance, downscaled. Thirty-two diagnoses. All four originals returned the correct condition untouched.</p>

<p>The variants were made digitally rather than by re-photographing under each condition. And four plants is four plants: enough to show a pattern that held every time, not enough to put a percentage on it. Hence directions rather than numbers.</p>

<h2 id="if-you-re-automating">If You&#39;re Automating</h2>

<p>Same rules, plus two. Don&#39;t resize before upload. And branch on confidence instead of treating every response as equally solid – under 0.3 usually means trigger another capture, not raise an alert.</p>

<p>The <a href="https://blog.plantlab.ai/home-assistant-plant-monitoring">Home Assistant</a> and <a href="https://blog.plantlab.ai/node-red-plantlab-automation">Node-RED</a> guides cover the wiring, and the <a href="https://blog.plantlab.ai/cannabis-plant-diagnosis-api">API walkthrough</a> covers what comes back.</p>

<p>Try it on your own plants at <a href="https://plantlab.ai">plantlab.ai</a> – three diagnoses a day, free, no card.</p>
]]></content:encoded>
      <guid>https://blog.plantlab.ai/how-to-photograph-cannabis-plants-for-diagnosis</guid>
      <pubDate>Fri, 14 Aug 2026 16:16:08 +0000</pubDate>
    </item>
    <item>
      <title>Powdery Mildew on Cannabis: Visual Detection and Prevention</title>
      <link>https://blog.plantlab.ai/powdery-mildew-cannabis?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[Powdery mildew on cannabis leaf - white powdery patches spreading across upper leaf surface, botanical illustration&#xA;&#xA;It looks like your plant is getting frosty. White powder spreading across the leaves, that pale shimmer catching the grow light. Then you touch it, and your finger comes away white.&#xA;&#xA;That&#39;s not trichome development. That&#39;s powdery mildew - and if you&#39;re seeing it now, the infection has been active inside your plant for up to two weeks already.&#xA;&#xA;!--more--&#xA;&#xA;Powdery mildew is one of the most misidentified conditions in cannabis cultivation - not because the advanced stage is hard to recognize, but because early-stage colonies genuinely look like trichome buildup to the untrained eye. Growers see white on their leaves and feel reassured rather than alarmed. By the time the mistake is obvious, the fungus has spread.&#xA;&#xA;This guide covers visual identification at every stage, how to distinguish PM from trichomes and other lookalikes, and what to do when you find it.&#xA;&#xA;---&#xA;&#xA;Quick Identification&#xA;&#xA;Powdery mildew on cannabis appears as white, flour-like patches on leaf surfaces that transfer to your finger when touched. Unlike trichomes - which are crystalline, sticky, and firmly attached - powdery mildew is fuzzy, powdery, and wipes off. It typically starts on older, lower leaves and can spread from a single infected plant to your entire grow within 5-10 days under favorable conditions.&#xA;&#xA;Quick checklist:&#xA;White powdery patches on leaf surfaces (usually upper side)&#xA;Fuzzy texture, not crystalline or glittery&#xA;Transfers to your finger when touched&#xA;Wipes off with cloth (trichomes stay attached)&#xA;Started on older, lower leaves&#xA;Circular colony patterns, expanding outward&#xA;&#xA;---&#xA;&#xA;Why Powdery Mildew Is So Destructive&#xA;&#xA;The Timing Problem&#xA;&#xA;Powdery mildew is caused by obligate biotrophic fungi - primarily Golovinomyces species (formerly classified as Erysiphe) - that require a living plant host to survive. As an obligate biotroph, the fungus spends its first 7-10 days growing inside plant tissue, establishing a mycelial network before producing the visible white sporulation on the surface.&#xA;&#xA;The practical implication: by the time you see powdery mildew, you&#39;re already two weeks behind.&#xA;&#xA;This timing overlaps with the worst possible moment in the grow cycle. PM typically produces visible symptoms approximately two weeks into flowering - when plants are at their most developed and most valuable. A disease that becomes visible at week two of a nine-week flower has seven weeks to damage a mature crop.&#xA;&#xA;The Spread Problem&#xA;&#xA;Once sporulating, powdery mildew spreads through airborne spores called conidia. Unlike many fungal diseases that require water droplets to spread, PM spores travel through air and remain viable in typical grow room conditions. A single infected plant can contaminate an entire facility within 5-10 days.&#xA;&#xA;This is not a slow disease. It spends two weeks being invisible, then spreads rapidly.&#xA;&#xA;---&#xA;&#xA;Visual Symptoms by Stage&#xA;&#xA;Days 1-7: No Visible Symptoms&#xA;&#xA;The fungal network is developing inside plant tissue. Nothing is visible externally. The only detection method during this phase is molecular PCR testing - available commercially but not practical for most growers as a daily routine.&#xA;&#xA;What to do: Prevention only. No reactive treatment exists for pre-symptomatic infection.&#xA;&#xA;Days 7-14: Early Visible Stage&#xA;&#xA;Early powdery mildew on cannabis - small white chalk-dust spots on older leaf, botanical illustration&#xA;&#xA;What you see:&#xA;Fine white coating on upper leaf surface, often concentrated near veins&#xA;Circular &#34;chalk-dust rings&#34; as colonies grow radially from infection points&#xA;Small, discrete white spots (1-5mm diameter) resembling flour or powdered sugar&#xA;Patches separated by healthy-looking green tissue initially&#xA;&#xA;This is when intervention is most effective. Catching PM at this stage - and responding within 48 hours - gives you the best chance of containing the infection before airborne spread reaches other plants.&#xA;&#xA;Days 14+: Advanced Stage&#xA;&#xA;Advanced powdery mildew - merged colonies covering cannabis leaf with yellowing, botanical illustration&#xA;&#xA;What you see:&#xA;Spots grow larger and merge into confluent white coverage&#xA;Thick, prominent coating across entire leaf surfaces&#xA;Fuzzy, hair-like texture that can resemble spider webs or white cotton candy in severe cases&#xA;Affected leaves turn yellow (chlorosis) as photosynthetic capacity is reduced&#xA;Leaf death and necrosis in severely affected tissue&#xA;Contamination of flower bracts and bud sites&#xA;&#xA;At this stage, individual plant treatment may still limit damage, but facility-wide spread is likely already underway.&#xA;&#xA;---&#xA;&#xA;Where to Look: Detection Hotspots&#xA;&#xA;Not all areas are equally at risk. Focus visual inspections here:&#xA;&#xA;Check first:&#xA;Upper surfaces of older, lower leaves&#xA;Corners with poor airflow&#xA;Areas where leaves touch each other&#xA;Near the base of the plant&#xA;&#xA;Check second:&#xA;Lower leaf surfaces&#xA;Leaf petioles and stems&#xA;Flower bracts and bud sites&#xA;Plants adjacent to any previously infected individual&#xA;&#xA;High-risk conditions:&#xA;Humidity above 60% (optimal for PM at 95%+)&#xA;Temperature 68-86°F (20-30°C)&#xA;Poor air circulation or stagnant air pockets&#xA;Overcrowded plants with leaf-on-leaf contact&#xA;Recently introduced plant material (a common entry point)&#xA;&#xA;One counterintuitive note: many growers assume low humidity prevents powdery mildew. It slows initial infection, but once PM is established, the fungus can continue growing even below 50% relative humidity. Humidity reduction is a preventive tool, not a cure.&#xA;&#xA;---&#xA;&#xA;Powdery Mildew vs. Trichomes: The Critical Distinction&#xA;&#xA;This comparison matters because the error goes in both directions - growers see PM and think &#34;good frost,&#34; and they sometimes see heavy trichome coverage and worry it&#39;s disease.&#xA;&#xA;| Feature | Powdery Mildew | Trichomes |&#xA;|---------|----------------|-----------|&#xA;| Texture | Fuzzy, powdery, matte | Crystalline, glittery |&#xA;| Color | White to gray (can look dirty) | Translucent to milky white |&#xA;| Touch test | Transfers to finger, feels dusty | Sticky, doesn&#39;t transfer |&#xA;| Wipe test | Wipes off as powder | Firmly attached |&#xA;| Shape | Irregular patches with fuzzy edges | Distinct mushroom stalks (under magnification) |&#xA;| Location | Any leaf surface, starts on older lower leaves | Concentrated on flowers and sugar leaves |&#xA;| Distribution | Random colonies expanding outward | Uniform coating across surface |&#xA;| Smell | Musty in advanced infection | Resinous, aromatic |&#xA;&#xA;Side by side botanical illustration: powdery mildew vs. trichomes on cannabis&#xA;&#xA;Three Tests to Confirm&#xA;&#xA;Touch test. Lightly rub the white area with your finger. PM transfers as a dusty powder. Trichomes are sticky and stay on the plant.&#xA;&#xA;Wipe test. Try to wipe the coating with a cloth. PM wipes off cleanly. Trichomes remain attached.&#xA;&#xA;Magnification (10x loupe). Under magnification, trichomes show distinct mushroom-shaped heads on uniform stalks. PM looks like fuzzy, irregular filaments with no consistent structure.&#xA;&#xA;If you&#39;re unsure after all three tests, assume it&#39;s PM and treat accordingly. The cost of a false positive - treating a healthy plant - is much lower than the cost of a false negative.&#xA;&#xA;---&#xA;&#xA;Distinguishing From Other Conditions&#xA;&#xA;Powdery Mildew vs. Bud Rot (Botrytis)&#xA;&#xA;Both can appear during flowering, but they start in different places and look different up close.&#xA;&#xA;PM: Starts on leaf surfaces as white powder, spreads outward&#xA;Bud rot: Starts inside dense bud tissue as gray-brown mold, spreads inward&#xA;PM: Dry, wipes off as powder&#xA;Bud rot: Slimy, penetrates tissue, leaves mushy gray-brown areas when probed&#xA;&#xA;Powdery Mildew vs. Spider Mite Webbing&#xA;&#xA;Heavy spider mite webbing can be confused with PM in advanced stages.&#xA;&#xA;PM: Powdery coating directly on leaf surfaces, no web structure&#xA;Webbing: Actual filamentous strands connecting leaves and stems, visible as a network with tiny mites present&#xA;PM: Surface phenomenon on the leaf&#xA;Webbing: Spans between plant structures&#xA;&#xA;Powdery Mildew vs. Fertilizer Residue&#xA;&#xA;Spray residue and fertilizer salt deposits are a common false positive.&#xA;&#xA;PM: Fuzzy texture, grows and expands over days&#xA;Residue: Crystalline, stays fixed, doesn&#39;t spread&#xA;PM: Circular colonies from infection points&#xA;Residue: Irregular splatter pattern matching where spray landed&#xA;&#xA;---&#xA;&#xA;Treatment and Prevention&#xA;&#xA;If You&#39;ve Found It: Immediate Steps&#xA;&#xA;Isolate the infected plant. Remove it from the grow space carefully - don&#39;t shake the leaves, which disperses spores.&#xA;Remove heavily infected leaves. Seal them in a bag before removal. Dispose of, don&#39;t compost.&#xA;Increase airflow immediately. Run oscillating fans, check that exhaust is adequate.&#xA;Apply treatment to the infected plant and all immediate neighbors:&#xA;   Potassium bicarbonate spray (effective at any stage, flower-safe)&#xA;   Copper-based fungicides (veg stage only)&#xA;   Neem oil (veg stage only - off-gasses problematically in flower)&#xA;   Commercial PM treatments labeled as flower-safe for late-stage infections&#xA;&#xA;Inspect every other plant in the grow. Assume airborne spread has already occurred. Look for early colonies on older lower leaves of adjacent plants.&#xA;&#xA;Prevention&#xA;&#xA;Environmental control (most effective):&#xA;Maintain humidity below 60%, below 45% in late flower&#xA;Install oscillating fans for continuous air movement&#xA;Prevent leaf-on-leaf contact through spacing and selective defoliation&#xA;Maintain stable temperature - fluctuations create favorable infection windows&#xA;Consider HEPA filtration between grow cycles to reduce ambient spore load&#xA;&#xA;Cultural practices:&#xA;Inspect plants daily, particularly lower leaves and poor-airflow corners&#xA;Quarantine any new plant material for at least two weeks before introducing to your grow&#xA;Sterilize tools between plants&#xA;Remove dead leaves promptly - they create moisture pockets&#xA;&#xA;Preventive treatments (before symptoms appear):&#xA;UV-C light treatment between grow cycles kills residual spores&#xA;Preventive potassium bicarbonate or copper sprays provide significantly better protection than reactive treatment after symptoms appear&#xA;IPM programs that address PM as a standing preventive protocol, not a reactive one&#xA;&#xA;---&#xA;&#xA;How AI Detection Works&#xA;&#xA;Powdery mildew is fundamentally a texture classification problem - distinguishing the powdery, irregular surface of PM colonies from the crystalline structure of trichomes and the smooth surface of healthy leaf tissue.&#xA;&#xA;PlantLab&#39;s model analyzes:&#xA;&#xA;Color contrast: White patches against green leaf tissue create a high-contrast signal the model identifies reliably&#xA;Texture signature: PM colonies have a granular, matte surface texture measurably distinct from trichomes (crystalline) and healthy leaf (smooth with natural sheen)&#xA;Colony geometry: PM grows in circular patterns from infection points with fuzzy, irregular edges - different from the uniform distribution of trichome coverage&#xA;Location context: Where on the plant the pattern appears matters; PM preferentially affects older, lower leaves in early infection&#xA;&#xA;Early-stage detection - colonies as small as 5mm - catches infection when treatment options are broadest. Automated daily scanning catches what manual inspection misses when you&#39;re managing more than a few plants.&#xA;&#xA;Try it free at plantlab.ai - 3 diagnoses per day, no credit card required.&#xA;&#xA;---&#xA;&#xA;FAQ&#xA;&#xA;Can I smoke buds with powdery mildew?&#xA;No. PM spores and fungal material can cause respiratory issues, particularly for anyone with lung conditions or compromised immunity. Infected flower should be disposed of, not consumed.&#xA;&#xA;Does powdery mildew spread to other plants?&#xA;Yes, rapidly. Airborne spores can reach every plant in a contained grow space within 5-10 days under favorable conditions. Isolate infected plants immediately and inspect everything nearby.&#xA;&#xA;Can plants recover from powdery mildew?&#xA;Mildly infected plants can survive and produce with aggressive treatment, but affected tissue doesn&#39;t recover. The goal is to stop the spread. Heavily infected plants in late flowering are usually a loss.&#xA;&#xA;Does lowering humidity kill powdery mildew?&#xA;It inhibits new infection but doesn&#39;t eliminate established colonies. PM can remain active even below 50% relative humidity once established. Humidity reduction is a prevention tool, not a cure for active infection.&#xA;&#xA;When is powdery mildew most likely to appear?&#xA;Typically around two weeks into flowering, when dense bud sites create microclimates with trapped humidity and reduced airflow. It can appear at any life stage given favorable conditions, but flowering onset is the highest-risk window.&#xA;&#xA;---&#xA;&#xA;PlantLab&#39;s AI detects 31 cannabis conditions - including powdery mildew, bud rot, and 7 specific nutrient deficiencies. Start diagnosing free at plantlab.ai.&#xA;&#xA;---&#xA;&#xA;Related reading&#xA;&#xA;Bud Rot and Root Rot in Cannabis: Detection Before It&#39;s Too Late - the other fungal threat that thrives in the same trapped humidity&#xA;Spider Mites on Cannabis: Early Detection Before the Damage - the pest that shares PM&#39;s still-air, low-airflow risk pockets&#xA;Build an Autonomous Plant Health Monitor with Node-RED - automate a daily photo check so PM gets caught at first spots&#xA;What&#39;s Wrong With My Cannabis Plant? A Visual Diagnosis Guide - the full symptom-to-cause quick reference&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://i.snap.as/RtuOdcUt.png" alt="Powdery mildew on cannabis leaf - white powdery patches spreading across upper leaf surface, botanical illustration"/></p>

<p>It looks like your plant is getting frosty. White powder spreading across the leaves, that pale shimmer catching the grow light. Then you touch it, and your finger comes away white.</p>

<p>That&#39;s not trichome development. That&#39;s powdery mildew – and if you&#39;re seeing it now, the infection has been active inside your plant for up to two weeks already.</p>



<p>Powdery mildew is one of the most misidentified conditions in cannabis cultivation – not because the advanced stage is hard to recognize, but because early-stage colonies genuinely look like trichome buildup to the untrained eye. Growers see white on their leaves and feel reassured rather than alarmed. By the time the mistake is obvious, the fungus has spread.</p>

<p>This guide covers visual identification at every stage, how to distinguish PM from trichomes and other lookalikes, and what to do when you find it.</p>

<hr/>

<h2 id="quick-identification">Quick Identification</h2>

<p>Powdery mildew on cannabis appears as white, flour-like patches on leaf surfaces that transfer to your finger when touched. Unlike trichomes – which are crystalline, sticky, and firmly attached – powdery mildew is fuzzy, powdery, and wipes off. It typically starts on older, lower leaves and can spread from a single infected plant to your entire grow within 5-10 days under favorable conditions.</p>

<p><strong>Quick checklist:</strong>
– White powdery patches on leaf surfaces (usually upper side)
– Fuzzy texture, not crystalline or glittery
– Transfers to your finger when touched
– Wipes off with cloth (trichomes stay attached)
– Started on older, lower leaves
– Circular colony patterns, expanding outward</p>

<hr/>

<h2 id="why-powdery-mildew-is-so-destructive">Why Powdery Mildew Is So Destructive</h2>

<h3 id="the-timing-problem">The Timing Problem</h3>

<p>Powdery mildew is caused by obligate biotrophic fungi – primarily <em>Golovinomyces</em> species (formerly classified as <em>Erysiphe</em>) – that require a living plant host to survive. As an obligate biotroph, the fungus spends its first 7-10 days growing inside plant tissue, establishing a mycelial network before producing the visible white sporulation on the surface.</p>

<p>The practical implication: <strong>by the time you see powdery mildew, you&#39;re already two weeks behind.</strong></p>

<p>This timing overlaps with the worst possible moment in the grow cycle. PM typically produces visible symptoms approximately two weeks into flowering – when plants are at their most developed and most valuable. A disease that becomes visible at week two of a nine-week flower has seven weeks to damage a mature crop.</p>

<h3 id="the-spread-problem">The Spread Problem</h3>

<p>Once sporulating, powdery mildew spreads through airborne spores called conidia. Unlike many fungal diseases that require water droplets to spread, PM spores travel through air and remain viable in typical grow room conditions. A single infected plant can contaminate an entire facility within 5-10 days.</p>

<p>This is not a slow disease. It spends two weeks being invisible, then spreads rapidly.</p>

<hr/>

<h2 id="visual-symptoms-by-stage">Visual Symptoms by Stage</h2>

<h3 id="days-1-7-no-visible-symptoms">Days 1-7: No Visible Symptoms</h3>

<p>The fungal network is developing inside plant tissue. Nothing is visible externally. The only detection method during this phase is molecular PCR testing – available commercially but not practical for most growers as a daily routine.</p>

<p><strong>What to do:</strong> Prevention only. No reactive treatment exists for pre-symptomatic infection.</p>

<h3 id="days-7-14-early-visible-stage">Days 7-14: Early Visible Stage</h3>

<p><img src="https://i.snap.as/uT6f7304.png" alt="Early powdery mildew on cannabis - small white chalk-dust spots on older leaf, botanical illustration"/></p>

<p><strong>What you see:</strong>
– Fine white coating on upper leaf surface, often concentrated near veins
– Circular “chalk-dust rings” as colonies grow radially from infection points
– Small, discrete white spots (1-5mm diameter) resembling flour or powdered sugar
– Patches separated by healthy-looking green tissue initially</p>

<p>This is when intervention is most effective. Catching PM at this stage – and responding within 48 hours – gives you the best chance of containing the infection before airborne spread reaches other plants.</p>

<h3 id="days-14-advanced-stage">Days 14+: Advanced Stage</h3>

<p><img src="https://i.snap.as/Z0LdErYI.png" alt="Advanced powdery mildew - merged colonies covering cannabis leaf with yellowing, botanical illustration"/></p>

<p><strong>What you see:</strong>
– Spots grow larger and merge into confluent white coverage
– Thick, prominent coating across entire leaf surfaces
– Fuzzy, hair-like texture that can resemble spider webs or white cotton candy in severe cases
– Affected leaves turn yellow (chlorosis) as photosynthetic capacity is reduced
– Leaf death and necrosis in severely affected tissue
– Contamination of flower bracts and bud sites</p>

<p>At this stage, individual plant treatment may still limit damage, but facility-wide spread is likely already underway.</p>

<hr/>

<h2 id="where-to-look-detection-hotspots">Where to Look: Detection Hotspots</h2>

<p>Not all areas are equally at risk. Focus visual inspections here:</p>

<p><strong>Check first:</strong>
– Upper surfaces of older, lower leaves
– Corners with poor airflow
– Areas where leaves touch each other
– Near the base of the plant</p>

<p><strong>Check second:</strong>
– Lower leaf surfaces
– Leaf petioles and stems
– Flower bracts and bud sites
– Plants adjacent to any previously infected individual</p>

<p><strong>High-risk conditions:</strong>
– Humidity above 60% (optimal for PM at 95%+)
– Temperature 68-86°F (20-30°C)
– Poor air circulation or stagnant air pockets
– Overcrowded plants with leaf-on-leaf contact
– Recently introduced plant material (a common entry point)</p>

<p>One counterintuitive note: many growers assume low humidity prevents powdery mildew. It slows initial infection, but once PM is established, the fungus can continue growing even below 50% relative humidity. Humidity reduction is a preventive tool, not a cure.</p>

<hr/>

<h2 id="powdery-mildew-vs-trichomes-the-critical-distinction">Powdery Mildew vs. Trichomes: The Critical Distinction</h2>

<p>This comparison matters because the error goes in both directions – growers see PM and think “good frost,” and they sometimes see heavy trichome coverage and worry it&#39;s disease.</p>

<table>
<thead>
<tr>
<th>Feature</th>
<th>Powdery Mildew</th>
<th>Trichomes</th>
</tr>
</thead>

<tbody>
<tr>
<td>Texture</td>
<td>Fuzzy, powdery, matte</td>
<td>Crystalline, glittery</td>
</tr>

<tr>
<td>Color</td>
<td>White to gray (can look dirty)</td>
<td>Translucent to milky white</td>
</tr>

<tr>
<td>Touch test</td>
<td>Transfers to finger, feels dusty</td>
<td>Sticky, doesn&#39;t transfer</td>
</tr>

<tr>
<td>Wipe test</td>
<td>Wipes off as powder</td>
<td>Firmly attached</td>
</tr>

<tr>
<td>Shape</td>
<td>Irregular patches with fuzzy edges</td>
<td>Distinct mushroom stalks (under magnification)</td>
</tr>

<tr>
<td>Location</td>
<td>Any leaf surface, starts on older lower leaves</td>
<td>Concentrated on flowers and sugar leaves</td>
</tr>

<tr>
<td>Distribution</td>
<td>Random colonies expanding outward</td>
<td>Uniform coating across surface</td>
</tr>

<tr>
<td>Smell</td>
<td>Musty in advanced infection</td>
<td>Resinous, aromatic</td>
</tr>
</tbody>
</table>

<p><img src="https://i.snap.as/NgkLWtc5.png" alt="Side by side botanical illustration: powdery mildew vs. trichomes on cannabis"/></p>

<h3 id="three-tests-to-confirm">Three Tests to Confirm</h3>

<p><strong>Touch test.</strong> Lightly rub the white area with your finger. PM transfers as a dusty powder. Trichomes are sticky and stay on the plant.</p>

<p><strong>Wipe test.</strong> Try to wipe the coating with a cloth. PM wipes off cleanly. Trichomes remain attached.</p>

<p><strong>Magnification (10x loupe).</strong> Under magnification, trichomes show distinct mushroom-shaped heads on uniform stalks. PM looks like fuzzy, irregular filaments with no consistent structure.</p>

<p>If you&#39;re unsure after all three tests, assume it&#39;s PM and treat accordingly. The cost of a false positive – treating a healthy plant – is much lower than the cost of a false negative.</p>

<hr/>

<h2 id="distinguishing-from-other-conditions">Distinguishing From Other Conditions</h2>

<h3 id="powdery-mildew-vs-bud-rot-botrytis">Powdery Mildew vs. Bud Rot (Botrytis)</h3>

<p>Both can appear during flowering, but they start in different places and look different up close.</p>
<ul><li><strong>PM:</strong> Starts on leaf surfaces as white powder, spreads outward</li>
<li><strong>Bud rot:</strong> Starts inside dense bud tissue as gray-brown mold, spreads inward</li>
<li><strong>PM:</strong> Dry, wipes off as powder</li>
<li><strong>Bud rot:</strong> Slimy, penetrates tissue, leaves mushy gray-brown areas when probed</li></ul>

<h3 id="powdery-mildew-vs-spider-mite-webbing">Powdery Mildew vs. Spider Mite Webbing</h3>

<p>Heavy spider mite webbing can be confused with PM in advanced stages.</p>
<ul><li><strong>PM:</strong> Powdery coating directly on leaf surfaces, no web structure</li>
<li><strong>Webbing:</strong> Actual filamentous strands connecting leaves and stems, visible as a network with tiny mites present</li>
<li><strong>PM:</strong> Surface phenomenon on the leaf</li>
<li><strong>Webbing:</strong> Spans between plant structures</li></ul>

<h3 id="powdery-mildew-vs-fertilizer-residue">Powdery Mildew vs. Fertilizer Residue</h3>

<p>Spray residue and fertilizer salt deposits are a common false positive.</p>
<ul><li><strong>PM:</strong> Fuzzy texture, grows and expands over days</li>
<li><strong>Residue:</strong> Crystalline, stays fixed, doesn&#39;t spread</li>
<li><strong>PM:</strong> Circular colonies from infection points</li>
<li><strong>Residue:</strong> Irregular splatter pattern matching where spray landed</li></ul>

<hr/>

<h2 id="treatment-and-prevention">Treatment and Prevention</h2>

<h3 id="if-you-ve-found-it-immediate-steps">If You&#39;ve Found It: Immediate Steps</h3>
<ol><li><strong>Isolate the infected plant.</strong> Remove it from the grow space carefully – don&#39;t shake the leaves, which disperses spores.</li>
<li><strong>Remove heavily infected leaves.</strong> Seal them in a bag before removal. Dispose of, don&#39;t compost.</li>
<li><strong>Increase airflow immediately.</strong> Run oscillating fans, check that exhaust is adequate.</li>

<li><p><strong>Apply treatment to the infected plant and all immediate neighbors:</strong></p>
<ul><li>Potassium bicarbonate spray (effective at any stage, flower-safe)</li>
<li>Copper-based fungicides (veg stage only)</li>
<li>Neem oil (veg stage only – off-gasses problematically in flower)</li>
<li>Commercial PM treatments labeled as flower-safe for late-stage infections</li></ul></li>

<li><p><strong>Inspect every other plant in the grow.</strong> Assume airborne spread has already occurred. Look for early colonies on older lower leaves of adjacent plants.</p></li></ol>

<h3 id="prevention">Prevention</h3>

<p><strong>Environmental control (most effective):</strong>
– Maintain humidity below 60%, below 45% in late flower
– Install oscillating fans for continuous air movement
– Prevent leaf-on-leaf contact through spacing and selective defoliation
– Maintain stable temperature – fluctuations create favorable infection windows
– Consider HEPA filtration between grow cycles to reduce ambient spore load</p>

<p><strong>Cultural practices:</strong>
– Inspect plants daily, particularly lower leaves and poor-airflow corners
– Quarantine any new plant material for at least two weeks before introducing to your grow
– Sterilize tools between plants
– Remove dead leaves promptly – they create moisture pockets</p>

<p><strong>Preventive treatments (before symptoms appear):</strong>
– UV-C light treatment between grow cycles kills residual spores
– Preventive potassium bicarbonate or copper sprays provide significantly better protection than reactive treatment after symptoms appear
– IPM programs that address PM as a standing preventive protocol, not a reactive one</p>

<hr/>

<h2 id="how-ai-detection-works">How AI Detection Works</h2>

<p>Powdery mildew is fundamentally a texture classification problem – distinguishing the powdery, irregular surface of PM colonies from the crystalline structure of trichomes and the smooth surface of healthy leaf tissue.</p>

<p>PlantLab&#39;s model analyzes:</p>
<ul><li><strong>Color contrast:</strong> White patches against green leaf tissue create a high-contrast signal the model identifies reliably</li>
<li><strong>Texture signature:</strong> PM colonies have a granular, matte surface texture measurably distinct from trichomes (crystalline) and healthy leaf (smooth with natural sheen)</li>
<li><strong>Colony geometry:</strong> PM grows in circular patterns from infection points with fuzzy, irregular edges – different from the uniform distribution of trichome coverage</li>
<li><strong>Location context:</strong> Where on the plant the pattern appears matters; PM preferentially affects older, lower leaves in early infection</li></ul>

<p>Early-stage detection – colonies as small as 5mm – catches infection when treatment options are broadest. Automated daily scanning catches what manual inspection misses when you&#39;re managing more than a few plants.</p>

<p>Try it free at <a href="https://plantlab.ai">plantlab.ai</a> – 3 diagnoses per day, no credit card required.</p>

<hr/>

<h2 id="faq">FAQ</h2>

<p><strong>Can I smoke buds with powdery mildew?</strong>
No. PM spores and fungal material can cause respiratory issues, particularly for anyone with lung conditions or compromised immunity. Infected flower should be disposed of, not consumed.</p>

<p><strong>Does powdery mildew spread to other plants?</strong>
Yes, rapidly. Airborne spores can reach every plant in a contained grow space within 5-10 days under favorable conditions. Isolate infected plants immediately and inspect everything nearby.</p>

<p><strong>Can plants recover from powdery mildew?</strong>
Mildly infected plants can survive and produce with aggressive treatment, but affected tissue doesn&#39;t recover. The goal is to stop the spread. Heavily infected plants in late flowering are usually a loss.</p>

<p><strong>Does lowering humidity kill powdery mildew?</strong>
It inhibits new infection but doesn&#39;t eliminate established colonies. PM can remain active even below 50% relative humidity once established. Humidity reduction is a prevention tool, not a cure for active infection.</p>

<p><strong>When is powdery mildew most likely to appear?</strong>
Typically around two weeks into flowering, when dense bud sites create microclimates with trapped humidity and reduced airflow. It can appear at any life stage given favorable conditions, but flowering onset is the highest-risk window.</p>

<hr/>

<p><em>PlantLab&#39;s AI detects 31 cannabis conditions – including powdery mildew, bud rot, and 7 specific nutrient deficiencies. <a href="https://plantlab.ai">Start diagnosing free at plantlab.ai</a>.</em></p>

<hr/>

<h2 id="related-reading">Related reading</h2>
<ul><li><a href="https://blog.plantlab.ai/bud-rot-root-rot-cannabis">Bud Rot and Root Rot in Cannabis: Detection Before It&#39;s Too Late</a> – the other fungal threat that thrives in the same trapped humidity</li>
<li><a href="https://blog.plantlab.ai/spider-mites-cannabis">Spider Mites on Cannabis: Early Detection Before the Damage</a> – the pest that shares PM&#39;s still-air, low-airflow risk pockets</li>
<li><a href="https://blog.plantlab.ai/node-red-plantlab-automation">Build an Autonomous Plant Health Monitor with Node-RED</a> – automate a daily photo check so PM gets caught at first spots</li>
<li><a href="https://blog.plantlab.ai/whats-wrong-with-my-cannabis-plant">What&#39;s Wrong With My Cannabis Plant? A Visual Diagnosis Guide</a> – the full symptom-to-cause quick reference</li></ul>
]]></content:encoded>
      <guid>https://blog.plantlab.ai/powdery-mildew-cannabis</guid>
      <pubDate>Tue, 28 Jul 2026 16:47:03 +0000</pubDate>
    </item>
    <item>
      <title>Node-RED + PlantLab: Visual Automation for Your Grow</title>
      <link>https://blog.plantlab.ai/node-red-plantlab-automation?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[What You&#39;ll Build&#xA;&#xA;A Node-RED flow that captures a photo on a schedule, sends it to PlantLab for diagnosis, and takes action based on the result. Push notifications, dashboard updates, MQTT messages to your controller, log lines into InfluxDB, or whatever combination you want. No Python. No YAML. Nodes and wires.&#xA;&#xA;Setup runs about 25 minutes on a Node-RED instance that&#39;s already up. The cost is whatever camera you own plus PlantLab&#39;s free tier at 3 diagnoses a day. The output is a structured JSON result: 31 possible conditions, a growth stage, nutrient antagonism hypotheses, and confidence scores, all ready to feed into whatever comes next.&#xA;&#xA;!--more--&#xA;&#xA;Node-RED suits growers who already have their tent wired up with visual flows. If you&#39;ve got temp sensors piping into an InfluxDB dashboard, MQTT switches on a power strip, or a Telegram bot that announces fan speed changes, you already know the pattern. Plant health diagnosis is just another node in the chain.&#xA;&#xA;Coming from Home Assistant? There&#39;s a tutorial for that too. Node-RED gives you more granular flow control and broader protocol support. HA gives you a cleaner device-and-entity model. Both work. Pick whichever one matches the rest of your setup.&#xA;&#xA;---&#xA;&#xA;Prerequisites&#xA;&#xA;Before we start:&#xA;&#xA;Node-RED running (Docker, Pi, bare metal, or the Home Assistant add-on - any of them works)&#xA;A camera that can deliver a JPEG - IP camera with snapshot URL, Frigate, ESP32-CAM, Wyze with RTSP bridge, Reolink, anything that responds to an HTTP GET with a JPEG or that you can shell out to ffmpeg for&#xA;A PlantLab account - sign up free at plantlab.ai, copy your API key from the dashboard&#xA;Optional but recommended: node-red-dashboard for a visual panel, node-red-contrib-image-tools if you want to resize photos before sending, an MQTT broker if your grow controllers talk MQTT&#xA;&#xA;Camera tip: shoot the canopy from above or at a slight angle, with neutral light. Blurple grow lights throw the model off because everything comes out tinted purple. Either schedule the check during a lights-off window or use the camera&#39;s built-in flash. PlantLab wants to see actual leaf color, not a magenta smear.&#xA;&#xA;---&#xA;&#xA;Step 1: The Basic Flow&#xA;&#xA;Here&#39;s the smallest flow that actually does something useful. Four nodes. Inject on a schedule, pull an image from the camera, POST to PlantLab, debug-log the result.&#xA;&#xA;[inject: cron 08:00] -  [http request: GET camera.jpg] -  [http request: POST plantlab] -  [debug]&#xA;&#xA;Open Node-RED, drag these four nodes in, and wire them together.&#xA;&#xA;The inject node&#xA;&#xA;Repeat: at a specific time, 08:00:00&#xA;Payload: empty (we only need the trigger)&#xA;&#xA;The camera snapshot node (HTTP request)&#xA;&#xA;Method: GET&#xA;URL: your camera&#39;s snapshot endpoint, e.g. http://192.168.1.50/snapshot.jpg or your Frigate http://frigate:5000/api/growtent/latest.jpg&#xA;Return: a binary buffer&#xA;&#xA;If your camera needs auth, add a basic auth header. If it&#39;s RTSP-only, use an exec node running ffmpeg -i rtsp://... -frames:v 1 -f image2pipe - and pipe the stdout through.&#xA;&#xA;The PlantLab request node (HTTP request)&#xA;&#xA;Method: POST&#xA;URL: https://api.plantlab.ai/diagnose&#xA;Return: a parsed JSON object&#xA;Headers: set in the function node below (not in the HTTP request node&#39;s UI)&#xA;&#xA;Before this node, drop in a small function node to wrap the binary image as multipart form data and attach the API key header:&#xA;&#xA;const boundary = &#39;----NodeRedBoundary&#39; + Date.now();&#xA;const bodyStart = Buffer.from(&#xA;    --${boundary}\r\n +&#xA;    Content-Disposition: form-data; name=&#34;image&#34;; filename=&#34;plant.jpg&#34;\r\n +&#xA;    Content-Type: image/jpeg\r\n\r\n, &#39;utf8&#39;);&#xA;const bodyEnd = Buffer.from(\r\n--${boundary}--\r\n, &#39;utf8&#39;);&#xA;&#xA;msg.headers = {&#xA;    &#39;X-API-Key&#39;: &#39;YOURAPIKEY&#39;,&#xA;    &#39;Content-Type&#39;: multipart/form-data; boundary=${boundary}&#xA;};&#xA;msg.payload = Buffer.concat([bodyStart, msg.payload, bodyEnd]);&#xA;return msg;&#xA;&#xA;Put your API key in a Node-RED env variable or credentials node instead of hardcoding it. I wrote it inline for clarity.&#xA;&#xA;The debug node&#xA;&#xA;Hook this up to see the full response. You&#39;ll get something like this:&#xA;&#xA;{&#xA;  &#34;requestid&#34;: &#34;reqabc123&#34;,&#xA;  &#34;schemaversion&#34;: &#34;1.1.0&#34;,&#xA;  &#34;success&#34;: true,&#xA;  &#34;iscannabis&#34;: true,&#xA;  &#34;cannabisconfidence&#34;: 0.95,&#xA;  &#34;ishealthy&#34;: false,&#xA;  &#34;healthconfidence&#34;: 0.87,&#xA;  &#34;growthstage&#34;: &#34;flowering&#34;,&#xA;  &#34;growthstageconfidence&#34;: 0.9,&#xA;  &#34;conditions&#34;: [&#xA;    {&#xA;      &#34;classid&#34;: &#34;calciumdeficiency&#34;,&#xA;      &#34;displayname&#34;: &#34;Calcium Deficiency&#34;,&#xA;      &#34;confidence&#34;: 0.92&#xA;    }&#xA;  ],&#xA;  &#34;pests&#34;: [],&#xA;  &#34;muldershypotheses&#34;: [&#xA;    {&#xA;      &#34;excess&#34;: &#34;potassiumexcess&#34;,&#xA;      &#34;explains&#34;: [&#34;calciumdeficiency&#34;],&#xA;      &#34;evidence&#34;: 0.92,&#xA;      &#34;evidencecount&#34;: 1&#xA;    }&#xA;  ]&#xA;}&#xA;&#xA;The response can also include diagnosticconfidence, safetyclassification, uncertaintyfactors, environmentalpatterns, and progressionrisks. You can ignore the ones you do not need.&#xA;&#xA;One thing worth knowing: the response is trimmed by omission. On a clearly healthy plant, you will NOT see a conditions: [] array - the field is left out entirely. Same with pests and muldershypotheses. Always guard with payload.conditions &amp;&amp; payload.conditions.length before indexing.&#xA;&#xA;Deploy. Click the inject node&#39;s button once to run it manually. If the debug panel shows a response with success: true, the plumbing is done.&#xA;&#xA;---&#xA;&#xA;Step 2: Branch on the Result&#xA;&#xA;Now it gets interesting. You want different things to happen depending on what the diagnosis came back with. Drop in a switch node right after the PlantLab response, three outputs:&#xA;&#xA;Property: msg.payload.ishealthy&#xA;Output 1: equals false (problem detected)&#xA;Output 2: equals true (all good)&#xA;Output 3: otherwise (covers the case where the image is not cannabis - ishealthy is omitted)&#xA;&#xA;Always wire the third branch. If you accidentally point the camera at the lens cap, the wall, or your cat, the API returns iscannabis: false with ishealthy left undefined. A two-output switch drops those silently. The third output catches them so you can log or send a &#34;check your camera&#34; notification instead.&#xA;&#xA;Most of the work lives on the false branch.&#xA;&#xA;A second switch for confidence&#xA;&#xA;Inside the problem branch, add another switch:&#xA;&#xA;Property: msg.payload.conditions[0].confidence&#xA;Output 1:   = 0.75 (high confidence - alert)&#xA;Output 2: &lt; 0.75 (marginal - log only)&#xA;&#xA;Early-stage symptoms produce lower confidences. You don&#39;t want every 0.4 nitrogen-deficiency blip triggering a Telegram ping at 3 AM.&#xA;&#xA;---&#xA;&#xA;Step 3: Notifications&#xA;&#xA;Telegram&#xA;&#xA;If you have a Telegram bot set up, drop a telegram sender node on the high-confidence branch. Use a template node before it to format the message:&#xA;&#xA;[ALERT] Plant issue detected&#xA;&#xA;Condition: {{payload.conditions.0.classid}}&#xA;Confidence: {{payload.conditions.0.confidence}}&#xA;Growth stage: {{payload.growthstage}}&#xA;&#xA;Mulder&#39;s hypothesis: {{payload.muldershypotheses.0.excess}}&#xA;&#xA;Discord&#xA;&#xA;Swap the Telegram node for node-red-contrib-discord-advanced and point it at a webhook. Same template works.&#xA;&#xA;Home Assistant (via webhook)&#xA;&#xA;If you run both HA and Node-RED, Node-RED can fire an HA webhook that triggers a mobile notification with the snapshot attached:&#xA;&#xA;[http request POST: http://homeassistant:8123/api/webhook/plantlabalert]&#xA;&#xA;The webhook handler in HA does the actual notification. Useful if you already have notification channels, templates, and quiet hours configured over there.&#xA;&#xA;---&#xA;&#xA;Step 4: Close the Loop&#xA;&#xA;This is where Node-RED pays for itself over a static dashboard. You can fire automations directly from the diagnosis.&#xA;&#xA;Auto-dose Cal-Mag on calcium deficiency&#xA;&#xA;Add a switch on the condition class:&#xA;&#xA;Property: msg.payload.conditions[0].classid&#xA;Output 1: equals calciumdeficiency&#xA;&#xA;Then wire a change node to set the MQTT payload and publish to your dosing pump:&#xA;&#xA;[mqtt out]&#xA;  topic: grow/pumps/calmag/set&#xA;  payload: ON&#xA;&#xA;Then a delay node (5 seconds), then another MQTT message flipping it back OFF. Always notify yourself when a dosing automation fires. A false positive that dumps nutrients is a bad morning to wake up to.&#xA;&#xA;[set pump ON] -  [delay 5s] -  [set pump OFF] -  [notify]&#xA;&#xA;Ramp up fan speed on fungal detection&#xA;&#xA;If the diagnosis returns powderymildew or similar with high confidence, push the fan speed up and drop target humidity in your environmental controller. Same pattern - switch on classid, change node for the new setpoint, MQTT publish.&#xA;&#xA;Log everything to InfluxDB&#xA;&#xA;Regardless of what happened, log every diagnosis to a time-series database so you can build dashboards later. Drop an influxdb out node on the main line, before the switches. A function node preps the fields:&#xA;&#xA;msg.payload = [{&#xA;    ishealthy: msg.payload.ishealthy ? 1 : 0,&#xA;    healthconfidence: msg.payload.healthconfidence,&#xA;    topcondition: msg.payload.conditions[0]?.classid || &#39;none&#39;,&#xA;    topconfidence: msg.payload.conditions[0]?.confidence || 0,&#xA;    growthstage: msg.payload.growthstage&#xA;}];&#xA;return msg;&#xA;&#xA;Now you have a Grafana dashboard of plant health over time. Symptoms drift slowly over days. Watching a confidence line trending up on one specific condition is more useful than catching the single moment it crosses 0.75.&#xA;&#xA;---&#xA;&#xA;Step 5: Dashboard&#xA;&#xA;With node-red-dashboard installed, you get a web UI for free. A simple panel:&#xA;&#xA;uitemplate showing the latest snapshot&#xA;uitext nodes for condition, confidence, growth stage&#xA;uigauge for overall health confidence&#xA;A manual uibutton wired back to the inject node so you can trigger a check on demand&#xA;&#xA;Drop them all in a group called &#34;Plant Health&#34; and they render in a grid at /ui. Pretty enough for the tablet stuck to the kitchen wall.&#xA;&#xA;---&#xA;&#xA;Putting It Together&#xA;&#xA;Complete Node-RED flow: three triggers fan into GET camera, wrap multipart, POST plantlab, then ishealthy switch routes to confidence, healthy, and not-cannabis branches; confidence routes further into Telegram, HA webhook, classid switch for cal-mag pump and fan up, plus log-only&#xA;&#xA;The whole flow described in prose:&#xA;&#xA;Three triggers feed the same pipeline. Two scheduled injects (morning, evening) and one manual dashboard button. Each trigger pulls a camera snapshot, wraps it as multipart, POSTs to PlantLab, and parses the JSON response. From there the signal fans out. One branch writes every result to InfluxDB so you can graph drift over time. The other branch hits switch: ishealthy. The true side logs and stops. The false side continues into a confidence switch. Low-confidence detections only log. High-confidence detections fan out into Telegram, an HA webhook, and a switch: classid that routes specific conditions into downstream automations (cal-mag pump on calcium deficiency, fan bump on mildew, whatever you wire up).&#xA;&#xA;One diagnosis call in. One structured log entry. Two scheduled checks, one manual button. Zero or more notifications, zero or more automations fired. All from five node types: inject, http request, function, switch, change.&#xA;&#xA;---&#xA;&#xA;Troubleshooting&#xA;&#xA;| Problem | Likely cause | Fix |&#xA;|---------|-------------|-----|&#xA;| iscannabis: false | Camera angle, blurple lights, lens cap | Adjust position, use white light or flash |&#xA;| 401 Unauthorized | Missing or wrong API key | Check the X-API-Key header in the wrap-multipart function node |&#xA;| 503 Service Unavailable on upload | Image over 10 MB hits the upstream limit before reaching the API | Resize with node-red-contrib-image-tools before the POST. Target under 8 MB to be safe. |&#xA;| 429 Rate Limit | More than 3 requests/day or 90/month on free tier | Space out injects or upgrade to Pro (500/month) |&#xA;| Request hangs | Camera or API unreachable | Add a catch node on the flow; set HTTP request timeout to 15s |&#xA;| conditions field absent | Plant is healthy, or the image isn&#39;t cannabis, so no condition was detected | Expected. Guard with payload.conditions &amp;&amp; payload.conditions.length - the field is omitted entirely on healthy plants, not returned as an empty array. |&#xA;&#xA;Add a catch node wired to your alerting. When the flow itself breaks, you hear about it. Two weeks of silent green checkmarks on a flow that quietly stopped running is worse than a flow that never ran at all.&#xA;&#xA;---&#xA;&#xA;Why Node-RED Instead of Writing This in Python&#xA;&#xA;A few reasons.&#xA;&#xA;Protocols come free. MQTT, HTTP, WebSockets, Modbus, CoAP, serial, SNMP - all one node away. Your dosing pump speaks MQTT, your camera speaks RTSP, your logger speaks InfluxDB line protocol, alerts go to Telegram or Discord. Doing that same glue in Python means pulling in four libraries and maintaining them yourself.&#xA;&#xA;Visual flows match the mental model. &#34;When the camera sees X, send Y to the pump and notify me on Z&#34; is already a diagram in your head. Node-RED lets you lay it out on a canvas instead of translating between code and back.&#xA;&#xA;You can change a running flow. Deploy swaps it in place, no restart. Handy for grow-room automation where you tune thresholds based on what the plants actually end up doing, not what you assumed they would.&#xA;&#xA;If you prefer code, the same flow is about 40 lines of Python with requests, paho-mqtt, and a cron entry. Use whichever fits.&#xA;&#xA;---&#xA;&#xA;What the API Actually Gives You&#xA;&#xA;The response has every field you need for automation. The ones that matter most:&#xA;&#xA;| Field | Type | Notes |&#xA;|-------|------|-------|&#xA;| ishealthy | bool | The simplest switch |&#xA;| iscannabis | bool | Guard against pointing the camera at the wrong thing |&#xA;| conditions | array | Sorted by confidence, top result first |&#xA;| conditions[].classid | string | One of 31 possible values |&#xA;| conditions[].confidence | float | 0.0 to 1.0, maps empirically to real correctness |&#xA;| growthstage | string | seedling / vegetative / flowering |&#xA;| muldershypotheses | array | Nutrient antagonism explanations |&#xA;&#xA;muldershypotheses is the block most growers end up leaning on. If the diagnosis is calcium deficiency but the hypothesis says the real cause is potassium excess, adding more cal-mag makes things worse. That&#39;s the kind of tip that saves you a week of chasing the wrong fix. More on nutrient antagonism here.&#xA;&#xA;---&#xA;&#xA;FAQ&#xA;&#xA;Do I need a dedicated PlantLab Node-RED node?&#xA;&#xA;Not yet. The standard http request node handles it fine. A node-red-contrib-plantlab package is on the roadmap and will collapse the multipart wrapping into one node. Until then, the function snippet above does the job.&#xA;&#xA;How does this compare to the Home Assistant integration?&#xA;&#xA;HA gives you entities and a config flow. Node-RED gives you wires and broader protocol reach. If your setup is already Node-RED-centric, don&#39;t force HA into the middle just for this. If you have both, let Node-RED handle the flow logic and use HA webhooks for the notifications that already work well there.&#xA;&#xA;Rate limits?&#xA;&#xA;Free tier: 3 per day, 90 per month. Pro: 500 per month. A home grow with morning and evening checks fits the free tier with a spare daily slot. If you&#39;re monitoring multiple tents or running high-frequency checks during flower, Pro is probably what you want.&#xA;&#xA;Does 0.80 confidence really mean 80% certain?&#xA;&#xA;Close to it. Over our evaluation data, a score of 0.80 lines up empirically with about 80% correctness. Worth knowing when you set automation thresholds - a 0.60 threshold fires more often than a 0.80 one, at a predictable cost in false positives. More on how we diagnose here.&#xA;&#xA;Does it handle images from plant apps?&#xA;&#xA;The endpoint accepts any JPEG or PNG. Grow-log app, phone gallery, file drop on a NAS - same POST, same result.&#xA;&#xA;---&#xA;&#xA;PlantLab detects 31 cannabis conditions - nutrient deficiencies, pests, diseases, environmental stress - at 99%+ accuracy in 18ms. Structured JSON out, works with anything that speaks HTTP. Free tier at plantlab.ai. HA integration is open source at github.com/plantlab-ai/home-assistant-plantlab.&#xA;&#xA;---&#xA;&#xA;Related reading&#xA;&#xA;Spider Mites on Cannabis: Early Detection Before the Damage - the timing-critical pest an automated daily check is built to catch early&#xA;Powdery Mildew on Cannabis: Visual Detection and Prevention - a disease where catching the first spots changes the outcome&#xA;Bud Rot and Root Rot in Cannabis: Detection Before It&#39;s Too Late - the wet-conditions rot worth automating a watch for&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<h2 id="what-you-ll-build">What You&#39;ll Build</h2>

<p>A Node-RED flow that captures a photo on a schedule, sends it to PlantLab for diagnosis, and takes action based on the result. Push notifications, dashboard updates, MQTT messages to your controller, log lines into InfluxDB, or whatever combination you want. No Python. No YAML. Nodes and wires.</p>

<p>Setup runs about 25 minutes on a Node-RED instance that&#39;s already up. The cost is whatever camera you own plus PlantLab&#39;s free tier at 3 diagnoses a day. The output is a structured JSON result: 31 possible conditions, a growth stage, nutrient antagonism hypotheses, and confidence scores, all ready to feed into whatever comes next.</p>



<p>Node-RED suits growers who already have their tent wired up with visual flows. If you&#39;ve got temp sensors piping into an InfluxDB dashboard, MQTT switches on a power strip, or a Telegram bot that announces fan speed changes, you already know the pattern. Plant health diagnosis is just another node in the chain.</p>

<p>Coming from Home Assistant? <a href="https://blog.plantlab.ai/home-assistant-plant-monitoring">There&#39;s a tutorial for that too.</a> Node-RED gives you more granular flow control and broader protocol support. HA gives you a cleaner device-and-entity model. Both work. Pick whichever one matches the rest of your setup.</p>

<hr/>

<h2 id="prerequisites">Prerequisites</h2>

<p>Before we start:</p>
<ul><li><strong>Node-RED running</strong> (Docker, Pi, bare metal, or the Home Assistant add-on – any of them works)</li>
<li><strong>A camera that can deliver a JPEG</strong> – IP camera with snapshot URL, Frigate, ESP32-CAM, Wyze with RTSP bridge, Reolink, anything that responds to an HTTP GET with a JPEG or that you can shell out to <code>ffmpeg</code> for</li>
<li><strong>A PlantLab account</strong> – sign up free at <a href="https://plantlab.ai">plantlab.ai</a>, copy your API key from the dashboard</li>
<li><strong>Optional but recommended:</strong> <code>node-red-dashboard</code> for a visual panel, <code>node-red-contrib-image-tools</code> if you want to resize photos before sending, an MQTT broker if your grow controllers talk MQTT</li></ul>

<p>Camera tip: shoot the canopy from above or at a slight angle, with neutral light. Blurple grow lights throw the model off because everything comes out tinted purple. Either schedule the check during a lights-off window or use the camera&#39;s built-in flash. PlantLab wants to see actual leaf color, not a magenta smear.</p>

<hr/>

<h2 id="step-1-the-basic-flow">Step 1: The Basic Flow</h2>

<p>Here&#39;s the smallest flow that actually does something useful. Four nodes. Inject on a schedule, pull an image from the camera, POST to PlantLab, debug-log the result.</p>

<pre><code>[inject: cron 08:00] -&gt; [http request: GET camera.jpg] -&gt; [http request: POST plantlab] -&gt; [debug]
</code></pre>

<p>Open Node-RED, drag these four nodes in, and wire them together.</p>

<h3 id="the-inject-node">The inject node</h3>
<ul><li><strong>Repeat:</strong> at a specific time, 08:00:00</li>
<li><strong>Payload:</strong> empty (we only need the trigger)</li></ul>

<h3 id="the-camera-snapshot-node-http-request">The camera snapshot node (HTTP request)</h3>
<ul><li><strong>Method:</strong> GET</li>
<li><strong>URL:</strong> your camera&#39;s snapshot endpoint, e.g. <code>http://192.168.1.50/snapshot.jpg</code> or your Frigate <code>http://frigate:5000/api/grow_tent/latest.jpg</code></li>
<li><strong>Return:</strong> a binary buffer</li></ul>

<p>If your camera needs auth, add a basic auth header. If it&#39;s RTSP-only, use an <code>exec</code> node running <code>ffmpeg -i rtsp://... -frames:v 1 -f image2pipe -</code> and pipe the stdout through.</p>

<h3 id="the-plantlab-request-node-http-request">The PlantLab request node (HTTP request)</h3>
<ul><li><strong>Method:</strong> POST</li>
<li><strong>URL:</strong> <code>https://api.plantlab.ai/diagnose</code></li>
<li><strong>Return:</strong> a parsed JSON object</li>
<li><strong>Headers:</strong> set in the <code>function</code> node below (not in the HTTP request node&#39;s UI)</li></ul>

<p>Before this node, drop in a small <code>function</code> node to wrap the binary image as multipart form data and attach the API key header:</p>

<pre><code class="language-javascript">const boundary = &#39;----NodeRedBoundary&#39; + Date.now();
const bodyStart = Buffer.from(
    `--${boundary}\r\n` +
    `Content-Disposition: form-data; name=&#34;image&#34;; filename=&#34;plant.jpg&#34;\r\n` +
    `Content-Type: image/jpeg\r\n\r\n`, &#39;utf8&#39;);
const bodyEnd = Buffer.from(`\r\n--${boundary}--\r\n`, &#39;utf8&#39;);

msg.headers = {
    &#39;X-API-Key&#39;: &#39;YOUR_API_KEY&#39;,
    &#39;Content-Type&#39;: `multipart/form-data; boundary=${boundary}`
};
msg.payload = Buffer.concat([bodyStart, msg.payload, bodyEnd]);
return msg;
</code></pre>

<p>Put your API key in a Node-RED <code>env</code> variable or credentials node instead of hardcoding it. I wrote it inline for clarity.</p>

<h3 id="the-debug-node">The debug node</h3>

<p>Hook this up to see the full response. You&#39;ll get something like this:</p>

<pre><code class="language-json">{
  &#34;request_id&#34;: &#34;req_abc123&#34;,
  &#34;schema_version&#34;: &#34;1.1.0&#34;,
  &#34;success&#34;: true,
  &#34;is_cannabis&#34;: true,
  &#34;cannabis_confidence&#34;: 0.95,
  &#34;is_healthy&#34;: false,
  &#34;health_confidence&#34;: 0.87,
  &#34;growth_stage&#34;: &#34;flowering&#34;,
  &#34;growth_stage_confidence&#34;: 0.9,
  &#34;conditions&#34;: [
    {
      &#34;class_id&#34;: &#34;calcium_deficiency&#34;,
      &#34;display_name&#34;: &#34;Calcium Deficiency&#34;,
      &#34;confidence&#34;: 0.92
    }
  ],
  &#34;pests&#34;: [],
  &#34;mulders_hypotheses&#34;: [
    {
      &#34;excess&#34;: &#34;potassium_excess&#34;,
      &#34;explains&#34;: [&#34;calcium_deficiency&#34;],
      &#34;evidence&#34;: 0.92,
      &#34;evidence_count&#34;: 1
    }
  ]
}
</code></pre>

<p>The response can also include <code>diagnostic_confidence</code>, <code>safety_classification</code>, <code>uncertainty_factors</code>, <code>environmental_patterns</code>, and <code>progression_risks</code>. You can ignore the ones you do not need.</p>

<p>One thing worth knowing: the response is trimmed by omission. On a clearly healthy plant, you will NOT see a <code>conditions: []</code> array – the field is left out entirely. Same with <code>pests</code> and <code>mulders_hypotheses</code>. Always guard with <code>payload.conditions &amp;&amp; payload.conditions.length</code> before indexing.</p>

<p>Deploy. Click the inject node&#39;s button once to run it manually. If the debug panel shows a response with <code>success: true</code>, the plumbing is done.</p>

<hr/>

<h2 id="step-2-branch-on-the-result">Step 2: Branch on the Result</h2>

<p>Now it gets interesting. You want different things to happen depending on what the diagnosis came back with. Drop in a <code>switch</code> node right after the PlantLab response, three outputs:</p>
<ul><li><strong>Property:</strong> <code>msg.payload.is_healthy</code></li>
<li><strong>Output 1:</strong> equals <code>false</code> (problem detected)</li>
<li><strong>Output 2:</strong> equals <code>true</code> (all good)</li>
<li><strong>Output 3:</strong> otherwise (covers the case where the image is not cannabis – <code>is_healthy</code> is omitted)</li></ul>

<p>Always wire the third branch. If you accidentally point the camera at the lens cap, the wall, or your cat, the API returns <code>is_cannabis: false</code> with <code>is_healthy</code> left undefined. A two-output switch drops those silently. The third output catches them so you can log or send a “check your camera” notification instead.</p>

<p>Most of the work lives on the <code>false</code> branch.</p>

<h3 id="a-second-switch-for-confidence">A second switch for confidence</h3>

<p>Inside the problem branch, add another <code>switch</code>:</p>
<ul><li><strong>Property:</strong> <code>msg.payload.conditions[0].confidence</code></li>
<li><strong>Output 1:</strong> &gt;= 0.75 (high confidence – alert)</li>
<li><strong>Output 2:</strong> &lt; 0.75 (marginal – log only)</li></ul>

<p>Early-stage symptoms produce lower confidences. You don&#39;t want every 0.4 nitrogen-deficiency blip triggering a Telegram ping at 3 AM.</p>

<hr/>

<h2 id="step-3-notifications">Step 3: Notifications</h2>

<h3 id="telegram">Telegram</h3>

<p>If you have a Telegram bot set up, drop a <code>telegram sender</code> node on the high-confidence branch. Use a <code>template</code> node before it to format the message:</p>

<pre><code>[ALERT] Plant issue detected

Condition: {{payload.conditions.0.class_id}}
Confidence: {{payload.conditions.0.confidence}}
Growth stage: {{payload.growth_stage}}

Mulder&#39;s hypothesis: {{payload.mulders_hypotheses.0.excess}}
</code></pre>

<h3 id="discord">Discord</h3>

<p>Swap the Telegram node for <code>node-red-contrib-discord-advanced</code> and point it at a webhook. Same template works.</p>

<h3 id="home-assistant-via-webhook">Home Assistant (via webhook)</h3>

<p>If you run both HA and Node-RED, Node-RED can fire an HA webhook that triggers a mobile notification with the snapshot attached:</p>

<pre><code>[http request POST: http://homeassistant:8123/api/webhook/plantlab_alert]
</code></pre>

<p>The webhook handler in HA does the actual notification. Useful if you already have notification channels, templates, and quiet hours configured over there.</p>

<hr/>

<h2 id="step-4-close-the-loop">Step 4: Close the Loop</h2>

<p>This is where Node-RED pays for itself over a static dashboard. You can fire automations directly from the diagnosis.</p>

<h3 id="auto-dose-cal-mag-on-calcium-deficiency">Auto-dose Cal-Mag on calcium deficiency</h3>

<p>Add a <code>switch</code> on the condition class:</p>
<ul><li><strong>Property:</strong> <code>msg.payload.conditions[0].class_id</code></li>
<li><strong>Output 1:</strong> equals <code>calcium_deficiency</code></li></ul>

<p>Then wire a <code>change</code> node to set the MQTT payload and publish to your dosing pump:</p>

<pre><code>[mqtt out]
  topic: grow/pumps/calmag/set
  payload: ON
</code></pre>

<p>Then a <code>delay</code> node (5 seconds), then another MQTT message flipping it back OFF. Always notify yourself when a dosing automation fires. A false positive that dumps nutrients is a bad morning to wake up to.</p>

<pre><code>[set pump ON] -&gt; [delay 5s] -&gt; [set pump OFF] -&gt; [notify]
</code></pre>

<h3 id="ramp-up-fan-speed-on-fungal-detection">Ramp up fan speed on fungal detection</h3>

<p>If the diagnosis returns <code>powdery_mildew</code> or similar with high confidence, push the fan speed up and drop target humidity in your environmental controller. Same pattern – <code>switch</code> on class_id, <code>change</code> node for the new setpoint, MQTT publish.</p>

<h3 id="log-everything-to-influxdb">Log everything to InfluxDB</h3>

<p>Regardless of what happened, log every diagnosis to a time-series database so you can build dashboards later. Drop an <code>influxdb out</code> node on the main line, before the switches. A function node preps the fields:</p>

<pre><code class="language-javascript">msg.payload = [{
    is_healthy: msg.payload.is_healthy ? 1 : 0,
    health_confidence: msg.payload.health_confidence,
    top_condition: msg.payload.conditions[0]?.class_id || &#39;none&#39;,
    top_confidence: msg.payload.conditions[0]?.confidence || 0,
    growth_stage: msg.payload.growth_stage
}];
return msg;
</code></pre>

<p>Now you have a Grafana dashboard of plant health over time. Symptoms drift slowly over days. Watching a confidence line trending up on one specific condition is more useful than catching the single moment it crosses 0.75.</p>

<hr/>

<h2 id="step-5-dashboard">Step 5: Dashboard</h2>

<p>With <code>node-red-dashboard</code> installed, you get a web UI for free. A simple panel:</p>
<ul><li><code>ui_template</code> showing the latest snapshot</li>
<li><code>ui_text</code> nodes for condition, confidence, growth stage</li>
<li><code>ui_gauge</code> for overall health confidence</li>
<li>A manual <code>ui_button</code> wired back to the inject node so you can trigger a check on demand</li></ul>

<p>Drop them all in a group called “Plant Health” and they render in a grid at <code>/ui</code>. Pretty enough for the tablet stuck to the kitchen wall.</p>

<hr/>

<h2 id="putting-it-together">Putting It Together</h2>

<p><img src="https://i.snap.as/GQHqBdis.png" alt="Complete Node-RED flow: three triggers fan into GET camera, wrap multipart, POST plantlab, then is_healthy switch routes to confidence, healthy, and not-cannabis branches; confidence routes further into Telegram, HA webhook, class_id switch for cal-mag pump and fan up, plus log-only"/></p>

<p>The whole flow described in prose:</p>

<p>Three triggers feed the same pipeline. Two scheduled injects (morning, evening) and one manual dashboard button. Each trigger pulls a camera snapshot, wraps it as multipart, POSTs to PlantLab, and parses the JSON response. From there the signal fans out. One branch writes every result to InfluxDB so you can graph drift over time. The other branch hits <code>switch: is_healthy</code>. The <code>true</code> side logs and stops. The <code>false</code> side continues into a confidence switch. Low-confidence detections only log. High-confidence detections fan out into Telegram, an HA webhook, and a <code>switch: class_id</code> that routes specific conditions into downstream automations (cal-mag pump on calcium deficiency, fan bump on mildew, whatever you wire up).</p>

<p>One diagnosis call in. One structured log entry. Two scheduled checks, one manual button. Zero or more notifications, zero or more automations fired. All from five node types: <code>inject</code>, <code>http request</code>, <code>function</code>, <code>switch</code>, <code>change</code>.</p>

<hr/>

<h2 id="troubleshooting">Troubleshooting</h2>

<table>
<thead>
<tr>
<th>Problem</th>
<th>Likely cause</th>
<th>Fix</th>
</tr>
</thead>

<tbody>
<tr>
<td><code>is_cannabis: false</code></td>
<td>Camera angle, blurple lights, lens cap</td>
<td>Adjust position, use white light or flash</td>
</tr>

<tr>
<td>401 Unauthorized</td>
<td>Missing or wrong API key</td>
<td>Check the <code>X-API-Key</code> header in the wrap-multipart function node</td>
</tr>

<tr>
<td>503 Service Unavailable on upload</td>
<td>Image over 10 MB hits the upstream limit before reaching the API</td>
<td>Resize with <code>node-red-contrib-image-tools</code> before the POST. Target under 8 MB to be safe.</td>
</tr>

<tr>
<td>429 Rate Limit</td>
<td>More than 3 requests/day or 90/month on free tier</td>
<td>Space out injects or upgrade to Pro (500/month)</td>
</tr>

<tr>
<td>Request hangs</td>
<td>Camera or API unreachable</td>
<td>Add a <code>catch</code> node on the flow; set HTTP request timeout to 15s</td>
</tr>

<tr>
<td><code>conditions</code> field absent</td>
<td>Plant is healthy, or the image isn&#39;t cannabis, so no condition was detected</td>
<td>Expected. Guard with <code>payload.conditions &amp;&amp; payload.conditions.length</code> – the field is omitted entirely on healthy plants, not returned as an empty array.</td>
</tr>
</tbody>
</table>

<p>Add a <code>catch</code> node wired to your alerting. When the flow itself breaks, you hear about it. Two weeks of silent green checkmarks on a flow that quietly stopped running is worse than a flow that never ran at all.</p>

<hr/>

<h2 id="why-node-red-instead-of-writing-this-in-python">Why Node-RED Instead of Writing This in Python</h2>

<p>A few reasons.</p>

<p><strong>Protocols come free.</strong> MQTT, HTTP, WebSockets, Modbus, CoAP, serial, SNMP – all one node away. Your dosing pump speaks MQTT, your camera speaks RTSP, your logger speaks InfluxDB line protocol, alerts go to Telegram or Discord. Doing that same glue in Python means pulling in four libraries and maintaining them yourself.</p>

<p><strong>Visual flows match the mental model.</strong> “When the camera sees X, send Y to the pump and notify me on Z” is already a diagram in your head. Node-RED lets you lay it out on a canvas instead of translating between code and back.</p>

<p><strong>You can change a running flow.</strong> Deploy swaps it in place, no restart. Handy for grow-room automation where you tune thresholds based on what the plants actually end up doing, not what you assumed they would.</p>

<p>If you prefer code, the same flow is about 40 lines of Python with <code>requests</code>, <code>paho-mqtt</code>, and a cron entry. Use whichever fits.</p>

<hr/>

<h2 id="what-the-api-actually-gives-you">What the API Actually Gives You</h2>

<p>The response has every field you need for automation. The ones that matter most:</p>

<table>
<thead>
<tr>
<th>Field</th>
<th>Type</th>
<th>Notes</th>
</tr>
</thead>

<tbody>
<tr>
<td><code>is_healthy</code></td>
<td>bool</td>
<td>The simplest switch</td>
</tr>

<tr>
<td><code>is_cannabis</code></td>
<td>bool</td>
<td>Guard against pointing the camera at the wrong thing</td>
</tr>

<tr>
<td><code>conditions</code></td>
<td>array</td>
<td>Sorted by confidence, top result first</td>
</tr>

<tr>
<td><code>conditions[].class_id</code></td>
<td>string</td>
<td>One of 31 possible values</td>
</tr>

<tr>
<td><code>conditions[].confidence</code></td>
<td>float</td>
<td>0.0 to 1.0, maps empirically to real correctness</td>
</tr>

<tr>
<td><code>growth_stage</code></td>
<td>string</td>
<td><code>seedling</code> / <code>vegetative</code> / <code>flowering</code></td>
</tr>

<tr>
<td><code>mulders_hypotheses</code></td>
<td>array</td>
<td>Nutrient antagonism explanations</td>
</tr>
</tbody>
</table>

<p><code>mulders_hypotheses</code> is the block most growers end up leaning on. If the diagnosis is calcium deficiency but the hypothesis says the real cause is potassium excess, adding more cal-mag makes things worse. That&#39;s the kind of tip that saves you a week of chasing the wrong fix. <a href="/blog/nutrient-antagonism-cannabis">More on nutrient antagonism here.</a></p>

<hr/>

<h2 id="faq">FAQ</h2>

<p><strong>Do I need a dedicated PlantLab Node-RED node?</strong></p>

<p>Not yet. The standard <code>http request</code> node handles it fine. A <code>node-red-contrib-plantlab</code> package is on the roadmap and will collapse the multipart wrapping into one node. Until then, the function snippet above does the job.</p>

<p><strong>How does this compare to the Home Assistant integration?</strong></p>

<p>HA gives you entities and a config flow. Node-RED gives you wires and broader protocol reach. If your setup is already Node-RED-centric, don&#39;t force HA into the middle just for this. If you have both, let Node-RED handle the flow logic and use HA webhooks for the notifications that already work well there.</p>

<p><strong>Rate limits?</strong></p>

<p>Free tier: 3 per day, 90 per month. Pro: 500 per month. A home grow with morning and evening checks fits the free tier with a spare daily slot. If you&#39;re monitoring multiple tents or running high-frequency checks during flower, Pro is probably what you want.</p>

<p><strong>Does 0.80 confidence really mean 80% certain?</strong></p>

<p>Close to it. Over our evaluation data, a score of 0.80 lines up empirically with about 80% correctness. Worth knowing when you set automation thresholds – a 0.60 threshold fires more often than a 0.80 one, at a predictable cost in false positives. <a href="https://blog.plantlab.ai/how-plantlabs-ai-diagnoses-31-cannabis-plant-problems-in-18-milliseconds">More on how we diagnose here.</a></p>

<p><strong>Does it handle images from plant apps?</strong></p>

<p>The endpoint accepts any JPEG or PNG. Grow-log app, phone gallery, file drop on a NAS – same POST, same result.</p>

<hr/>

<p><em>PlantLab detects 31 cannabis conditions – nutrient deficiencies, pests, diseases, environmental stress – at 99%+ accuracy in 18ms. Structured JSON out, works with anything that speaks HTTP. Free tier at <a href="https://plantlab.ai">plantlab.ai</a>. HA integration is open source at <a href="https://github.com/plantlab-ai/home-assistant-plantlab">github.com/plantlab-ai/home-assistant-plantlab</a>.</em></p>

<hr/>

<h2 id="related-reading">Related reading</h2>
<ul><li><a href="https://blog.plantlab.ai/spider-mites-cannabis">Spider Mites on Cannabis: Early Detection Before the Damage</a> – the timing-critical pest an automated daily check is built to catch early</li>
<li><a href="https://blog.plantlab.ai/powdery-mildew-cannabis">Powdery Mildew on Cannabis: Visual Detection and Prevention</a> – a disease where catching the first spots changes the outcome</li>
<li><a href="https://blog.plantlab.ai/bud-rot-root-rot-cannabis">Bud Rot and Root Rot in Cannabis: Detection Before It&#39;s Too Late</a> – the wet-conditions rot worth automating a watch for</li></ul>
]]></content:encoded>
      <guid>https://blog.plantlab.ai/node-red-plantlab-automation</guid>
      <pubDate>Tue, 28 Jul 2026 14:23:02 +0000</pubDate>
    </item>
    <item>
      <title>Bud Rot and Root Rot in Cannabis: Detection Before It&#39;s Too Late</title>
      <link>https://blog.plantlab.ai/bud-rot-root-rot-cannabis?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[Bud rot and root rot in cannabis - two diseases that spread faster than growers react&#xA;&#xA;You won&#39;t smell it at first. By the time you do - that damp, musty sweetness coming off a cola that looked fine yesterday - you&#39;ve already lost that bud and probably the ones touching it. You cut it open, and the inside is grey mush. A week from harvest.&#xA;&#xA;Bud rot. It colonizes from the inside out, hiding in the densest parts of your canopy where airflow is worst and humidity is highest. By the time the exterior shows damage, the interior has been decomposing for days.&#xA;&#xA;!--more--&#xA;&#xA;Root rot is the same story, underground. A plant that was drinking normally starts drooping despite a wet medium. You check the roots and they&#39;re brown, slimy, and smell like a swamp. The pathogen has been destroying the root system for a week before the canopy showed a single symptom.&#xA;&#xA;What they share: the window between &#34;detectable&#34; and &#34;devastating&#34; is days, not weeks. Nutrient deficiencies give you time. Pest infestations give you time. Rot doesn&#39;t. It doubles and doubles, and by the time most growers catch it, the only option left is damage control.&#xA;&#xA;---&#xA;&#xA;Quick Identification&#xA;&#xA;Bud rot is caused by Botrytis cinerea, a fungus that colonizes dense flower clusters from the inside out. The first thing you&#39;ll notice: a sugar leaf or two within a cola turning yellow or brown while everything around it stays healthy. That isolated patch of dead tissue - not matching any nutrient pattern - is your warning. Pull the bud apart and you&#39;ll find grey or brown tissue, soft and wet, with grey-white fuzz (mycelium) growing through it.&#xA;&#xA;Root rot comes from several pathogens - water molds like Pythium (especially common in hydro) and true fungi like Fusarium (which hits both soil and hydro). The first sign is a plant that droops for no obvious reason even though you just watered. Growth slows. Roots shift from white to tan or brown. By the time the roots are dark brown, slimy, and smell rotten, the plant may not recover.&#xA;&#xA;What separates rot from everything else: it&#39;s local. One cola dying while the rest of the plant looks fine. One section of roots going brown while others stay white. Nutrient deficiencies hit the whole plant uniformly. Rot has an epicenter.&#xA;&#xA;---&#xA;&#xA;Bud Rot: What to Look For&#xA;&#xA;The Inside-Out Problem&#xA;&#xA;Bud rot starts where you can&#39;t see it. Botrytis spores land on flower tissue, germinate in the humidity, and go straight for the densest part of the bud - the interior, where moisture sits longest. Outside? Green and healthy. Inside? Grey mush.&#xA;&#xA;Doesn&#39;t matter how many cycles you&#39;ve run. You can eyeball your canopy every day and miss it completely, because the infection is in the one place a surface inspection doesn&#39;t reach.&#xA;&#xA;Early Symptoms (Day 1-3)&#xA;&#xA;The first visible sign is almost always a single sugar leaf - or a small cluster of them - within a cola that yellows and wilts while the rest of the bud stays green. This is easy to dismiss as a light-deprived leaf dying naturally. It isn&#39;t.&#xA;&#xA;What to look for:&#xA;A single yellowing/browning leaf within an otherwise healthy cola&#xA;The leaf pulls out easily with a slight tug (the stem base is already rotting)&#xA;The area around the discolored leaf feels softer or more moist than adjacent tissue&#xA;A faint musty smell when you press your nose close to the bud&#xA;&#xA;Moderate Symptoms (Day 3-7)&#xA;&#xA;Brown or grey tissue visible when you gently spread the cola apart&#xA;Multiple leaves in the same bud turning yellow or brown&#xA;White or grey fuzzy mycelium visible inside the bud under magnification&#xA;The affected area feels distinctly wet or spongy&#xA;&#xA;Advanced Symptoms (Day 7+)&#xA;&#xA;Grey mold visible on the bud exterior&#xA;Bud tissue is soft, wet, and pulls apart easily&#xA;Dark brown or black discoloration spreading to adjacent colas&#xA;Spore dust (grey powder) released when the bud is disturbed&#xA;Unmistakable musty or ammonia smell&#xA;&#xA;At this point, that bud is gone. Everything you do now is about keeping it from spreading.&#xA;&#xA;Where Bud Rot Hits First&#xA;&#xA;Bud rot isn&#39;t random. It goes where the moisture is:&#xA;&#xA;Your main cola. Any thick, tightly-packed bud where moisture can&#39;t escape. Spots deep in the canopy where leaves overlap and trap humidity. Anywhere a fan leaf rests against a bud, creating a little moisture pocket. And anywhere the bud surface is already damaged - caterpillar bore holes, supercrop scars, anything that gave the fungus a way in.&#xA;&#xA;If you&#39;re only going to inspect one thing daily in late flower, make it the main cola and any bud that&#39;s touching a fan leaf. That&#39;s where bud rot lives.&#xA;&#xA;---&#xA;&#xA;Root Rot: What to Look For&#xA;&#xA;The Drooping Paradox&#xA;&#xA;Root rot looks like underwatering. Plant&#39;s drooping, so you water it. The drooping gets worse, so you water more. And now you&#39;re feeding the exact conditions that are killing the roots.&#xA;&#xA;The tell: is the medium already wet? Overwatering droop and root rot droop look identical from the canopy. The answer is always below the surface.&#xA;&#xA;Early Symptoms (Day 1-5)&#xA;&#xA;Drooping or wilting even though the medium is wet&#xA;Slowed growth rate compared to other plants in the same environment&#xA;Roots shifting from bright white to off-white or light tan&#xA;Slight sour or stale smell from the root zone (especially in hydro)&#xA;&#xA;Moderate Symptoms (Day 5-14)&#xA;&#xA;Roots turning brown and developing a slimy texture&#xA;Leaves yellowing from the bottom up (mimics nitrogen deficiency)&#xA;Plant drinking less water than expected for its size&#xA;Stems near the base feeling soft or mushy&#xA;Distinct foul odor from the root zone&#xA;&#xA;Advanced Symptoms (Day 14+)&#xA;&#xA;Dark brown, mushy root mass that falls apart when touched&#xA;Severe wilting that doesn&#39;t recover with watering&#xA;Lower leaves dropping rapidly&#xA;Base of stem may show brown discoloration&#xA;The entire root zone smells of decay&#xA;&#xA;Hydro vs Soil vs Coco&#xA;&#xA;Root rot behaves differently across growing media:&#xA;&#xA;| Factor | Hydroponic (DWC/NFT) | Coco Coir | Soil |&#xA;|--------|----------------------|-----------|------|&#xA;| Primary pathogen | Pythium (also Fusarium) | Pythium / Fusarium | Fusarium / Phytophthora |&#xA;| Speed of onset | Fast (2-5 days) | Moderate (5-10 days) | Slow (7-14 days) |&#xA;| First sign | Slimy roots, off smell | Drooping, slow drying | Persistent droop |&#xA;| Temperature trigger | Reservoir   22C / 72F | Overwatering + warm | Overwatering + poor drainage |&#xA;| Visibility | Easy (roots exposed) | Moderate (can pull back medium) | Hard (roots buried) |&#xA;&#xA;Hydroponic growers have one advantage here: you can actually see the roots. Check them daily. One brown root tip caught early is a ten-second trim. Caught late, it&#39;s a dead plant.&#xA;&#xA;---&#xA;&#xA;Why Speed Matters More Than Treatment&#xA;&#xA;Most treatment guides bury the uncomfortable truth: by the time you&#39;ve confirmed rot, your best options are already behind you. Both conditions double fast once established, and the pathogens produce spores (bud rot) or zoospores (root rot) that reinfect tissue you&#39;ve already treated.&#xA;&#xA;For bud rot:&#xA;Day 1-3: Remove affected cola plus 2-3cm of healthy tissue around it. Sterilize cutting tool between cuts. Drop humidity below 50%. Increase airflow. The remaining harvest is likely safe.&#xA;Day 4-7: You&#39;re removing multiple colas. Some adjacent buds may be internally compromised but not yet showing symptoms. Harvest early if possible.&#xA;Day 7+: Salvage what you can. Anything near the infected area should be assumed compromised.&#xA;&#xA;For root rot:&#xA;Early stage: Hydrogen peroxide root drench (3ml of 3% H2O2 per liter for mild cases, up to 5ml/L for aggressive treatment), drop reservoir temperature below 20C / 68F, increase dissolved oxygen. Beneficial microbes (Bacillus, Trichoderma) as a preventive - not a cure, but they compete with pathogens. Note: H2O2 kills beneficials too, so don&#39;t use both simultaneously.&#xA;Moderate stage: Root pruning (remove all brown tissue), full reservoir change, lower temperature, and hope the remaining root mass can support the plant.&#xA;Advanced: The plant is dying. What&#39;s left of the root system can&#39;t support it. Sometimes the honest move is to pull it and focus on the plants you can still save.&#xA;&#xA;Every day you don&#39;t catch it, your options get worse. Two days is the difference between losing one cola and losing a quarter of the canopy.&#xA;&#xA;---&#xA;&#xA;How to Distinguish Rot from Other Problems&#xA;&#xA;Early rot symptoms can look like nutrient deficiencies, overwatering, or heat stress. The giveaway is where the damage is concentrated.&#xA;&#xA;Rot vs other problems comparison chart&#xA;&#xA;| Symptom | Bud Rot | Root Rot | Nitrogen Deficiency | Overwatering |&#xA;|---------|---------|----------|----------------------|--------------|&#xA;| Affected area | Single cola or bud site | Whole plant from bottom up | Whole plant, lower leaves first | Whole plant |&#xA;| Symmetry | Asymmetric - one point of origin | May be symmetric | Symmetric | Symmetric |&#xA;| Progression | Spreads from one spot outward | Bottom-up canopy decline | Bottom-up, gradual | Uniform droop |&#xA;| Smell | Musty, damp | Sour, foul root zone | None | None |&#xA;| Physical touch test | Soft, wet bud interior | Brown, slimy roots | Leaves feel normal | Leaves feel heavy |&#xA;| Recovers with adjustment | No - removal is the only fix | Rarely once advanced | Yes, within days | Yes, within hours |&#xA;&#xA;If damage is spreading from one spot and doesn&#39;t respond to feed or environment changes - treat it as rot. Verify later. You don&#39;t have time to be wrong slowly.&#xA;&#xA;---&#xA;&#xA;Environmental Triggers&#xA;&#xA;Rot is an environmental disease. The pathogen is probably already in your grow room - Botrytis spores are everywhere. But it needs specific conditions to take hold.&#xA;&#xA;Bud Rot Triggers&#xA;Humidity above 60% during flower - this is the one that matters most&#xA;Poor airflow through the canopy, especially within dense colas&#xA;Temperature swings that cause condensation on flower tissue (lights-off drops are the usual culprit)&#xA;Dense genetics - strains bred for bag appeal often produce bud structures that trap moisture&#xA;Late flower, week 6-8, when buds are at their densest and you&#39;re tired of babysitting the dehumidifier&#xA;&#xA;Root Rot Triggers&#xA;Reservoir temperature above 22C / 72F in hydro - this is the big one&#xA;Overwatering in any medium, especially with poor drainage&#xA;Low dissolved oxygen in the root zone&#xA;Contaminated medium or tools (reusing coco without sterilizing, dirty res)&#xA;Dead organic matter sitting in the reservoir&#xA;&#xA;The 60/22 Rule&#xA;&#xA;Two numbers. That&#39;s all you need to remember: flower room humidity below 60%, reservoir temperature below 22C / 72F. Not arbitrary - those are the inflection points where Botrytis and Pythium growth rates drop off hard. Stay below them and you&#39;re making it difficult for the pathogen. Go above and you&#39;re rolling out a welcome mat.&#xA;&#xA;---&#xA;&#xA;Catching It Before You Can&#xA;&#xA;With rot, speed is the whole game. Early symptoms look like half a dozen other things, and most growers burn their response time treating the wrong problem.&#xA;&#xA;PlantLab&#39;s vision model detects both bud rot and root rot as distinct conditions. You get a specific diagnosis with a confidence score, not &#34;something might be wrong with your plant.&#34; The model was trained exclusively on cannabis images - over 2,000 verified bud rot samples alone - across every severity stage from the first discolored leaf to full colonization.&#xA;&#xA;If you&#39;re growing one plant, daily inspection is enough. But for a larger canopy - or if you&#39;re running cameras on a timer - a system that flags bud rot at 6 AM on a Tuesday before you walk into the room is worth having.&#xA;&#xA;Try it free at plantlab.ai.&#xA;&#xA;---&#xA;&#xA;FAQ&#xA;&#xA;How fast does bud rot spread?&#xA;&#xA;Fast. An entire cola can go from first visible symptom to grey mush in 48-72 hours under favorable conditions (humidity above 60%, poor airflow). During that window, spores are landing on neighboring buds and starting new infections that won&#39;t show for days. Inspect your densest colas daily in late flower. There&#39;s no substitute.&#xA;&#xA;Can you save a bud with rot?&#xA;&#xA;No. Once Botrytis is inside the flower structure, that bud is done. Cut the affected cola plus a margin of healthy tissue around it, sterilize your tool between cuts, and get humidity down. Everything after detection is about containment, not cure.&#xA;&#xA;Does hydrogen peroxide cure root rot?&#xA;&#xA;It kills Pythium on contact, but it also nukes every beneficial microbe in the root zone. Think of it as a reset button, not a treatment plan. Use it alongside temperature correction (below 22C / 72F) and better oxygenation. Once most of the roots are brown and slimy, H2O2 won&#39;t save the plant - there&#39;s not enough healthy root mass left to recover from.&#xA;&#xA;Why does my plant droop even though the soil is wet?&#xA;&#xA;Rotting roots can&#39;t absorb water even when they&#39;re sitting in it. The plant wilts, you water more, the root zone stays waterlogged, and the pathogen thrives. If a plant droops and the medium is already wet, stop watering and check the roots.&#xA;&#xA;Can bud rot spread to other plants?&#xA;&#xA;Absolutely. Botrytis cinerea produces airborne spores, and disturbing an infected bud - touching it, cutting it, even a fan blowing across it - sends them into the air. They land on neighboring plants and start the cycle over. When you remove infected colas, work carefully and bag the tissue immediately. Some growers hit neighboring plants with a preventive fungicide application after removal, which isn&#39;t a bad idea.&#xA;&#xA;---&#xA;&#xA;Related reading&#xA;&#xA;Fungus Gnats on Cannabis: The Wet-Soil Pest That Looks Like Root Rot - the pest whose larvae open the root wounds that root rot moves into&#xA;Powdery Mildew on Cannabis: Visual Detection and Prevention - the other major fungal disease, and the humidity conditions both share&#xA;What&#39;s Wrong With My Cannabis Plant? A Visual Diagnosis Guide - the full symptom-to-cause quick reference&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://i.snap.as/GJEwQiWh.png" alt="Bud rot and root rot in cannabis - two diseases that spread faster than growers react"/></p>

<p>You won&#39;t smell it at first. By the time you do – that damp, musty sweetness coming off a cola that looked fine yesterday – you&#39;ve already lost that bud and probably the ones touching it. You cut it open, and the inside is grey mush. A week from harvest.</p>

<p>Bud rot. It colonizes from the inside out, hiding in the densest parts of your canopy where airflow is worst and humidity is highest. By the time the exterior shows damage, the interior has been decomposing for days.</p>



<p>Root rot is the same story, underground. A plant that was drinking normally starts drooping despite a wet medium. You check the roots and they&#39;re brown, slimy, and smell like a swamp. The pathogen has been destroying the root system for a week before the canopy showed a single symptom.</p>

<p>What they share: the window between “detectable” and “devastating” is days, not weeks. Nutrient deficiencies give you time. Pest infestations give you time. Rot doesn&#39;t. It doubles and doubles, and by the time most growers catch it, the only option left is damage control.</p>

<hr/>

<h2 id="quick-identification">Quick Identification</h2>

<p><strong>Bud rot</strong> is caused by <em>Botrytis cinerea</em>, a fungus that colonizes dense flower clusters from the inside out. The first thing you&#39;ll notice: a sugar leaf or two within a cola turning yellow or brown while everything around it stays healthy. That isolated patch of dead tissue – not matching any nutrient pattern – is your warning. Pull the bud apart and you&#39;ll find grey or brown tissue, soft and wet, with grey-white fuzz (mycelium) growing through it.</p>

<p><strong>Root rot</strong> comes from several pathogens – water molds like <em>Pythium</em> (especially common in hydro) and true fungi like <em>Fusarium</em> (which hits both soil and hydro). The first sign is a plant that droops for no obvious reason even though you just watered. Growth slows. Roots shift from white to tan or brown. By the time the roots are dark brown, slimy, and smell rotten, the plant may not recover.</p>

<p>What separates rot from everything else: it&#39;s local. One cola dying while the rest of the plant looks fine. One section of roots going brown while others stay white. Nutrient deficiencies hit the whole plant uniformly. Rot has an epicenter.</p>

<hr/>

<h2 id="bud-rot-what-to-look-for">Bud Rot: What to Look For</h2>

<h3 id="the-inside-out-problem">The Inside-Out Problem</h3>

<p>Bud rot starts where you can&#39;t see it. <em>Botrytis</em> spores land on flower tissue, germinate in the humidity, and go straight for the densest part of the bud – the interior, where moisture sits longest. Outside? Green and healthy. Inside? Grey mush.</p>

<p>Doesn&#39;t matter how many cycles you&#39;ve run. You can eyeball your canopy every day and miss it completely, because the infection is in the one place a surface inspection doesn&#39;t reach.</p>

<h3 id="early-symptoms-day-1-3">Early Symptoms (Day 1-3)</h3>

<p>The first visible sign is almost always a single sugar leaf – or a small cluster of them – within a cola that yellows and wilts while the rest of the bud stays green. This is easy to dismiss as a light-deprived leaf dying naturally. It isn&#39;t.</p>

<p>What to look for:
– A single yellowing/browning leaf within an otherwise healthy cola
– The leaf pulls out easily with a slight tug (the stem base is already rotting)
– The area around the discolored leaf feels softer or more moist than adjacent tissue
– A faint musty smell when you press your nose close to the bud</p>

<h3 id="moderate-symptoms-day-3-7">Moderate Symptoms (Day 3-7)</h3>
<ul><li>Brown or grey tissue visible when you gently spread the cola apart</li>
<li>Multiple leaves in the same bud turning yellow or brown</li>
<li>White or grey fuzzy mycelium visible inside the bud under magnification</li>
<li>The affected area feels distinctly wet or spongy</li></ul>

<h3 id="advanced-symptoms-day-7">Advanced Symptoms (Day 7+)</h3>
<ul><li>Grey mold visible on the bud exterior</li>
<li>Bud tissue is soft, wet, and pulls apart easily</li>
<li>Dark brown or black discoloration spreading to adjacent colas</li>
<li>Spore dust (grey powder) released when the bud is disturbed</li>
<li>Unmistakable musty or ammonia smell</li></ul>

<p>At this point, that bud is gone. Everything you do now is about keeping it from spreading.</p>

<h3 id="where-bud-rot-hits-first">Where Bud Rot Hits First</h3>

<p>Bud rot isn&#39;t random. It goes where the moisture is:</p>

<p>Your main cola. Any thick, tightly-packed bud where moisture can&#39;t escape. Spots deep in the canopy where leaves overlap and trap humidity. Anywhere a fan leaf rests against a bud, creating a little moisture pocket. And anywhere the bud surface is already damaged – caterpillar bore holes, supercrop scars, anything that gave the fungus a way in.</p>

<p>If you&#39;re only going to inspect one thing daily in late flower, make it the main cola and any bud that&#39;s touching a fan leaf. That&#39;s where bud rot lives.</p>

<hr/>

<h2 id="root-rot-what-to-look-for">Root Rot: What to Look For</h2>

<h3 id="the-drooping-paradox">The Drooping Paradox</h3>

<p>Root rot looks like underwatering. Plant&#39;s drooping, so you water it. The drooping gets worse, so you water more. And now you&#39;re feeding the exact conditions that are killing the roots.</p>

<p>The tell: is the medium already wet? Overwatering droop and root rot droop look identical from the canopy. The answer is always below the surface.</p>

<h3 id="early-symptoms-day-1-5">Early Symptoms (Day 1-5)</h3>
<ul><li>Drooping or wilting even though the medium is wet</li>
<li>Slowed growth rate compared to other plants in the same environment</li>
<li>Roots shifting from bright white to off-white or light tan</li>
<li>Slight sour or stale smell from the root zone (especially in hydro)</li></ul>

<h3 id="moderate-symptoms-day-5-14">Moderate Symptoms (Day 5-14)</h3>
<ul><li>Roots turning brown and developing a slimy texture</li>
<li>Leaves yellowing from the bottom up (mimics nitrogen deficiency)</li>
<li>Plant drinking less water than expected for its size</li>
<li>Stems near the base feeling soft or mushy</li>
<li>Distinct foul odor from the root zone</li></ul>

<h3 id="advanced-symptoms-day-14">Advanced Symptoms (Day 14+)</h3>
<ul><li>Dark brown, mushy root mass that falls apart when touched</li>
<li>Severe wilting that doesn&#39;t recover with watering</li>
<li>Lower leaves dropping rapidly</li>
<li>Base of stem may show brown discoloration</li>
<li>The entire root zone smells of decay</li></ul>

<h3 id="hydro-vs-soil-vs-coco">Hydro vs Soil vs Coco</h3>

<p>Root rot behaves differently across growing media:</p>

<table>
<thead>
<tr>
<th>Factor</th>
<th>Hydroponic (DWC/NFT)</th>
<th>Coco Coir</th>
<th>Soil</th>
</tr>
</thead>

<tbody>
<tr>
<td>Primary pathogen</td>
<td><em>Pythium</em> (also <em>Fusarium</em>)</td>
<td><em>Pythium</em> / <em>Fusarium</em></td>
<td><em>Fusarium</em> / <em>Phytophthora</em></td>
</tr>

<tr>
<td>Speed of onset</td>
<td>Fast (2-5 days)</td>
<td>Moderate (5-10 days)</td>
<td>Slow (7-14 days)</td>
</tr>

<tr>
<td>First sign</td>
<td>Slimy roots, off smell</td>
<td>Drooping, slow drying</td>
<td>Persistent droop</td>
</tr>

<tr>
<td>Temperature trigger</td>
<td>Reservoir &gt; 22C / 72F</td>
<td>Overwatering + warm</td>
<td>Overwatering + poor drainage</td>
</tr>

<tr>
<td>Visibility</td>
<td>Easy (roots exposed)</td>
<td>Moderate (can pull back medium)</td>
<td>Hard (roots buried)</td>
</tr>
</tbody>
</table>

<p>Hydroponic growers have one advantage here: you can actually see the roots. Check them daily. One brown root tip caught early is a ten-second trim. Caught late, it&#39;s a dead plant.</p>

<hr/>

<h2 id="why-speed-matters-more-than-treatment">Why Speed Matters More Than Treatment</h2>

<p>Most treatment guides bury the uncomfortable truth: by the time you&#39;ve confirmed rot, your best options are already behind you. Both conditions double fast once established, and the pathogens produce spores (bud rot) or zoospores (root rot) that reinfect tissue you&#39;ve already treated.</p>

<p>For bud rot:
– <strong>Day 1-3:</strong> Remove affected cola plus 2-3cm of healthy tissue around it. Sterilize cutting tool between cuts. Drop humidity below 50%. Increase airflow. The remaining harvest is likely safe.
– <strong>Day 4-7:</strong> You&#39;re removing multiple colas. Some adjacent buds may be internally compromised but not yet showing symptoms. Harvest early if possible.
– <strong>Day 7+:</strong> Salvage what you can. Anything near the infected area should be assumed compromised.</p>

<p>For root rot:
– <strong>Early stage:</strong> Hydrogen peroxide root drench (3ml of 3% H2O2 per liter for mild cases, up to 5ml/L for aggressive treatment), drop reservoir temperature below 20C / 68F, increase dissolved oxygen. Beneficial microbes (<em>Bacillus</em>, <em>Trichoderma</em>) as a preventive – not a cure, but they compete with pathogens. Note: H2O2 kills beneficials too, so don&#39;t use both simultaneously.
– <strong>Moderate stage:</strong> Root pruning (remove all brown tissue), full reservoir change, lower temperature, and hope the remaining root mass can support the plant.
– <strong>Advanced:</strong> The plant is dying. What&#39;s left of the root system can&#39;t support it. Sometimes the honest move is to pull it and focus on the plants you can still save.</p>

<p>Every day you don&#39;t catch it, your options get worse. Two days is the difference between losing one cola and losing a quarter of the canopy.</p>

<hr/>

<h2 id="how-to-distinguish-rot-from-other-problems">How to Distinguish Rot from Other Problems</h2>

<p>Early rot symptoms can look like nutrient deficiencies, overwatering, or heat stress. The giveaway is <strong>where</strong> the damage is concentrated.</p>

<p><img src="https://i.snap.as/tXyz87Ow.png" alt="Rot vs other problems comparison chart"/></p>

<table>
<thead>
<tr>
<th>Symptom</th>
<th>Bud Rot</th>
<th>Root Rot</th>
<th><a href="https://blog.plantlab.ai/nitrogen-deficiency-in-cannabis-a-visual-guide">Nitrogen Deficiency</a></th>
<th>Overwatering</th>
</tr>
</thead>

<tbody>
<tr>
<td>Affected area</td>
<td>Single cola or bud site</td>
<td>Whole plant from bottom up</td>
<td>Whole plant, lower leaves first</td>
<td>Whole plant</td>
</tr>

<tr>
<td>Symmetry</td>
<td>Asymmetric – one point of origin</td>
<td>May be symmetric</td>
<td>Symmetric</td>
<td>Symmetric</td>
</tr>

<tr>
<td>Progression</td>
<td>Spreads from one spot outward</td>
<td>Bottom-up canopy decline</td>
<td>Bottom-up, gradual</td>
<td>Uniform droop</td>
</tr>

<tr>
<td>Smell</td>
<td>Musty, damp</td>
<td>Sour, foul root zone</td>
<td>None</td>
<td>None</td>
</tr>

<tr>
<td>Physical touch test</td>
<td>Soft, wet bud interior</td>
<td>Brown, slimy roots</td>
<td>Leaves feel normal</td>
<td>Leaves feel heavy</td>
</tr>

<tr>
<td>Recovers with adjustment</td>
<td>No – removal is the only fix</td>
<td>Rarely once advanced</td>
<td>Yes, within days</td>
<td>Yes, within hours</td>
</tr>
</tbody>
</table>

<p>If damage is spreading from one spot and doesn&#39;t respond to feed or environment changes – treat it as rot. Verify later. You don&#39;t have time to be wrong slowly.</p>

<hr/>

<h2 id="environmental-triggers">Environmental Triggers</h2>

<p>Rot is an environmental disease. The pathogen is probably already in your grow room – <em>Botrytis</em> spores are everywhere. But it needs specific conditions to take hold.</p>

<h3 id="bud-rot-triggers">Bud Rot Triggers</h3>
<ul><li>Humidity above <strong>60%</strong> during flower – this is the one that matters most</li>
<li>Poor airflow through the canopy, especially within dense colas</li>
<li>Temperature swings that cause condensation on flower tissue (lights-off drops are the usual culprit)</li>
<li>Dense genetics – strains bred for bag appeal often produce bud structures that trap moisture</li>
<li>Late flower, week 6-8, when buds are at their densest and you&#39;re tired of babysitting the dehumidifier</li></ul>

<h3 id="root-rot-triggers">Root Rot Triggers</h3>
<ul><li>Reservoir temperature above <strong>22C / 72F</strong> in hydro – this is the big one</li>
<li>Overwatering in any medium, especially with poor drainage</li>
<li>Low dissolved oxygen in the root zone</li>
<li>Contaminated medium or tools (reusing coco without sterilizing, dirty res)</li>
<li>Dead organic matter sitting in the reservoir</li></ul>

<h3 id="the-60-22-rule">The 60/22 Rule</h3>

<p>Two numbers. That&#39;s all you need to remember: flower room humidity below <strong>60%</strong>, reservoir temperature below <strong>22C / 72F</strong>. Not arbitrary – those are the inflection points where <em>Botrytis</em> and <em>Pythium</em> growth rates drop off hard. Stay below them and you&#39;re making it difficult for the pathogen. Go above and you&#39;re rolling out a welcome mat.</p>

<hr/>

<h2 id="catching-it-before-you-can">Catching It Before You Can</h2>

<p>With rot, speed is the whole game. Early symptoms look like <a href="https://blog.plantlab.ai/whats-wrong-with-my-cannabis-plant">half a dozen other things</a>, and most growers burn their response time treating the wrong problem.</p>

<p>PlantLab&#39;s vision model detects both bud rot and root rot as distinct conditions. You get a specific diagnosis with a confidence score, not “something might be wrong with your plant.” The model was trained exclusively on cannabis images – over 2,000 verified bud rot samples alone – across every severity stage from the first discolored leaf to full colonization.</p>

<p>If you&#39;re growing one plant, daily inspection is enough. But for a larger canopy – or if you&#39;re running cameras on a timer – a system that flags bud rot at 6 AM on a Tuesday before you walk into the room is worth having.</p>

<p>Try it free at <a href="https://plantlab.ai">plantlab.ai</a>.</p>

<hr/>

<h2 id="faq">FAQ</h2>

<h3 id="how-fast-does-bud-rot-spread">How fast does bud rot spread?</h3>

<p>Fast. An entire cola can go from first visible symptom to grey mush in 48-72 hours under favorable conditions (humidity above 60%, poor airflow). During that window, spores are landing on neighboring buds and starting new infections that won&#39;t show for days. Inspect your densest colas daily in late flower. There&#39;s no substitute.</p>

<h3 id="can-you-save-a-bud-with-rot">Can you save a bud with rot?</h3>

<p>No. Once <em>Botrytis</em> is inside the flower structure, that bud is done. Cut the affected cola plus a margin of healthy tissue around it, sterilize your tool between cuts, and get humidity down. Everything after detection is about containment, not cure.</p>

<h3 id="does-hydrogen-peroxide-cure-root-rot">Does hydrogen peroxide cure root rot?</h3>

<p>It kills <em>Pythium</em> on contact, but it also nukes every beneficial microbe in the root zone. Think of it as a reset button, not a treatment plan. Use it alongside temperature correction (below 22C / 72F) and better oxygenation. Once most of the roots are brown and slimy, H2O2 won&#39;t save the plant – there&#39;s not enough healthy root mass left to recover from.</p>

<h3 id="why-does-my-plant-droop-even-though-the-soil-is-wet">Why does my plant droop even though the soil is wet?</h3>

<p>Rotting roots can&#39;t absorb water even when they&#39;re sitting in it. The plant wilts, you water more, the root zone stays waterlogged, and the pathogen thrives. If a plant droops and the medium is already wet, stop watering and check the roots.</p>

<h3 id="can-bud-rot-spread-to-other-plants">Can bud rot spread to other plants?</h3>

<p>Absolutely. <em>Botrytis cinerea</em> produces airborne spores, and disturbing an infected bud – touching it, cutting it, even a fan blowing across it – sends them into the air. They land on neighboring plants and start the cycle over. When you remove infected colas, work carefully and bag the tissue immediately. Some growers hit neighboring plants with a preventive fungicide application after removal, which isn&#39;t a bad idea.</p>

<hr/>

<h2 id="related-reading">Related reading</h2>
<ul><li><a href="https://blog.plantlab.ai/fungus-gnats-cannabis">Fungus Gnats on Cannabis: The Wet-Soil Pest That Looks Like Root Rot</a> – the pest whose larvae open the root wounds that root rot moves into</li>
<li><a href="https://blog.plantlab.ai/powdery-mildew-cannabis">Powdery Mildew on Cannabis: Visual Detection and Prevention</a> – the other major fungal disease, and the humidity conditions both share</li>
<li><a href="https://blog.plantlab.ai/whats-wrong-with-my-cannabis-plant">What&#39;s Wrong With My Cannabis Plant? A Visual Diagnosis Guide</a> – the full symptom-to-cause quick reference</li></ul>
]]></content:encoded>
      <guid>https://blog.plantlab.ai/bud-rot-root-rot-cannabis</guid>
      <pubDate>Tue, 21 Jul 2026 17:34:18 +0000</pubDate>
    </item>
    <item>
      <title>Spider Mites on Cannabis: Early Detection Before the Damage</title>
      <link>https://blog.plantlab.ai/spider-mites-cannabis?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[Spider mites on cannabis - by the time you see webbing, you&#39;re already losing&#xA;&#xA;You adjusted your cal-mag for two weeks. The yellowing got worse. Then you saw the webbing.&#xA;&#xA;That&#39;s how most growers discover spider mites - not when the problem starts, but when it&#39;s already out of control. The early damage looks so much like a nutrient deficiency that your first instinct is to adjust the feed. Meanwhile, a single female mite is producing thousands of descendants in a month.&#xA;&#xA;!--more--&#xA;&#xA;Spider mites are the most destructive pest in indoor cannabis cultivation. Not because they&#39;re hard to kill - they aren&#39;t, when caught early - but because their early symptoms mimic nutrient problems so convincingly that growers lose their detection window treating the wrong thing entirely.&#xA;&#xA;This guide covers visual identification at every stage, how to tell mite damage from a deficiency, and what actually works for treatment.&#xA;&#xA;---&#xA;&#xA;Quick Identification&#xA;&#xA;Spider mites on cannabis produce tiny yellow or white speckles (stippling) on upper leaf surfaces where mites feed from below. Unlike nutrient deficiencies - which cause broad, uniform color changes across leaves - stippling appears as distinct pinprick dots scattered irregularly across the leaf. The damage is caused by Tetranychus urticae (two-spotted spider mite), an arachnid that punctures individual plant cells and drains their contents. By the time webbing is visible, the colony has been feeding for weeks.&#xA;&#xA;Quick checklist:&#xA;Tiny yellow/white pinprick dots on upper leaf surface&#xA;Dots are irregular and scattered, not following veins&#xA;Leaf undersides show tiny moving specks (mites are 0.3-0.5mm)&#xA;Fine webbing between leaf tips or at branch junctions (advanced)&#xA;Damage starts on lower/inner canopy where airflow is poorest&#xA;Leaves eventually bronze, curl, and drop&#xA;&#xA;---&#xA;&#xA;Why Spider Mites Are So Hard to Catch&#xA;&#xA;They look like a nutrient deficiency&#xA;&#xA;The single most common spider mite mistake has nothing to do with treatment. It happens at identification.&#xA;&#xA;Early stippling - those tiny yellow dots where mites have punctured cells - looks like the beginning of a calcium deficiency or light stress. The dots are small, scattered, and appear on older growth first. A grower sees yellowing dots on lower leaves and reaches for the cal-mag bottle. Two weeks of feed adjustments later, the dots have spread, the plant looks worse, and then the webbing appears.&#xA;&#xA;This is not a knowledge failure. It&#39;s a pattern recognition problem. The visual difference between early mite stippling and early nutrient deficiency is subtle enough that experienced growers miss it regularly.&#xA;&#xA;Spider mites vs nutrient deficiency comparison chart&#xA;&#xA;| Feature | Spider Mite Stippling | Calcium Deficiency | Magnesium Deficiency |&#xA;|---------|----------------------|-------------------|---------------------|&#xA;| Pattern | Irregular pinprick dots | Irregular brown spots | Interveinal yellowing |&#xA;| Distribution | Scattered randomly across leaf | Concentrated on newer growth | Starts on older leaves |&#xA;| Symmetry | Asymmetric, random | Roughly symmetric | Symmetric between veins |&#xA;| Leaf underside | Tiny mites or eggs visible | Clean | Clean |&#xA;| Texture | Leaf feels slightly rough/gritty | Spots may feel crispy | Leaf stays smooth |&#xA;| Progression | Dots multiply, never merge into bands | Spots expand and merge | Yellowing expands between veins |&#xA;| Touch test | Gritty feel from mite debris | Normal | Normal |&#xA;&#xA;The diagnostic key: flip the leaf over. Nutrient deficiencies don&#39;t leave anything on the underside. Spider mites leave everything there - adults, eggs, shed skins, webbing. A 10x loupe makes this definitive, but even a phone camera zoomed in on the leaf underside will show the difference.&#xA;&#xA;They breed fast enough to outrun your diagnosis&#xA;&#xA;Spider mites reproduce faster than almost any pest a cannabis grower will encounter.&#xA;&#xA;Generation time: 7 days at 30°C (86°F). Egg to egg-laying adult in one week.&#xA;Reproductive rate: A single female lays up to 100 eggs. Her daughters start laying within a week.&#xA;Population math: One mite becomes thousands in a month at optimal temperatures. Two months of unchecked growth reaches millions.&#xA;&#xA;This is exponential growth in the literal sense. The population you can&#39;t see on Monday is visible by Friday and webbing by the following Monday. The detection window - the gap between &#34;early enough to treat easily&#34; and &#34;too late for simple solutions&#34; - is approximately 5-7 days.&#xA;&#xA;Every day of misdiagnosis as a nutrient issue is a day lost in that window.&#xA;&#xA;---&#xA;&#xA;Visual Symptoms by Stage&#xA;&#xA;Spider mite infestation timeline - 4 stages from invisible to severe&#xA;&#xA;Days 1-7: Invisible Phase&#xA;&#xA;Mites have arrived but the colony is small. Fewer than 10 adults on the plant. No visible damage to the naked eye.&#xA;&#xA;What to look for: Nothing you can see without magnification. Preventive inspection with a 10x loupe on leaf undersides is the only detection method during this phase - or an AI that can catch the earliest stippling pattern in a leaf photo before your eye does.&#xA;&#xA;Days 7-14: Early Stippling&#xA;&#xA;What you see:&#xA;Scattered yellow-white dots on upper leaf surfaces&#xA;Dots are pinprick-sized, irregular spacing&#xA;Lower and inner canopy leaves affected first&#xA;Leaves may appear slightly dull or dusty&#xA;&#xA;This is the critical detection window. The damage is visible but the population is still manageable. Treat now and you win. Wait, and you&#39;re chasing exponential growth.&#xA;&#xA;What growers confuse it with: Calcium deficiency, magnesium deficiency, early light stress, pH fluctuation damage. The distinguishing test: check the leaf underside with a loupe or zoomed phone camera.&#xA;&#xA;Days 14-21: Moderate Infestation&#xA;&#xA;What you see:&#xA;Stippling thickens into visible patches of yellow/bronze discoloration&#xA;Fine webbing appears at leaf tips and where leaves meet stems&#xA;Leaf edges may curl upward&#xA;Multiple plants now show symptoms (airborne spread via &#34;ballooning&#34; on silk threads)&#xA;&#xA;Webbing marks the transition from &#34;problem&#34; to &#34;crisis.&#34; The silk isn&#39;t just housing - it protects colonies from predators and spray treatments. Once webs are established, contact sprays have to penetrate the silk to reach the mites.&#xA;&#xA;Days 21+: Severe Infestation&#xA;&#xA;What you see:&#xA;Dense webbing covering bud sites, connecting leaves&#xA;Leaves are bronzed, curled, and dropping&#xA;Mites visible as tiny moving dots on webbing&#xA;Plant growth has visibly slowed or stopped&#xA;Webbing on flowers makes bud unusable&#xA;&#xA;At this stage, the plant is losing more photosynthetic capacity than it can replace. During flower, this level of infestation is often a total crop loss for affected plants. The mites are feeding on sugar leaves and bract tissue, leaving webbing embedded in the flower structure. Even if you kill every mite, the webbing and fecal matter remain.&#xA;&#xA;---&#xA;&#xA;Where to Look: Detection Hotspots&#xA;&#xA;Spider mites prefer warm, dry, still air - the conditions that exist in the center and lower canopy of most indoor grows.&#xA;&#xA;Check first:&#xA;Undersides of lower and inner canopy leaves&#xA;Where two leaves overlap (creates still-air microclimate)&#xA;Near intake vents (common entry point)&#xA;Any plant closest to heat sources&#xA;&#xA;Check second:&#xA;Leaf undersides on middle canopy&#xA;Branch junctions where stems create sheltered pockets&#xA;Nearby houseplants, clones, or recently introduced plant material&#xA;&#xA;High-risk conditions:&#xA;Temperature above 27°C (80°F) and rising&#xA;Humidity below 40% RH&#xA;Stagnant air in lower canopy&#xA;New clones or plants introduced without quarantine&#xA;Adjacent rooms or gardens with ornamental plants&#xA;&#xA;One fact most growers don&#39;t realize: spider mites travel on clothing, pets, and skin. If you&#39;ve been in a garden with mites and walk into your grow room, you may be the vector. This is why quarantine protocols matter even for indoor-only grows.&#xA;&#xA;---&#xA;&#xA;They&#39;re arachnids, not insects&#xA;&#xA;This matters more than you&#39;d think. Spider mites aren&#39;t insects. They&#39;re arachnids - closer to ticks and spiders than to aphids or thrips. A lot of insecticides just don&#39;t work on them, and growers figure this out the expensive way: they buy whatever pest spray the grow shop recommends, apply it twice a week for a month, and the mites keep spreading.&#xA;&#xA;If a product label says &#34;insecticide&#34; but doesn&#39;t specifically list mites or arachnids, it probably won&#39;t work. You need a miticide (specifically targets mites) or a broad-spectrum acaricide (targets arachnids generally). Some biologicals and organic options work by physical mechanisms - suffocation, desiccation - that don&#39;t depend on the pest&#39;s taxonomy. These are often the safest first-line choice.&#xA;&#xA;---&#xA;&#xA;Treatment Strategies&#xA;&#xA;They evolve faster than you can spray&#xA;&#xA;Spider mites develop pesticide resistance at a rate that makes most agricultural pests look slow. With a 7-day generation cycle, resistance emerges in weeks, not seasons. Some strains of T. urticae are resistant to dozens of active ingredients simultaneously.&#xA;&#xA;Worse: some pesticides cause &#34;mite flaring&#34; - the surviving mites respond to the chemical stress by increasing their reproductive rate by up to 30%. The intuitive response of &#34;spray harder, spray more&#34; can accelerate the infestation rather than control it.&#xA;&#xA;Single-product treatment strategies fail. Always rotate between different modes of action.&#xA;&#xA;During Vegetative Growth&#xA;&#xA;Immediate response (first 48 hours):&#xA;Isolate affected plants if possible&#xA;Remove and dispose of heavily infested leaves (bag them, don&#39;t compost)&#xA;Spray leaf undersides thoroughly with a contact miticide or biological&#xA;&#xA;Biological controls:&#xA;Phytoseiulus persimilis - predatory mite that feeds exclusively on spider mites. Effective in vegetative growth and early flower. Needs humidity above 60% to thrive.&#xA;Neoseiulus californicus - predatory mite that tolerates lower humidity and also eats thrips. Better for dry grow rooms.&#xA;Amblyseius andersoni - generalist predatory mite, survives without prey by eating pollen. Good for preventive releases.&#xA;&#xA;Organic sprays (moderate infestations):&#xA;Neem oil (azadirachtin) - disrupts feeding and reproduction. Apply to leaf undersides only. Do not use in flower - affects taste and may not fully degrade.&#xA;Insecticidal soap (potassium salts of fatty acids) - kills on contact by desiccation. Must directly contact the mite. Repeat every 3-5 days for 3 applications to catch new hatchlings.&#xA;Spinosad - organic-approved, effective on thrips but weak against mites on its own. Can supplement a rotation but shouldn&#39;t be a primary miticide.&#xA;&#xA;Spray rotation protocol:&#xA;Week 1: Product A (e.g., insecticidal soap)&#xA;Week 2: Product B (e.g., neem oil)&#xA;Week 3: Product A again (or a different miticide)&#xA;Never use the same active ingredient twice in a row&#xA;&#xA;During flower&#xA;&#xA;This is where most growers panic, and for good reason. During flower, almost everything that kills mites also ruins buds.&#xA;&#xA;Safe in flower:&#xA;Predatory mites (biological control - no residue, no taste impact)&#xA;Water rinse with slightly elevated pressure (dislodges mites physically, must reach undersides)&#xA;Cold snap trick: drop temperature to 15°C (60°F) for 3 days if possible. Mite reproduction nearly stops below 18°C (65°F). This buys time for predatory mites to work.&#xA;&#xA;Avoid in flower:&#xA;Neem oil (taste contamination, doesn&#39;t fully degrade on flower tissue)&#xA;Pyrethrin sprays (residue on buds)&#xA;Sulfur (burns trichomes, affects terpenes)&#xA;Any systemic product (absorbed into plant tissue including flower)&#xA;&#xA;If webbing is on buds: The honest answer is that those buds are compromised. Webbing contains fecal matter and shed mite skins that don&#39;t wash off. You can salvage the plant by removing affected flowers and protecting remaining buds with predatory mites, but heavily webbed buds should be discarded.&#xA;&#xA;---&#xA;&#xA;Prevention&#xA;&#xA;A few euros spent preventing mites saves hundreds in lost crop. Prevention beats treatment every time, especially with a pest that breeds this fast.&#xA;&#xA;Environmental controls:&#xA;Keep humidity above 50% RH during veg (mites thrive in dry conditions)&#xA;Ensure airflow reaches the lower canopy (oscillating fans, open plant structure)&#xA;Run temperatures below 27°C (80°F) when possible&#xA;HEPA filter on intake if growing in an area with outdoor mite pressure&#xA;&#xA;Good habits:&#xA;Quarantine new plants for 7-14 days before introducing to your grow&#xA;Change clothes before entering grow room if you&#39;ve been in other gardens&#xA;Inspect leaf undersides weekly with a 10x loupe - make it routine, not reactive&#xA;Remove dead leaves and debris from the grow space (harboring sites)&#xA;Avoid overly dense canopy - defoliate lower growth that gets no light and creates still-air pockets&#xA;&#xA;Preemptive predators:&#xA;Release Amblyseius andersoni or N. californicus at transplant. These predatory mites establish a background population that intercepts spider mites before colonies form. Cost: roughly €20-30 per release for a small grow, every 4-6 weeks.&#xA;&#xA;---&#xA;&#xA;How AI detection changes the timeline&#xA;&#xA;The spider mite problem is a timing issue. The window between &#34;just arrived&#34; and &#34;exponential growth&#34; is about 5-7 days. Most growers catch mites after stippling is already obvious - right at the edge of that window, or past it.&#xA;&#xA;The main reason growers miss that window isn&#39;t inattention. Early stippling - those first scattered yellow dots where mites have punctured cells - looks almost identical to the start of a calcium or magnesium deficiency. Same distribution, same size, same location on older growth. A grower sees the dots, checks pH, adjusts the feed, and waits a week for results. By the time the nutrient hypothesis is ruled out and a loupe comes out, mites have had 7-10 days of uncontested growth. At one generation per week, that adds up.&#xA;&#xA;PlantLab&#39;s model covers 31 cannabis conditions including spider mite damage. It catches the stippling pattern at the 10-dot stage, from a routine photo. Not a replacement for the loupe - nothing is - but it flags the pattern before you&#39;ve mentally filed it as &#34;probably cal-mag&#34; and moved on.&#xA;&#xA;Catching mites at day 7 instead of day 14 is the difference between wiping down some leaves and losing a crop.&#xA;&#xA;Free at plantlab.ai - 3 checks a day.&#xA;&#xA;---&#xA;&#xA;FAQ&#xA;&#xA;How do I tell spider mite damage from a nutrient deficiency?&#xA;Flip the leaf. Spider mite damage shows as scattered pinprick dots on top with mites, eggs, or webbing underneath. Nutrient deficiencies cause broader color changes with clean leaf undersides. A 10x loupe on the underside is the definitive test.&#xA;&#xA;Can I see spider mites without a magnifying glass?&#xA;Adults are barely visible to the naked eye (0.3-0.5mm) as tiny moving specks on leaf undersides. Eggs and juveniles are too small to see without magnification. By the time mites are easily visible, the colony is large. Use a loupe or phone camera zoom for early detection.&#xA;&#xA;How fast do spider mites spread between plants?&#xA;In optimal conditions (above 27°C / 80°F, below 40% RH), mites can move from one plant to adjacent plants within 24-48 hours. They also &#34;balloon&#34; on silk threads carried by air currents, reaching plants across a room. A single infested plant can become a room-wide problem in 5-10 days.&#xA;&#xA;Will neem oil get rid of spider mites?&#xA;Neem works as part of a rotation, not as a standalone. It disrupts feeding and reproduction but doesn&#39;t kill on contact, and mites build resistance to it quickly. Rotate with insecticidal soap and other modes of action. And never use it during flower - it doesn&#39;t come off.&#xA;&#xA;What kills spider mites instantly?&#xA;Insecticidal soap and pyrethrin kill on contact, but only what they touch. You&#39;ll miss eggs. Plan for 3 rounds over 2 weeks to catch hatching cycles.&#xA;&#xA;---&#xA;&#xA;Related reading&#xA;&#xA;Thrips on Cannabis: The Silver Streaks Growers Blame on Light - the other surface-scarring pest, and how to tell silver streaks from mite stippling&#xA;Powdery Mildew on Cannabis: Visual Detection and Prevention - the disease that spreads in the same still-air, low-humidity pockets mites love&#xA;What&#39;s Wrong With My Cannabis Plant? A Visual Diagnosis Guide - the full symptom-to-cause quick reference&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://i.snap.as/ToRuIwhg.png" alt="Spider mites on cannabis - by the time you see webbing, you&#39;re already losing"/></p>

<p>You adjusted your cal-mag for two weeks. The yellowing got worse. Then you saw the webbing.</p>

<p>That&#39;s how most growers discover spider mites – not when the problem starts, but when it&#39;s already out of control. The early damage looks so much like a nutrient deficiency that your first instinct is to adjust the feed. Meanwhile, a single female mite is producing thousands of descendants in a month.</p>



<p>Spider mites are the most destructive pest in indoor cannabis cultivation. Not because they&#39;re hard to kill – they aren&#39;t, when caught early – but because their early symptoms mimic nutrient problems so convincingly that growers lose their detection window treating the wrong thing entirely.</p>

<p>This guide covers visual identification at every stage, how to tell mite damage from a deficiency, and what actually works for treatment.</p>

<hr/>

<h2 id="quick-identification">Quick Identification</h2>

<p>Spider mites on cannabis produce tiny yellow or white speckles (stippling) on upper leaf surfaces where mites feed from below. Unlike nutrient deficiencies – which cause broad, uniform color changes across leaves – stippling appears as distinct pinprick dots scattered irregularly across the leaf. The damage is caused by <em>Tetranychus urticae</em> (two-spotted spider mite), an arachnid that punctures individual plant cells and drains their contents. By the time webbing is visible, the colony has been feeding for weeks.</p>

<p><strong>Quick checklist:</strong>
– Tiny yellow/white pinprick dots on upper leaf surface
– Dots are irregular and scattered, not following veins
– Leaf undersides show tiny moving specks (mites are 0.3-0.5mm)
– Fine webbing between leaf tips or at branch junctions (advanced)
– Damage starts on lower/inner canopy where airflow is poorest
– Leaves eventually bronze, curl, and drop</p>

<hr/>

<h2 id="why-spider-mites-are-so-hard-to-catch">Why Spider Mites Are So Hard to Catch</h2>

<h3 id="they-look-like-a-nutrient-deficiency">They look like a nutrient deficiency</h3>

<p>The single most common spider mite mistake has nothing to do with treatment. It happens at identification.</p>

<p>Early stippling – those tiny yellow dots where mites have punctured cells – looks like the beginning of a calcium deficiency or light stress. The dots are small, scattered, and appear on older growth first. A grower sees yellowing dots on lower leaves and reaches for the cal-mag bottle. Two weeks of feed adjustments later, the dots have spread, the plant looks worse, and then the webbing appears.</p>

<p>This is not a knowledge failure. It&#39;s a pattern recognition problem. The visual difference between early mite stippling and early nutrient deficiency is subtle enough that experienced growers miss it regularly.</p>

<p><img src="https://i.snap.as/pUOFI0Ky.png" alt="Spider mites vs nutrient deficiency comparison chart"/></p>

<table>
<thead>
<tr>
<th>Feature</th>
<th>Spider Mite Stippling</th>
<th>Calcium Deficiency</th>
<th>Magnesium Deficiency</th>
</tr>
</thead>

<tbody>
<tr>
<td>Pattern</td>
<td>Irregular pinprick dots</td>
<td>Irregular brown spots</td>
<td>Interveinal yellowing</td>
</tr>

<tr>
<td>Distribution</td>
<td>Scattered randomly across leaf</td>
<td>Concentrated on newer growth</td>
<td>Starts on older leaves</td>
</tr>

<tr>
<td>Symmetry</td>
<td>Asymmetric, random</td>
<td>Roughly symmetric</td>
<td>Symmetric between veins</td>
</tr>

<tr>
<td>Leaf underside</td>
<td>Tiny mites or eggs visible</td>
<td>Clean</td>
<td>Clean</td>
</tr>

<tr>
<td>Texture</td>
<td>Leaf feels slightly rough/gritty</td>
<td>Spots may feel crispy</td>
<td>Leaf stays smooth</td>
</tr>

<tr>
<td>Progression</td>
<td>Dots multiply, never merge into bands</td>
<td>Spots expand and merge</td>
<td>Yellowing expands between veins</td>
</tr>

<tr>
<td>Touch test</td>
<td>Gritty feel from mite debris</td>
<td>Normal</td>
<td>Normal</td>
</tr>
</tbody>
</table>

<p>The diagnostic key: <strong>flip the leaf over.</strong> Nutrient deficiencies don&#39;t leave anything on the underside. Spider mites leave everything there – adults, eggs, shed skins, webbing. A 10x loupe makes this definitive, but even a phone camera zoomed in on the leaf underside will show the difference.</p>

<h3 id="they-breed-fast-enough-to-outrun-your-diagnosis">They breed fast enough to outrun your diagnosis</h3>

<p>Spider mites reproduce faster than almost any pest a cannabis grower will encounter.</p>
<ul><li><strong>Generation time:</strong> 7 days at 30°C (86°F). Egg to egg-laying adult in one week.</li>
<li><strong>Reproductive rate:</strong> A single female lays up to 100 eggs. Her daughters start laying within a week.</li>
<li><strong>Population math:</strong> One mite becomes thousands in a month at optimal temperatures. Two months of unchecked growth reaches millions.</li></ul>

<p>This is exponential growth in the literal sense. The population you can&#39;t see on Monday is visible by Friday and webbing by the following Monday. The detection window – the gap between “early enough to treat easily” and “too late for simple solutions” – is approximately 5-7 days.</p>

<p>Every day of misdiagnosis as a nutrient issue is a day lost in that window.</p>

<hr/>

<h2 id="visual-symptoms-by-stage">Visual Symptoms by Stage</h2>

<p><img src="https://i.snap.as/fATTw5yv.png" alt="Spider mite infestation timeline - 4 stages from invisible to severe"/></p>

<h3 id="days-1-7-invisible-phase">Days 1-7: Invisible Phase</h3>

<p>Mites have arrived but the colony is small. Fewer than 10 adults on the plant. No visible damage to the naked eye.</p>

<p><strong>What to look for:</strong> Nothing you can see without magnification. Preventive inspection with a 10x loupe on leaf undersides is the only detection method during this phase – or an AI that can catch the earliest stippling pattern in a leaf photo before your eye does.</p>

<h3 id="days-7-14-early-stippling">Days 7-14: Early Stippling</h3>

<p><strong>What you see:</strong>
– Scattered yellow-white dots on upper leaf surfaces
– Dots are pinprick-sized, irregular spacing
– Lower and inner canopy leaves affected first
– Leaves may appear slightly dull or dusty</p>

<p>This is the critical detection window. The damage is visible but the population is still manageable. Treat now and you win. Wait, and you&#39;re chasing exponential growth.</p>

<p><strong>What growers confuse it with:</strong> Calcium deficiency, magnesium deficiency, early light stress, pH fluctuation damage. The distinguishing test: check the leaf underside with a loupe or zoomed phone camera.</p>

<h3 id="days-14-21-moderate-infestation">Days 14-21: Moderate Infestation</h3>

<p><strong>What you see:</strong>
– Stippling thickens into visible patches of yellow/bronze discoloration
– Fine webbing appears at leaf tips and where leaves meet stems
– Leaf edges may curl upward
– Multiple plants now show symptoms (airborne spread via “ballooning” on silk threads)</p>

<p>Webbing marks the transition from “problem” to “crisis.” The silk isn&#39;t just housing – it protects colonies from predators and spray treatments. Once webs are established, contact sprays have to penetrate the silk to reach the mites.</p>

<h3 id="days-21-severe-infestation">Days 21+: Severe Infestation</h3>

<p><strong>What you see:</strong>
– Dense webbing covering bud sites, connecting leaves
– Leaves are bronzed, curled, and dropping
– Mites visible as tiny moving dots on webbing
– Plant growth has visibly slowed or stopped
– Webbing on flowers makes bud unusable</p>

<p>At this stage, the plant is losing more photosynthetic capacity than it can replace. During flower, this level of infestation is often a total crop loss for affected plants. The mites are feeding on sugar leaves and bract tissue, leaving webbing embedded in the flower structure. Even if you kill every mite, the webbing and fecal matter remain.</p>

<hr/>

<h2 id="where-to-look-detection-hotspots">Where to Look: Detection Hotspots</h2>

<p>Spider mites prefer warm, dry, still air – the conditions that exist in the center and lower canopy of most indoor grows.</p>

<p><strong>Check first:</strong>
– Undersides of lower and inner canopy leaves
– Where two leaves overlap (creates still-air microclimate)
– Near intake vents (common entry point)
– Any plant closest to heat sources</p>

<p><strong>Check second:</strong>
– Leaf undersides on middle canopy
– Branch junctions where stems create sheltered pockets
– Nearby houseplants, clones, or recently introduced plant material</p>

<p><strong>High-risk conditions:</strong>
– Temperature above 27°C (80°F) and rising
– Humidity below 40% RH
– Stagnant air in lower canopy
– New clones or plants introduced without quarantine
– Adjacent rooms or gardens with ornamental plants</p>

<p>One fact most growers don&#39;t realize: spider mites travel on clothing, pets, and skin. If you&#39;ve been in a garden with mites and walk into your grow room, you may be the vector. This is why quarantine protocols matter even for indoor-only grows.</p>

<hr/>

<h2 id="they-re-arachnids-not-insects">They&#39;re arachnids, not insects</h2>

<p>This matters more than you&#39;d think. Spider mites aren&#39;t insects. They&#39;re arachnids – closer to ticks and spiders than to aphids or thrips. A lot of insecticides just don&#39;t work on them, and growers figure this out the expensive way: they buy whatever pest spray the grow shop recommends, apply it twice a week for a month, and the mites keep spreading.</p>

<p>If a product label says “insecticide” but doesn&#39;t specifically list mites or arachnids, it probably won&#39;t work. You need a miticide (specifically targets mites) or a broad-spectrum acaricide (targets arachnids generally). Some biologicals and organic options work by physical mechanisms – suffocation, desiccation – that don&#39;t depend on the pest&#39;s taxonomy. These are often the safest first-line choice.</p>

<hr/>

<h2 id="treatment-strategies">Treatment Strategies</h2>

<h3 id="they-evolve-faster-than-you-can-spray">They evolve faster than you can spray</h3>

<p>Spider mites develop pesticide resistance at a rate that makes most agricultural pests look slow. With a 7-day generation cycle, resistance emerges in weeks, not seasons. Some strains of <em>T. urticae</em> are resistant to dozens of active ingredients simultaneously.</p>

<p>Worse: some pesticides cause “mite flaring” – the surviving mites respond to the chemical stress by increasing their reproductive rate by up to 30%. The intuitive response of “spray harder, spray more” can accelerate the infestation rather than control it.</p>

<p>Single-product treatment strategies fail. Always rotate between different modes of action.</p>

<h3 id="during-vegetative-growth">During Vegetative Growth</h3>

<p><strong>Immediate response (first 48 hours):</strong>
1. Isolate affected plants if possible
2. Remove and dispose of heavily infested leaves (bag them, don&#39;t compost)
3. Spray leaf undersides thoroughly with a contact miticide or biological</p>

<p><strong>Biological controls:</strong>
– <em>Phytoseiulus persimilis</em> – predatory mite that feeds exclusively on spider mites. Effective in vegetative growth and early flower. Needs humidity above 60% to thrive.
– <em>Neoseiulus californicus</em> – predatory mite that tolerates lower humidity and also eats thrips. Better for dry grow rooms.
– <em>Amblyseius andersoni</em> – generalist predatory mite, survives without prey by eating pollen. Good for preventive releases.</p>

<p><strong>Organic sprays (moderate infestations):</strong>
– Neem oil (azadirachtin) – disrupts feeding and reproduction. Apply to leaf undersides only. Do not use in flower – affects taste and may not fully degrade.
– Insecticidal soap (potassium salts of fatty acids) – kills on contact by desiccation. Must directly contact the mite. Repeat every 3-5 days for 3 applications to catch new hatchlings.
– Spinosad – organic-approved, effective on thrips but weak against mites on its own. Can supplement a rotation but shouldn&#39;t be a primary miticide.</p>

<p><strong>Spray rotation protocol:</strong>
– Week 1: Product A (e.g., insecticidal soap)
– Week 2: Product B (e.g., neem oil)
– Week 3: Product A again (or a different miticide)
– Never use the same active ingredient twice in a row</p>

<h3 id="during-flower">During flower</h3>

<p>This is where most growers panic, and for good reason. During flower, almost everything that kills mites also ruins buds.</p>

<p><strong>Safe in flower:</strong>
– Predatory mites (biological control – no residue, no taste impact)
– Water rinse with slightly elevated pressure (dislodges mites physically, must reach undersides)
– Cold snap trick: drop temperature to 15°C (60°F) for 3 days if possible. Mite reproduction nearly stops below 18°C (65°F). This buys time for predatory mites to work.</p>

<p><strong>Avoid in flower:</strong>
– Neem oil (taste contamination, doesn&#39;t fully degrade on flower tissue)
– Pyrethrin sprays (residue on buds)
– Sulfur (burns trichomes, affects terpenes)
– Any systemic product (absorbed into plant tissue including flower)</p>

<p><strong>If webbing is on buds:</strong> The honest answer is that those buds are compromised. Webbing contains fecal matter and shed mite skins that don&#39;t wash off. You can salvage the plant by removing affected flowers and protecting remaining buds with predatory mites, but heavily webbed buds should be discarded.</p>

<hr/>

<h2 id="prevention">Prevention</h2>

<p>A few euros spent preventing mites saves hundreds in lost crop. Prevention beats treatment every time, especially with a pest that breeds this fast.</p>

<p><strong>Environmental controls:</strong>
– Keep humidity above 50% RH during veg (mites thrive in dry conditions)
– Ensure airflow reaches the lower canopy (oscillating fans, open plant structure)
– Run temperatures below 27°C (80°F) when possible
– HEPA filter on intake if growing in an area with outdoor mite pressure</p>

<p><strong>Good habits:</strong>
– Quarantine new plants for 7-14 days before introducing to your grow
– Change clothes before entering grow room if you&#39;ve been in other gardens
– Inspect leaf undersides weekly with a 10x loupe – make it routine, not reactive
– Remove dead leaves and debris from the grow space (harboring sites)
– Avoid overly dense canopy – defoliate lower growth that gets no light and creates still-air pockets</p>

<p><strong>Preemptive predators:</strong>
– Release <em>Amblyseius andersoni</em> or <em>N. californicus</em> at transplant. These predatory mites establish a background population that intercepts spider mites before colonies form. Cost: roughly €20-30 per release for a small grow, every 4-6 weeks.</p>

<hr/>

<h2 id="how-ai-detection-changes-the-timeline">How AI detection changes the timeline</h2>

<p>The spider mite problem is a timing issue. The window between “just arrived” and “exponential growth” is about 5-7 days. Most growers catch mites after stippling is already obvious – right at the edge of that window, or past it.</p>

<p>The main reason growers miss that window isn&#39;t inattention. Early stippling – those first scattered yellow dots where mites have punctured cells – looks almost identical to the start of a calcium or magnesium deficiency. Same distribution, same size, same location on older growth. A grower sees the dots, checks pH, adjusts the feed, and waits a week for results. By the time the nutrient hypothesis is ruled out and a loupe comes out, mites have had 7-10 days of uncontested growth. At one generation per week, that adds up.</p>

<p>PlantLab&#39;s model covers 31 cannabis conditions including spider mite damage. It catches the stippling pattern at the 10-dot stage, from a routine photo. Not a replacement for the loupe – nothing is – but it flags the pattern before you&#39;ve mentally filed it as “probably cal-mag” and moved on.</p>

<p>Catching mites at day 7 instead of day 14 is the difference between wiping down some leaves and losing a crop.</p>

<p>Free at <a href="https://plantlab.ai">plantlab.ai</a> – 3 checks a day.</p>

<hr/>

<h2 id="faq">FAQ</h2>

<p><strong>How do I tell spider mite damage from a nutrient deficiency?</strong>
Flip the leaf. Spider mite damage shows as scattered pinprick dots on top with mites, eggs, or webbing underneath. Nutrient deficiencies cause broader color changes with clean leaf undersides. A 10x loupe on the underside is the definitive test.</p>

<p><strong>Can I see spider mites without a magnifying glass?</strong>
Adults are barely visible to the naked eye (0.3-0.5mm) as tiny moving specks on leaf undersides. Eggs and juveniles are too small to see without magnification. By the time mites are easily visible, the colony is large. Use a loupe or phone camera zoom for early detection.</p>

<p><strong>How fast do spider mites spread between plants?</strong>
In optimal conditions (above 27°C / 80°F, below 40% RH), mites can move from one plant to adjacent plants within 24-48 hours. They also “balloon” on silk threads carried by air currents, reaching plants across a room. A single infested plant can become a room-wide problem in 5-10 days.</p>

<p><strong>Will neem oil get rid of spider mites?</strong>
Neem works as part of a rotation, not as a standalone. It disrupts feeding and reproduction but doesn&#39;t kill on contact, and mites build resistance to it quickly. Rotate with insecticidal soap and other modes of action. And never use it during flower – it doesn&#39;t come off.</p>

<p><strong>What kills spider mites instantly?</strong>
Insecticidal soap and pyrethrin kill on contact, but only what they touch. You&#39;ll miss eggs. Plan for 3 rounds over 2 weeks to catch hatching cycles.</p>

<hr/>

<h2 id="related-reading">Related reading</h2>
<ul><li><a href="https://blog.plantlab.ai/thrips-cannabis">Thrips on Cannabis: The Silver Streaks Growers Blame on Light</a> – the other surface-scarring pest, and how to tell silver streaks from mite stippling</li>
<li><a href="https://blog.plantlab.ai/powdery-mildew-cannabis">Powdery Mildew on Cannabis: Visual Detection and Prevention</a> – the disease that spreads in the same still-air, low-humidity pockets mites love</li>
<li><a href="https://blog.plantlab.ai/whats-wrong-with-my-cannabis-plant">What&#39;s Wrong With My Cannabis Plant? A Visual Diagnosis Guide</a> – the full symptom-to-cause quick reference</li></ul>
]]></content:encoded>
      <guid>https://blog.plantlab.ai/spider-mites-cannabis</guid>
      <pubDate>Tue, 21 Jul 2026 17:33:49 +0000</pubDate>
    </item>
    <item>
      <title>Fungus Gnats on Cannabis: The Wet-Soil Pest That Looks Like Root Rot</title>
      <link>https://blog.plantlab.ai/fungus-gnats-cannabis?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[Fungus gnats on cannabis - small dark flies over damp topsoil with translucent larvae in the medium, botanical illustration&#xA;&#xA;Every time you water, a little cloud of dark flies lifts off the soil, drifts around, and settles back down. They do not bite, they do not swarm the plant, and every forum thread calls them harmless. So you ignore them.&#xA;&#xA;Meanwhile the plant is drooping. Lower leaves are yellowing, growth has slowed, and nothing about your feed or pH explains it. You start treating for overwatering, maybe root rot - and the real cause is still hovering over the pot.&#xA;&#xA;!--more--&#xA;&#xA;Fungus gnats are the most under-estimated pest in indoor growing. The adults genuinely are close to harmless. The problem is their larvae: tiny translucent worms living in the top layer of wet medium, feeding on root hairs and opening wounds that let real root pathogens in. Because the above-ground symptoms look exactly like a watering or root problem, growers spend weeks fixing the wrong thing while the population builds.&#xA;&#xA;Clearing them is not hard once you know what you are looking at. Getting there is the hard part - past the assumption that the flies are harmless and the droop is just a watering mistake. Here is how to confirm it is gnats, rule out the problems they mimic, and break the cycle instead of swatting adults forever.&#xA;&#xA;---&#xA;&#xA;Quick identification&#xA;&#xA;Fungus gnats are small dark flies, 2-4mm, that stay near the surface of damp soil and fly weakly in short hops when disturbed. The damage is done by the larvae - translucent, thread-thin worms with a distinct black head - which live in the top 1-2cm of the medium and feed on fine roots.&#xA;&#xA;Quick checklist:&#xA;&#xA;Small dark flies hopping or drifting just above the topsoil&#xA;Flies lift off when you water or disturb the pot, then resettle&#xA;Adults stuck to yellow sticky cards placed near the medium&#xA;Translucent larvae in the top layer of soil when you scratch it back&#xA;Droop and lower-leaf yellowing that watering changes do not fix&#xA;Topsoil that stays wet for days between waterings&#xA;&#xA;The decisive check is simple: are there flies at the soil surface, and is the medium consistently wet? Two yeses is fungus gnats until proven otherwise. Scratch back the top centimetre and look for the larvae to confirm.&#xA;&#xA;---&#xA;&#xA;Why fungus gnats get misdiagnosed&#xA;&#xA;Fungus gnats damage roots, and root damage above ground looks like every other root problem: droop, slowed growth, yellowing that creeps up from the bottom. So the symptoms get filed as overwatering or root rot, and the flies get dismissed as a coincidence.&#xA;&#xA;The three conditions live in the same wet-soil neighbourhood, which is exactly why they get confused - and often why they show up together. Chronically wet medium is what invites gnats, drowns roots, and breeds rot all at once.&#xA;&#xA;| Feature | Fungus gnats | Overwatering | Root rot |&#xA;|---|---|---|---|&#xA;| Flies at soil surface | Yes | No | No |&#xA;| Wet, slow-draining medium | Yes | Yes | Usually |&#xA;| Wilt pattern | Yellowing, gradual droop | Puffy droop after watering | Persistent wilt, does not recover |&#xA;| Roots | Nibbled fine roots, entry wounds | Pale, waterlogged | Brown, slimy, foul-smelling |&#xA;| Fix direction | Dry back + kill larvae | Water less, improve drainage | Sterilize, improve oxygen, often too late |&#xA;&#xA;The tell that separates them from the rest is the flies. Overwatering and root rot do not put insects in the air over your pots. If you see the flies and the wet medium together, gnats are in the mix - and there may be more than one problem to solve.&#xA;&#xA;---&#xA;&#xA;What the larvae actually do&#xA;&#xA;Fungus gnat larvae in the top layer of wet soil among fine cannabis roots, with an adult fly above, botanical illustration&#xA;&#xA;The adults are a nuisance and a warning sign, not the damage. The larvae are the damage.&#xA;&#xA;Living in the wet top layer, fungus gnat larvae graze on root hairs and the fine feeder roots that do most of a plant&#39;s water and nutrient uptake. In a seedling or a young clone with a small root system, that alone can stall or kill the plant. In a larger plant the direct feeding matters less - but every feeding wound is an open door. Fungus gnats are a known vector for soil pathogens like Pythium and Fusarium, moving spores through the medium and giving them a wound to colonize. A gnat problem left alone often becomes a root-rot problem, which is a far worse thing to fix.&#xA;&#xA;This is why &#34;just live with a few flies&#34; is bad advice. The flies are the visible edge of a root-zone problem that gets more expensive the longer it runs.&#xA;&#xA;---&#xA;&#xA;Symptoms by stage&#xA;&#xA;Early&#xA;&#xA;A few small dark flies drifting over the topsoil&#xA;Adults showing up on yellow sticky cards near the pots&#xA;Plant still looks normal above ground&#xA;&#xA;Moderate&#xA;&#xA;Several flies per plant, lifting off whenever the soil is disturbed&#xA;Loss of vigor or slight droop the watering schedule does not explain&#xA;Lower leaves yellowing&#xA;Translucent larvae visible in the top 1-2cm when you scratch the surface&#xA;&#xA;Severe&#xA;&#xA;Heavy adult populations drifting through the whole room&#xA;Stunted growth and yellowing climbing up the canopy&#xA;Persistent wilt and weak structure that reads exactly like root rot&#xA;Actual root pathogens taking hold in the damaged root zone&#xA;&#xA;---&#xA;&#xA;Where fungus gnats come from&#xA;&#xA;Fungus gnats are a symptom of one thing above all: a topsoil that never dries out. Their eggs and larvae need constant surface moisture, so the root cause is almost always the watering routine or the medium.&#xA;&#xA;Topsoil staying wet between waterings&#xA;Overwatering, or a heavy, poorly draining medium that holds water at the surface&#xA;Peat or compost-heavy mixes, which arrive with organic matter gnats feed on and sometimes with eggs already in them&#xA;New medium contaminated with eggs or larvae&#xA;Open windows and doors letting adults migrate in from houseplants or outside&#xA;&#xA;Fix the moisture and you remove the habitat. Everything below is about killing the current generation while you do that.&#xA;&#xA;---&#xA;&#xA;Treatment&#xA;&#xA;The winning approach hits two targets at once: dry out the surface the larvae need, and kill the larvae and adults directly. Do one without the other and the population just rebuilds.&#xA;&#xA;Break the moisture cycle&#xA;&#xA;Let the top 2-3cm dry out fully between waterings. This alone kills eggs and young larvae and stops new eggs from surviving.&#xA;Water from the bottom where practical, keeping the surface dry while the roots still drink.&#xA;Improve drainage - amend heavy medium, and never let pots sit in standing runoff.&#xA;Add a dry barrier on top - a 1-2cm layer of coarse sand, or horticultural grit - so adults cannot reach the medium to lay eggs.&#xA;&#xA;Kill the current generation&#xA;&#xA;*Bti (Bacillus thuringiensis israelensis) - the standard larvae killer, sold as mosquito bits or dunks. Soak it into your water and drench the medium. It targets gnat and mosquito larvae specifically and is harmless to the plant.&#xA;Beneficial nematodes (Steinernema feltiae) - a living soil-drench control that hunts larvae in the medium. Strong choice for a persistent or recurring problem.&#xA;Yellow sticky cards flat or near the surface - these catch adults, cut the next generation, and double as your monitoring tool.&#xA;Hydrogen peroxide drench (diluted) - kills larvae on contact and adds oxygen to the root zone. A useful knock-down, though Bti and nematodes are better for lasting control.&#xA;&#xA;Predatory options like Hypoaspis* (soil-dwelling mites) also work well for growers who prefer a fully biological program.&#xA;&#xA;---&#xA;&#xA;Prevention&#xA;&#xA;Water on a dry-back, not a schedule - let the surface dry before the next water. This is the single most effective prevention there is.&#xA;Bottom-water to keep the top layer dry&#xA;Run yellow sticky cards continuously as an early-warning system, not just once a problem starts&#xA;Quarantine and inspect new medium and new plants before they enter the room&#xA;Keep the space clean - no standing water, no decaying plant matter, no algae on wet surfaces (gnats feed on it)&#xA;&#xA;---&#xA;&#xA;Telling gnats from the root problems they mimic&#xA;&#xA;Bti and a dry-back clear fungus gnats reliably. What trips growers up is getting to that point, because gnats, overwatering, and root rot all arrive together in wet soil and all droop and yellow the same way. Weeks go into treating a watering problem while the larvae keep working on the roots.&#xA;&#xA;PlantLab covers 31 cannabis conditions, fungus gnats among them, and returns a calibrated-confidence read from a single photo in about 18 milliseconds. Where flies are visible near the medium, it is built to call fungus gnats rather than let the droop get filed as generic overwatering - the misread that lets larvae keep working on the roots for another two weeks. It is not a substitute for scratching back the topsoil and looking - that is always the confirmation - but it points you at the soil surface early, before a gnat problem turns into a root-rot problem.&#xA;&#xA;Free at plantlab.ai - 3 checks a day.&#xA;&#xA;---&#xA;&#xA;Related reading&#xA;&#xA;Bud Rot and Root Rot on Cannabis: Detection Before It&#39;s Too Late - where a neglected gnat problem often ends up, and how to catch root rot before it spreads&#xA;What&#39;s Wrong With My Cannabis Plant? A Visual Diagnosis Guide - the full symptom-to-cause quick reference&#xA;Build an Autonomous Plant Health Monitor with Node-RED - tie a photo check and a dry-back rule together so wet-soil pests get caught automatically&#xA;&#xA;---&#xA;&#xA;FAQ&#xA;&#xA;Are fungus gnats harmful to cannabis?&#xA;The adult flies are mostly a nuisance, but the larvae feed on fine roots in the top layer of wet soil and open wounds that let root pathogens in. On seedlings and clones they can stall or kill the plant outright; on larger plants they set up the conditions for root rot. They are worth clearing early.&#xA;&#xA;How do I tell fungus gnats from root rot?&#xA;Fungus gnats put small dark flies in the air over your pots; root rot does not. Root rot shows brown, slimy, foul-smelling roots and a persistent wilt that watering never fixes. The two often occur together in chronically wet medium, so treat the gnats and check the roots.&#xA;&#xA;What kills fungus gnats fast?&#xA;Bti (mosquito bits or dunks) soaked into your water kills the larvae, and yellow sticky cards knock down the adults. Pair that with letting the top 2-3cm of soil dry out between waterings. For a stubborn or recurring case, add beneficial nematodes.&#xA;&#xA;Why do I keep getting fungus gnats?&#xA;Because the topsoil is staying wet. Their eggs and larvae need constant surface moisture, so the fix is a dry-back watering routine, better drainage, or bottom-watering. A dry surface removes the habitat and prevents the next generation.&#xA;&#xA;Do fungus gnats go away on their own?&#xA;Rarely, as long as the medium stays wet - they keep breeding in the moist surface layer. Drying out the top of the soil and running Bti or sticky cards is what actually ends the cycle.&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://i.snap.as/LOmVguhx.png" alt="Fungus gnats on cannabis - small dark flies over damp topsoil with translucent larvae in the medium, botanical illustration"/></p>

<p>Every time you water, a little cloud of dark flies lifts off the soil, drifts around, and settles back down. They do not bite, they do not swarm the plant, and every forum thread calls them harmless. So you ignore them.</p>

<p>Meanwhile the plant is drooping. Lower leaves are yellowing, growth has slowed, and nothing about your feed or pH explains it. You start treating for overwatering, maybe root rot – and the real cause is still hovering over the pot.</p>



<p>Fungus gnats are the most under-estimated pest in indoor growing. The adults genuinely are close to harmless. The problem is their larvae: tiny translucent worms living in the top layer of wet medium, feeding on root hairs and opening wounds that let real root pathogens in. Because the above-ground symptoms look exactly like a watering or root problem, growers spend weeks fixing the wrong thing while the population builds.</p>

<p>Clearing them is not hard once you know what you are looking at. Getting there is the hard part – past the assumption that the flies are harmless and the droop is just a watering mistake. Here is how to confirm it is gnats, rule out the problems they mimic, and break the cycle instead of swatting adults forever.</p>

<hr/>

<h2 id="quick-identification">Quick identification</h2>

<p>Fungus gnats are small dark flies, 2-4mm, that stay near the surface of damp soil and fly weakly in short hops when disturbed. The damage is done by the larvae – translucent, thread-thin worms with a distinct black head – which live in the top 1-2cm of the medium and feed on fine roots.</p>

<p><strong>Quick checklist:</strong></p>
<ul><li>Small dark flies hopping or drifting just above the topsoil</li>
<li>Flies lift off when you water or disturb the pot, then resettle</li>
<li>Adults stuck to yellow sticky cards placed near the medium</li>
<li>Translucent larvae in the top layer of soil when you scratch it back</li>
<li>Droop and lower-leaf yellowing that watering changes do not fix</li>
<li>Topsoil that stays wet for days between waterings</li></ul>

<p>The decisive check is simple: <strong>are there flies at the soil surface, and is the medium consistently wet?</strong> Two yeses is fungus gnats until proven otherwise. Scratch back the top centimetre and look for the larvae to confirm.</p>

<hr/>

<h2 id="why-fungus-gnats-get-misdiagnosed">Why fungus gnats get misdiagnosed</h2>

<p>Fungus gnats damage roots, and root damage above ground looks like every other root problem: droop, slowed growth, yellowing that creeps up from the bottom. So the symptoms get filed as overwatering or root rot, and the flies get dismissed as a coincidence.</p>

<p>The three conditions live in the same wet-soil neighbourhood, which is exactly why they get confused – and often why they show up together. Chronically wet medium is what invites gnats, drowns roots, and breeds rot all at once.</p>

<table>
<thead>
<tr>
<th>Feature</th>
<th>Fungus gnats</th>
<th>Overwatering</th>
<th>Root rot</th>
</tr>
</thead>

<tbody>
<tr>
<td>Flies at soil surface</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
</tr>

<tr>
<td>Wet, slow-draining medium</td>
<td>Yes</td>
<td>Yes</td>
<td>Usually</td>
</tr>

<tr>
<td>Wilt pattern</td>
<td>Yellowing, gradual droop</td>
<td>Puffy droop after watering</td>
<td>Persistent wilt, does not recover</td>
</tr>

<tr>
<td>Roots</td>
<td>Nibbled fine roots, entry wounds</td>
<td>Pale, waterlogged</td>
<td>Brown, slimy, foul-smelling</td>
</tr>

<tr>
<td>Fix direction</td>
<td>Dry back + kill larvae</td>
<td>Water less, improve drainage</td>
<td>Sterilize, improve oxygen, often too late</td>
</tr>
</tbody>
</table>

<p>The tell that separates them from the rest is the flies. Overwatering and root rot do not put insects in the air over your pots. If you see the flies and the wet medium together, gnats are in the mix – and there may be more than one problem to solve.</p>

<hr/>

<h2 id="what-the-larvae-actually-do">What the larvae actually do</h2>

<p><img src="https://i.snap.as/Zdhf7RRx.png" alt="Fungus gnat larvae in the top layer of wet soil among fine cannabis roots, with an adult fly above, botanical illustration"/></p>

<p>The adults are a nuisance and a warning sign, not the damage. The larvae are the damage.</p>

<p>Living in the wet top layer, fungus gnat larvae graze on root hairs and the fine feeder roots that do most of a plant&#39;s water and nutrient uptake. In a seedling or a young clone with a small root system, that alone can stall or kill the plant. In a larger plant the direct feeding matters less – but every feeding wound is an open door. Fungus gnats are a known vector for soil pathogens like <em>Pythium</em> and <em>Fusarium</em>, moving spores through the medium and giving them a wound to colonize. A gnat problem left alone often becomes a root-rot problem, which is a far worse thing to fix.</p>

<p>This is why “just live with a few flies” is bad advice. The flies are the visible edge of a root-zone problem that gets more expensive the longer it runs.</p>

<hr/>

<h2 id="symptoms-by-stage">Symptoms by stage</h2>

<h3 id="early">Early</h3>
<ul><li>A few small dark flies drifting over the topsoil</li>
<li>Adults showing up on yellow sticky cards near the pots</li>
<li>Plant still looks normal above ground</li></ul>

<h3 id="moderate">Moderate</h3>
<ul><li>Several flies per plant, lifting off whenever the soil is disturbed</li>
<li>Loss of vigor or slight droop the watering schedule does not explain</li>
<li>Lower leaves yellowing</li>
<li>Translucent larvae visible in the top 1-2cm when you scratch the surface</li></ul>

<h3 id="severe">Severe</h3>
<ul><li>Heavy adult populations drifting through the whole room</li>
<li>Stunted growth and yellowing climbing up the canopy</li>
<li>Persistent wilt and weak structure that reads exactly like root rot</li>
<li>Actual root pathogens taking hold in the damaged root zone</li></ul>

<hr/>

<h2 id="where-fungus-gnats-come-from">Where fungus gnats come from</h2>

<p>Fungus gnats are a symptom of one thing above all: <strong>a topsoil that never dries out.</strong> Their eggs and larvae need constant surface moisture, so the root cause is almost always the watering routine or the medium.</p>
<ul><li>Topsoil staying wet between waterings</li>
<li>Overwatering, or a heavy, poorly draining medium that holds water at the surface</li>
<li>Peat or compost-heavy mixes, which arrive with organic matter gnats feed on and sometimes with eggs already in them</li>
<li>New medium contaminated with eggs or larvae</li>
<li>Open windows and doors letting adults migrate in from houseplants or outside</li></ul>

<p>Fix the moisture and you remove the habitat. Everything below is about killing the current generation while you do that.</p>

<hr/>

<h2 id="treatment">Treatment</h2>

<p>The winning approach hits two targets at once: dry out the surface the larvae need, and kill the larvae and adults directly. Do one without the other and the population just rebuilds.</p>

<h3 id="break-the-moisture-cycle">Break the moisture cycle</h3>
<ul><li><strong>Let the top 2-3cm dry out fully</strong> between waterings. This alone kills eggs and young larvae and stops new eggs from surviving.</li>
<li><strong>Water from the bottom</strong> where practical, keeping the surface dry while the roots still drink.</li>
<li><strong>Improve drainage</strong> – amend heavy medium, and never let pots sit in standing runoff.</li>
<li><strong>Add a dry barrier</strong> on top – a 1-2cm layer of coarse sand, or horticultural grit – so adults cannot reach the medium to lay eggs.</li></ul>

<h3 id="kill-the-current-generation">Kill the current generation</h3>
<ul><li><strong>Bti (<em>Bacillus thuringiensis israelensis</em>)</strong> – the standard larvae killer, sold as mosquito bits or dunks. Soak it into your water and drench the medium. It targets gnat and mosquito larvae specifically and is harmless to the plant.</li>
<li><strong>Beneficial nematodes (<em>Steinernema feltiae</em>)</strong> – a living soil-drench control that hunts larvae in the medium. Strong choice for a persistent or recurring problem.</li>
<li><strong>Yellow sticky cards</strong> flat or near the surface – these catch adults, cut the next generation, and double as your monitoring tool.</li>
<li><strong>Hydrogen peroxide drench</strong> (diluted) – kills larvae on contact and adds oxygen to the root zone. A useful knock-down, though Bti and nematodes are better for lasting control.</li></ul>

<p>Predatory options like <em>Hypoaspis</em> (soil-dwelling mites) also work well for growers who prefer a fully biological program.</p>

<hr/>

<h2 id="prevention">Prevention</h2>
<ul><li><strong>Water on a dry-back, not a schedule</strong> – let the surface dry before the next water. This is the single most effective prevention there is.</li>
<li><strong>Bottom-water</strong> to keep the top layer dry</li>
<li><strong>Run yellow sticky cards continuously</strong> as an early-warning system, not just once a problem starts</li>
<li><strong>Quarantine and inspect new medium and new plants</strong> before they enter the room</li>
<li><strong>Keep the space clean</strong> – no standing water, no decaying plant matter, no algae on wet surfaces (gnats feed on it)</li></ul>

<hr/>

<h2 id="telling-gnats-from-the-root-problems-they-mimic">Telling gnats from the root problems they mimic</h2>

<p>Bti and a dry-back clear fungus gnats reliably. What trips growers up is getting to that point, because gnats, overwatering, and root rot all arrive together in wet soil and all droop and yellow the same way. Weeks go into treating a watering problem while the larvae keep working on the roots.</p>

<p>PlantLab covers 31 cannabis conditions, fungus gnats among them, and returns a calibrated-confidence read from a single photo in about 18 milliseconds. Where flies are visible near the medium, it is built to call fungus gnats rather than let the droop get filed as generic overwatering – the misread that lets larvae keep working on the roots for another two weeks. It is not a substitute for scratching back the topsoil and looking – that is always the confirmation – but it points you at the soil surface early, before a gnat problem turns into a root-rot problem.</p>

<p>Free at <a href="https://plantlab.ai">plantlab.ai</a> – 3 checks a day.</p>

<hr/>

<h2 id="related-reading">Related reading</h2>
<ul><li><a href="https://blog.plantlab.ai/bud-rot-root-rot-cannabis">Bud Rot and Root Rot on Cannabis: Detection Before It&#39;s Too Late</a> – where a neglected gnat problem often ends up, and how to catch root rot before it spreads</li>
<li><a href="https://blog.plantlab.ai/whats-wrong-with-my-cannabis-plant">What&#39;s Wrong With My Cannabis Plant? A Visual Diagnosis Guide</a> – the full symptom-to-cause quick reference</li>
<li><a href="https://blog.plantlab.ai/node-red-plantlab-automation">Build an Autonomous Plant Health Monitor with Node-RED</a> – tie a photo check and a dry-back rule together so wet-soil pests get caught automatically</li></ul>

<hr/>

<h2 id="faq">FAQ</h2>

<p><strong>Are fungus gnats harmful to cannabis?</strong>
The adult flies are mostly a nuisance, but the larvae feed on fine roots in the top layer of wet soil and open wounds that let root pathogens in. On seedlings and clones they can stall or kill the plant outright; on larger plants they set up the conditions for root rot. They are worth clearing early.</p>

<p><strong>How do I tell fungus gnats from root rot?</strong>
Fungus gnats put small dark flies in the air over your pots; root rot does not. Root rot shows brown, slimy, foul-smelling roots and a persistent wilt that watering never fixes. The two often occur together in chronically wet medium, so treat the gnats and check the roots.</p>

<p><strong>What kills fungus gnats fast?</strong>
Bti (mosquito bits or dunks) soaked into your water kills the larvae, and yellow sticky cards knock down the adults. Pair that with letting the top 2-3cm of soil dry out between waterings. For a stubborn or recurring case, add beneficial nematodes.</p>

<p><strong>Why do I keep getting fungus gnats?</strong>
Because the topsoil is staying wet. Their eggs and larvae need constant surface moisture, so the fix is a dry-back watering routine, better drainage, or bottom-watering. A dry surface removes the habitat and prevents the next generation.</p>

<p><strong>Do fungus gnats go away on their own?</strong>
Rarely, as long as the medium stays wet – they keep breeding in the moist surface layer. Drying out the top of the soil and running Bti or sticky cards is what actually ends the cycle.</p>
]]></content:encoded>
      <guid>https://blog.plantlab.ai/fungus-gnats-cannabis</guid>
      <pubDate>Tue, 21 Jul 2026 17:32:44 +0000</pubDate>
    </item>
    <item>
      <title>Thrips on Cannabis: The Silver Streaks Growers Blame on Light</title>
      <link>https://blog.plantlab.ai/thrips-cannabis?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[Thrips damage on cannabis - a fan leaf with metallic silver-bronze streaks and scattered dark fecal specks, botanical illustration&#xA;&#xA;A leaf catches the grow light and something looks off. Not yellow, not spotted - silver. Scratched, almost metallic, like someone dragged fine steel wool across the surface. The first guess is usually the lamp: too close, too bright, a little light burn on the tops.&#xA;&#xA;Then you notice the same sheen on a lower leaf that never gets direct light.&#xA;&#xA;!--more--&#xA;&#xA;That silver is not light stress. It is what thrips leave behind when they rasp open plant cells and drink the contents, and the metallic look is the emptied tissue reflecting light. Thrips are one of the easiest cannabis pests to misread, because the damage imitates two completely different problems - light burn from above and spider mites from below - and because the insects themselves are small, fast, and easy to miss on a quick look.&#xA;&#xA;This guide covers how to spot thrips early, how to separate them from the things they mimic, and what actually clears them - including the reason thrips are worth taking more seriously than their size suggests.&#xA;&#xA;---&#xA;&#xA;Quick identification&#xA;&#xA;Thrips are slim, torpedo-shaped insects roughly 1-2mm long. They feed by scraping the leaf surface open and sucking out the cell contents, which leaves silver or bronze streaks with tiny dark specks of frass (droppings) scattered through the damaged zones. Flick an affected leaf and you may see the adults dart or drop - they move fast for their size.&#xA;&#xA;Quick checklist:&#xA;&#xA;Silver, bronze, or scratched-looking streaks on the upper leaf surface&#xA;Tiny dark specks (frass) sitting inside the silvered areas&#xA;Pinpoint white scars where individual cells were punctured&#xA;Slim, fast-moving insects visible when you flick or shake the leaf&#xA;Pale yellow, translucent larvae on the leaf underside&#xA;No webbing anywhere - that rules the damage toward mites instead&#xA;&#xA;The single most useful tell is the combination of a metallic sheen plus dark specks. Light burn bleaches tissue but leaves nothing sitting on it. Spider mites leave pinprick dots and webbing but no silver sheen. Thrips leave both the sheen and the frass.&#xA;&#xA;---&#xA;&#xA;Why thrips get misdiagnosed&#xA;&#xA;The damage imitates light burn&#xA;&#xA;Silvering on upper leaves near the canopy top is the classic light-burn pattern, so that is the first thing most growers reach for. They raise the lamp, wait a week, and the silvering keeps spreading - now onto leaves nowhere near the light.&#xA;&#xA;Light burn bleaches evenly across the area under the lamp and stops where the intense light stops. Thrips damage is patchy, streaked, and shows up wherever the insects happen to be feeding, including shaded lower leaves. And light burn never comes with dark specks. If you see frass, it is not the lamp.&#xA;&#xA;The damage imitates spider mites&#xA;&#xA;Look closer and the story flips. Now the surface scarring looks like the early stippling of a spider mite infestation, so the neem comes out and the miticide rotation begins.&#xA;&#xA;The two do overlap, but they separate cleanly on two features. Spider mites leave round pinprick dots and, as populations grow, fine webbing at leaf tips and branch junctions. Thrips leave elongated silver streaks and no webbing at all. Flip the leaf: mites and their eggs cluster on the underside, while thrips larvae are larger, paler, and translucent-yellow.&#xA;&#xA;| Feature | Thrips | Spider mites | Light burn |&#xA;|---|---|---|---|&#xA;| Surface look | Silver/bronze streaks | Round pinprick dots | Uniform pale bleaching |&#xA;| Metallic sheen | Yes | No | No |&#xA;| Dark specks (frass) | Yes | No | No |&#xA;| Webbing | No | Yes (as it advances) | No |&#xA;| Where it starts | Anywhere thrips feed | Lower/inner canopy | Directly under the lamp |&#xA;| On the underside | Pale translucent larvae | Mites, eggs, shed skins | Nothing |&#xA;&#xA;---&#xA;&#xA;The reason thrips matter more than their size&#xA;&#xA;Most of the damage a small thrips population does is cosmetic - scarred leaves lose some photosynthetic surface, but a healthy plant shrugs off a light infestation. The real concern is what thrips carry.&#xA;&#xA;Thrips are among the most efficient virus vectors in horticulture. They transmit tospoviruses, including tomato spotted wilt virus (TSWV) and impatiens necrotic spot virus (INSV), by feeding on an infected plant and then on a healthy one. A plant virus has no cure - there is no spray, no flush, no correction. An infected plant stays infected, and thrips can move the virus through a room faster than you can treat the insects themselves.&#xA;&#xA;This is why thrips are worth catching early even when the leaf damage looks minor. You are not just protecting leaf area. You are cutting off a transmission route before it opens.&#xA;&#xA;---&#xA;&#xA;Visual symptoms by stage&#xA;&#xA;Thrips progression on cannabis - three stages from early streaks to heavy silvering and leaf drop&#xA;&#xA;Early&#xA;&#xA;Faint silver or bronze streaks on a few upper leaves&#xA;A handful of dark frass specks inside the streaks&#xA;Occasional slim insects when you flick the leaf&#xA;Plant otherwise looks healthy&#xA;&#xA;This is the window where treatment is easy and the virus risk is lowest. It is also the window most growers spend blaming the lamp.&#xA;&#xA;Moderate&#xA;&#xA;Silver-bronze patches across multiple leaves, top and bottom of the plant&#xA;Leaves starting to look scratched, frosted, or dull&#xA;Curling and slight distortion in the worst-hit zones&#xA;Pale translucent larvae visible on undersides&#xA;&#xA;Severe&#xA;&#xA;Whole leaves turned silvery-bronze with dead, necrotic patches&#xA;Early leaf drop&#xA;Stunted or distorted new growth, sometimes with viral symptoms (ring spots, mottling, wilting that watering does not fix)&#xA;Yield and quality loss if it reaches flower&#xA;&#xA;---&#xA;&#xA;Where thrips come from&#xA;&#xA;Thrips rarely appear out of nowhere. The common entry points:&#xA;&#xA;New clones or starts brought in without quarantine - the number-one route&#xA;Outdoor or greenhouse contamination carried in on plants, clothing, or air&#xA;Warm, dry conditions that let generations turn over quickly&#xA;Open vents or shared HVAC with an infested room&#xA;No monitoring cards, so an early population goes unseen&#xA;&#xA;One monitoring detail that trips growers up: thrips are drawn to blue sticky cards more strongly than the yellow ones most people default to. If you are watching for fungus gnats and whitefly with yellow cards but not running blue, you have a blind spot exactly where thrips would show up first.&#xA;&#xA;---&#xA;&#xA;Treatment&#xA;&#xA;First response&#xA;&#xA;Isolate affected plants if you can, and pull any heavily scarred leaves (bag them, do not compost)&#xA;Put out blue sticky cards near the canopy to gauge how many adults are flying&#xA;Start a contact treatment on leaf undersides, where larvae sit&#xA;&#xA;What works&#xA;&#xA;Spinosad - one of the more effective organic-approved options against thrips specifically. Rotate it rather than leaning on it every time, since thrips can build resistance.&#xA;Neem oil (azadirachtin) - disrupts feeding and molting. Apply to undersides. Keep it out of flower - it affects taste and does not fully degrade on flower tissue.&#xA;Insecticidal soap - kills on contact by desiccation, so coverage has to be thorough. Repeat every few days to catch newly hatched larvae.&#xA;Predatory mites - Amblyseius cucumeris and A. swirskii hunt thrips larvae and are the cleanest option for a preventive or in-flower approach, since they leave no residue.&#xA;&#xA;Thrips spend part of their life cycle as pupae in the growing medium, out of reach of foliar sprays. That is why a single spray never finishes the job and why pairing a foliar treatment with soil-level control (beneficial nematodes, or predators that patrol the medium) closes the loop.&#xA;&#xA;In flower&#xA;&#xA;The rules mirror any pest during bloom: sprays that leave residue or affect taste come off the table. Predatory mites and blue-card monitoring are the safe path. If viral symptoms have appeared, be realistic - an infected plant will not recover, and keeping it near healthy plants only extends the thrips&#39; reach.&#xA;&#xA;---&#xA;&#xA;Prevention&#xA;&#xA;Quarantine every new clone or plant for 7-14 days and inspect undersides before it joins the room&#xA;Run blue sticky cards continuously, not just once a problem starts - they are your early-warning system&#xA;Keep the environment out of the warm-and-dry zone thrips prefer where your other targets allow&#xA;Inspect the upper and lower canopy weekly - a quick leaf-flick test takes seconds&#xA;Consider preventive predators (A. cucumeris) if you have had thrips before or bring in outside plant material regularly&#xA;&#xA;---&#xA;&#xA;Catching the pattern before you blame the lamp&#xA;&#xA;Thrips damage is a diagnosis problem before it is a pest problem. The silver sheen reads as light burn, then as spider mites, and each wrong guess costs days - days in which a virus-carrying population keeps feeding and spreading.&#xA;&#xA;PlantLab covers 31 cannabis conditions, thrips among them, and returns a calibrated-confidence read from a single leaf photo in about 18 milliseconds. It is built to flag the silver-streak-plus-specks pattern as thrips rather than let it sit in the &#34;probably the light&#34; pile while the population grows. It does not replace a close look with a loupe - nothing does - but it puts a name on the pattern early, which is exactly where thrips are cheapest to deal with.&#xA;&#xA;Free at plantlab.ai - 3 checks a day.&#xA;&#xA;---&#xA;&#xA;Related reading&#xA;&#xA;Spider Mites on Cannabis: Early Detection Before the Damage - the pest thrips are most often confused with, and how to tell the pinprick-and-webbing pattern from silver streaks&#xA;What&#39;s Wrong With My Cannabis Plant? A Visual Diagnosis Guide - the full symptom-to-cause quick reference&#xA;Build an Autonomous Plant Health Monitor with Node-RED - automate early pest detection so a photo check happens on a schedule, not after the damage shows&#xA;&#xA;---&#xA;&#xA;FAQ&#xA;&#xA;How do I tell thrips from spider mites?&#xA;Thrips leave elongated silver or bronze streaks with dark frass specks and no webbing. Spider mites leave round pinprick dots and, as they spread, fine webbing at leaf tips and branch junctions. Flip the leaf: mites and their eggs sit on the underside, while thrips leave pale, translucent larvae.&#xA;&#xA;Are thrips silver marks the same as light burn?&#xA;No. Light burn bleaches tissue evenly directly under the lamp and leaves nothing sitting on the surface. Thrips damage is streaked and patchy, shows up on shaded lower leaves too, and comes with dark specks of frass. If you see the specks, it is not the light.&#xA;&#xA;Do thrips ruin a cannabis crop?&#xA;A light infestation is mostly cosmetic leaf scarring. The bigger risk is that thrips transmit plant viruses such as TSWV and INSV, which have no cure. Catching them early matters more for the virus risk than for the leaf damage itself.&#xA;&#xA;What kills thrips on cannabis?&#xA;Spinosad is one of the most effective organic options, backed by neem oil and insecticidal soap on leaf undersides, and predatory mites (Amblyseius cucumeris or swirskii) for a residue-free approach. Because thrips pupate in the soil, pair foliar sprays with soil-level control and repeat over two to three weeks.&#xA;&#xA;Why are my sticky cards not catching thrips?&#xA;Thrips prefer blue sticky cards over the yellow ones most growers use for gnats and whitefly. If you are only running yellow, add blue cards near the canopy for a true early-warning signal.&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://i.snap.as/o0bLPHXv.png" alt="Thrips damage on cannabis - a fan leaf with metallic silver-bronze streaks and scattered dark fecal specks, botanical illustration"/></p>

<p>A leaf catches the grow light and something looks off. Not yellow, not spotted – silver. Scratched, almost metallic, like someone dragged fine steel wool across the surface. The first guess is usually the lamp: too close, too bright, a little light burn on the tops.</p>

<p>Then you notice the same sheen on a lower leaf that never gets direct light.</p>



<p>That silver is not light stress. It is what thrips leave behind when they rasp open plant cells and drink the contents, and the metallic look is the emptied tissue reflecting light. Thrips are one of the easiest cannabis pests to misread, because the damage imitates two completely different problems – light burn from above and spider mites from below – and because the insects themselves are small, fast, and easy to miss on a quick look.</p>

<p>This guide covers how to spot thrips early, how to separate them from the things they mimic, and what actually clears them – including the reason thrips are worth taking more seriously than their size suggests.</p>

<hr/>

<h2 id="quick-identification">Quick identification</h2>

<p>Thrips are slim, torpedo-shaped insects roughly 1-2mm long. They feed by scraping the leaf surface open and sucking out the cell contents, which leaves silver or bronze streaks with tiny dark specks of frass (droppings) scattered through the damaged zones. Flick an affected leaf and you may see the adults dart or drop – they move fast for their size.</p>

<p><strong>Quick checklist:</strong></p>
<ul><li>Silver, bronze, or scratched-looking streaks on the upper leaf surface</li>
<li>Tiny dark specks (frass) sitting inside the silvered areas</li>
<li>Pinpoint white scars where individual cells were punctured</li>
<li>Slim, fast-moving insects visible when you flick or shake the leaf</li>
<li>Pale yellow, translucent larvae on the leaf underside</li>
<li>No webbing anywhere – that rules the damage toward mites instead</li></ul>

<p>The single most useful tell is the combination of a <strong>metallic sheen plus dark specks</strong>. Light burn bleaches tissue but leaves nothing sitting on it. Spider mites leave pinprick dots and webbing but no silver sheen. Thrips leave both the sheen and the frass.</p>

<hr/>

<h2 id="why-thrips-get-misdiagnosed">Why thrips get misdiagnosed</h2>

<h3 id="the-damage-imitates-light-burn">The damage imitates light burn</h3>

<p>Silvering on upper leaves near the canopy top is the classic light-burn pattern, so that is the first thing most growers reach for. They raise the lamp, wait a week, and the silvering keeps spreading – now onto leaves nowhere near the light.</p>

<p>Light burn bleaches evenly across the area under the lamp and stops where the intense light stops. Thrips damage is patchy, streaked, and shows up wherever the insects happen to be feeding, including shaded lower leaves. And light burn never comes with dark specks. If you see frass, it is not the lamp.</p>

<h3 id="the-damage-imitates-spider-mites">The damage imitates spider mites</h3>

<p>Look closer and the story flips. Now the surface scarring looks like the early stippling of a spider mite infestation, so the neem comes out and the miticide rotation begins.</p>

<p>The two do overlap, but they separate cleanly on two features. Spider mites leave round pinprick dots and, as populations grow, fine webbing at leaf tips and branch junctions. Thrips leave elongated silver streaks and no webbing at all. Flip the leaf: mites and their eggs cluster on the underside, while thrips larvae are larger, paler, and translucent-yellow.</p>

<table>
<thead>
<tr>
<th>Feature</th>
<th>Thrips</th>
<th>Spider mites</th>
<th>Light burn</th>
</tr>
</thead>

<tbody>
<tr>
<td>Surface look</td>
<td>Silver/bronze streaks</td>
<td>Round pinprick dots</td>
<td>Uniform pale bleaching</td>
</tr>

<tr>
<td>Metallic sheen</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
</tr>

<tr>
<td>Dark specks (frass)</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
</tr>

<tr>
<td>Webbing</td>
<td>No</td>
<td>Yes (as it advances)</td>
<td>No</td>
</tr>

<tr>
<td>Where it starts</td>
<td>Anywhere thrips feed</td>
<td>Lower/inner canopy</td>
<td>Directly under the lamp</td>
</tr>

<tr>
<td>On the underside</td>
<td>Pale translucent larvae</td>
<td>Mites, eggs, shed skins</td>
<td>Nothing</td>
</tr>
</tbody>
</table>

<hr/>

<h2 id="the-reason-thrips-matter-more-than-their-size">The reason thrips matter more than their size</h2>

<p>Most of the damage a small thrips population does is cosmetic – scarred leaves lose some photosynthetic surface, but a healthy plant shrugs off a light infestation. The real concern is what thrips carry.</p>

<p>Thrips are among the most efficient virus vectors in horticulture. They transmit tospoviruses, including tomato spotted wilt virus (TSWV) and impatiens necrotic spot virus (INSV), by feeding on an infected plant and then on a healthy one. A plant virus has no cure – there is no spray, no flush, no correction. An infected plant stays infected, and thrips can move the virus through a room faster than you can treat the insects themselves.</p>

<p>This is why thrips are worth catching early even when the leaf damage looks minor. You are not just protecting leaf area. You are cutting off a transmission route before it opens.</p>

<hr/>

<h2 id="visual-symptoms-by-stage">Visual symptoms by stage</h2>

<p><img src="https://i.snap.as/fd48KINt.png" alt="Thrips progression on cannabis - three stages from early streaks to heavy silvering and leaf drop"/></p>

<h3 id="early">Early</h3>
<ul><li>Faint silver or bronze streaks on a few upper leaves</li>
<li>A handful of dark frass specks inside the streaks</li>
<li>Occasional slim insects when you flick the leaf</li>
<li>Plant otherwise looks healthy</li></ul>

<p>This is the window where treatment is easy and the virus risk is lowest. It is also the window most growers spend blaming the lamp.</p>

<h3 id="moderate">Moderate</h3>
<ul><li>Silver-bronze patches across multiple leaves, top and bottom of the plant</li>
<li>Leaves starting to look scratched, frosted, or dull</li>
<li>Curling and slight distortion in the worst-hit zones</li>
<li>Pale translucent larvae visible on undersides</li></ul>

<h3 id="severe">Severe</h3>
<ul><li>Whole leaves turned silvery-bronze with dead, necrotic patches</li>
<li>Early leaf drop</li>
<li>Stunted or distorted new growth, sometimes with viral symptoms (ring spots, mottling, wilting that watering does not fix)</li>
<li>Yield and quality loss if it reaches flower</li></ul>

<hr/>

<h2 id="where-thrips-come-from">Where thrips come from</h2>

<p>Thrips rarely appear out of nowhere. The common entry points:</p>
<ul><li><strong>New clones or starts brought in without quarantine</strong> – the number-one route</li>
<li><strong>Outdoor or greenhouse contamination</strong> carried in on plants, clothing, or air</li>
<li><strong>Warm, dry conditions</strong> that let generations turn over quickly</li>
<li><strong>Open vents or shared HVAC</strong> with an infested room</li>
<li><strong>No monitoring cards</strong>, so an early population goes unseen</li></ul>

<p>One monitoring detail that trips growers up: thrips are drawn to <strong>blue</strong> sticky cards more strongly than the yellow ones most people default to. If you are watching for fungus gnats and whitefly with yellow cards but not running blue, you have a blind spot exactly where thrips would show up first.</p>

<hr/>

<h2 id="treatment">Treatment</h2>

<h3 id="first-response">First response</h3>
<ol><li>Isolate affected plants if you can, and pull any heavily scarred leaves (bag them, do not compost)</li>
<li>Put out blue sticky cards near the canopy to gauge how many adults are flying</li>
<li>Start a contact treatment on leaf undersides, where larvae sit</li></ol>

<h3 id="what-works">What works</h3>
<ul><li><strong>Spinosad</strong> – one of the more effective organic-approved options against thrips specifically. Rotate it rather than leaning on it every time, since thrips can build resistance.</li>
<li><strong>Neem oil (azadirachtin)</strong> – disrupts feeding and molting. Apply to undersides. Keep it out of flower – it affects taste and does not fully degrade on flower tissue.</li>
<li><strong>Insecticidal soap</strong> – kills on contact by desiccation, so coverage has to be thorough. Repeat every few days to catch newly hatched larvae.</li>
<li><strong>Predatory mites</strong> – <em>Amblyseius cucumeris</em> and <em>A. swirskii</em> hunt thrips larvae and are the cleanest option for a preventive or in-flower approach, since they leave no residue.</li></ul>

<p>Thrips spend part of their life cycle as pupae in the growing medium, out of reach of foliar sprays. That is why a single spray never finishes the job and why pairing a foliar treatment with soil-level control (beneficial nematodes, or predators that patrol the medium) closes the loop.</p>

<h3 id="in-flower">In flower</h3>

<p>The rules mirror any pest during bloom: sprays that leave residue or affect taste come off the table. Predatory mites and blue-card monitoring are the safe path. If viral symptoms have appeared, be realistic – an infected plant will not recover, and keeping it near healthy plants only extends the thrips&#39; reach.</p>

<hr/>

<h2 id="prevention">Prevention</h2>
<ul><li><strong>Quarantine every new clone or plant</strong> for 7-14 days and inspect undersides before it joins the room</li>
<li><strong>Run blue sticky cards</strong> continuously, not just once a problem starts – they are your early-warning system</li>
<li><strong>Keep the environment out of the warm-and-dry zone</strong> thrips prefer where your other targets allow</li>
<li><strong>Inspect the upper and lower canopy weekly</strong> – a quick leaf-flick test takes seconds</li>
<li><strong>Consider preventive predators</strong> (<em>A. cucumeris</em>) if you have had thrips before or bring in outside plant material regularly</li></ul>

<hr/>

<h2 id="catching-the-pattern-before-you-blame-the-lamp">Catching the pattern before you blame the lamp</h2>

<p>Thrips damage is a diagnosis problem before it is a pest problem. The silver sheen reads as light burn, then as spider mites, and each wrong guess costs days – days in which a virus-carrying population keeps feeding and spreading.</p>

<p>PlantLab covers 31 cannabis conditions, thrips among them, and returns a calibrated-confidence read from a single leaf photo in about 18 milliseconds. It is built to flag the silver-streak-plus-specks pattern as thrips rather than let it sit in the “probably the light” pile while the population grows. It does not replace a close look with a loupe – nothing does – but it puts a name on the pattern early, which is exactly where thrips are cheapest to deal with.</p>

<p>Free at <a href="https://plantlab.ai">plantlab.ai</a> – 3 checks a day.</p>

<hr/>

<h2 id="related-reading">Related reading</h2>
<ul><li><a href="https://blog.plantlab.ai/spider-mites-cannabis">Spider Mites on Cannabis: Early Detection Before the Damage</a> – the pest thrips are most often confused with, and how to tell the pinprick-and-webbing pattern from silver streaks</li>
<li><a href="https://blog.plantlab.ai/whats-wrong-with-my-cannabis-plant">What&#39;s Wrong With My Cannabis Plant? A Visual Diagnosis Guide</a> – the full symptom-to-cause quick reference</li>
<li><a href="https://blog.plantlab.ai/node-red-plantlab-automation">Build an Autonomous Plant Health Monitor with Node-RED</a> – automate early pest detection so a photo check happens on a schedule, not after the damage shows</li></ul>

<hr/>

<h2 id="faq">FAQ</h2>

<p><strong>How do I tell thrips from spider mites?</strong>
Thrips leave elongated silver or bronze streaks with dark frass specks and no webbing. Spider mites leave round pinprick dots and, as they spread, fine webbing at leaf tips and branch junctions. Flip the leaf: mites and their eggs sit on the underside, while thrips leave pale, translucent larvae.</p>

<p><strong>Are thrips silver marks the same as light burn?</strong>
No. Light burn bleaches tissue evenly directly under the lamp and leaves nothing sitting on the surface. Thrips damage is streaked and patchy, shows up on shaded lower leaves too, and comes with dark specks of frass. If you see the specks, it is not the light.</p>

<p><strong>Do thrips ruin a cannabis crop?</strong>
A light infestation is mostly cosmetic leaf scarring. The bigger risk is that thrips transmit plant viruses such as TSWV and INSV, which have no cure. Catching them early matters more for the virus risk than for the leaf damage itself.</p>

<p><strong>What kills thrips on cannabis?</strong>
Spinosad is one of the most effective organic options, backed by neem oil and insecticidal soap on leaf undersides, and predatory mites (<em>Amblyseius cucumeris</em> or <em>swirskii</em>) for a residue-free approach. Because thrips pupate in the soil, pair foliar sprays with soil-level control and repeat over two to three weeks.</p>

<p><strong>Why are my sticky cards not catching thrips?</strong>
Thrips prefer blue sticky cards over the yellow ones most growers use for gnats and whitefly. If you are only running yellow, add blue cards near the canopy for a true early-warning signal.</p>
]]></content:encoded>
      <guid>https://blog.plantlab.ai/thrips-cannabis</guid>
      <pubDate>Tue, 21 Jul 2026 17:31:57 +0000</pubDate>
    </item>
    <item>
      <title>How PlantLab Knows When It Might Be Wrong: The reliability_score Field</title>
      <link>https://blog.plantlab.ai/how-plantlab-knows-when-it-might-be-wrong-reliability-score?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[The Short Version&#xA;&#xA;PlantLab&#39;s API now returns a reliabilityscore field on every diagnosis. A number from 0 to 1 telling you how likely the answer is to be correct on this specific image. It replaces the old diagnosticconfidence and safetyclassification fields, which were rule-based guesses that I never trusted. The new score is much better at flagging the diagnoses that turn out to be wrong - especially on the hard cases, which is where you actually need it. Schema bumped from 1.x to 2.0.0. If you&#39;re integrating with PlantLab today, the migration is a one-line change.&#xA;&#xA;!--more--&#xA;&#xA;---&#xA;&#xA;The problem with &#34;confidence&#34; fields&#xA;&#xA;Most diagnosis APIs return a confidence number along with each answer. PlantLab did too. For every condition the model spotted, the response included a confidence value between 0 and 1. On top of that, the response also carried two derived fields. diagnosticconfidence, a single overall trust number, and safetyclassification, a three-way bucket of high, moderate, low.&#xA;&#xA;Those derived fields were a heuristic. A small handful of rules that mostly looked at the top condition&#39;s confidence and rolled it up into a number. Heuristics work fine when the problem is simple. They fall apart when the failure modes are subtle.&#xA;&#xA;In real traffic, the cases that matter are the ambiguous ones - photos where the answer isn&#39;t obvious from the image alone, and a single rule isn&#39;t enough to capture how confident the diagnosis really is. That&#39;s the slice where a trust signal earns its keep, and the slice where a rule-based composite tends to break.&#xA;&#xA;A trust signal that works on the easy cases and stops working on the harder ones isn&#39;t really a trust signal. It&#39;s a confidence display.&#xA;&#xA;---&#xA;&#xA;What reliabilityscore does differently&#xA;&#xA;reliabilityscore is a single number from 0 to 1 that estimates how likely the top diagnosis is to be correct on this specific image. Higher is better. Below 0.3 is a clear &#34;double-check this one.&#34; Above 0.7 is &#34;the system is confident and the confidence holds up.&#34;&#xA;&#xA;It doesn&#39;t replace per-class confidence. Those still tell you how strongly the model picked each individual condition. What reliabilityscore adds is a separate answer to a different question - &#34;is the entire diagnosis trustworthy on this particular image, or is something off?&#34;&#xA;&#xA;The analogy I keep coming back to: a junior diagnostician who always gives an answer, and a supervisor who looks over their shoulder. The supervisor doesn&#39;t redo the diagnosis. They judge whether each one looks trustworthy. The old diagnosticconfidence was a checklist the junior filled in themselves. reliabilityscore is the supervisor.&#xA;&#xA;I held the new score to a higher bar than the old composite. On the ambiguous cases, it does a much better job of flagging the answers you should double-check before acting on them. On the easy cases, both fields agree - which is the only place they were ever going to agree, and not where the score earns its keep.&#xA;&#xA;---&#xA;&#xA;What changes in the response&#xA;&#xA;If you&#39;re integrating with PlantLab today, here&#39;s what your code currently sees:&#xA;&#xA;{&#xA;  &#34;requestid&#34;: &#34;550e8400-e29b-41d4-a716-446655440000&#34;,&#xA;  &#34;schemaversion&#34;: &#34;1.2.0&#34;,&#xA;  &#34;success&#34;: true,&#xA;  &#34;iscannabis&#34;: true,&#xA;  &#34;ishealthy&#34;: false,&#xA;  &#34;growthstage&#34;: &#34;flowering&#34;,&#xA;  &#34;conditions&#34;: [&#xA;    { &#34;classid&#34;: &#34;magnesiumdeficiency&#34;, &#34;confidence&#34;: 0.85 }&#xA;  ],&#xA;  &#34;diagnosticconfidence&#34;: 0.85,&#xA;  &#34;safetyclassification&#34;: &#34;highconfidence&#34;&#xA;}&#xA;&#xA;After the upgrade, that same image returns:&#xA;&#xA;{&#xA;  &#34;requestid&#34;: &#34;550e8400-e29b-41d4-a716-446655440000&#34;,&#xA;  &#34;schemaversion&#34;: &#34;2.0.0&#34;,&#xA;  &#34;success&#34;: true,&#xA;  &#34;iscannabis&#34;: true,&#xA;  &#34;ishealthy&#34;: false,&#xA;  &#34;growthstage&#34;: &#34;flowering&#34;,&#xA;  &#34;conditions&#34;: [&#xA;    { &#34;classid&#34;: &#34;magnesiumdeficiency&#34;, &#34;confidence&#34;: 0.85 }&#xA;  ],&#xA;  &#34;reliabilityscore&#34;: 0.91&#xA;}&#xA;&#xA;Two fields removed. One field added. The rest of the response is identical.&#xA;&#xA;reliabilityscore is omitted when the API doesn&#39;t return a condition diagnosis - for example, when the photo isn&#39;t of cannabis, or when the plant is healthy. In those cases, there&#39;s no diagnosis to score for reliability, so the field doesn&#39;t appear. Treat its absence as &#34;no score available&#34; rather than &#34;low score.&#34;&#xA;&#xA;---&#xA;&#xA;Migration&#xA;&#xA;The change you make depends on what you were doing with the old fields.&#xA;&#xA;If you were displaying diagnosticconfidence to a user, swap to reliabilityscore. The semantics are the same direction (higher is better, both 0-1), and the new value is more accurate.&#xA;&#xA;If you were branching on safetyclassification strings, pick thresholds on reliabilityscore instead. A reasonable starting point: above 0.7 is &#34;Confident,&#34; 0.3 to 0.7 is &#34;Uncertain,&#34; below 0.3 is &#34;Low confidence.&#34; Your application can use whatever cutpoints make sense - the score is a number, not a string, so you have full flexibility.&#xA;&#xA;If you were ignoring the old fields entirely, the upgrade is automatic. Remove your code that references diagnosticconfidence or safetyclassification (it&#39;ll get null going forward) and you&#39;re done.&#xA;&#xA;The Home Assistant integration shipped a new release the same day as the API change, so existing HA users get the new sensor automatically. If you&#39;re using a custom integration, update it before the next API deploy if you can - sensors that read the removed fields will return null until the integration is updated.&#xA;&#xA;---&#xA;&#xA;Why a breaking schema, not deprecation&#xA;&#xA;I considered keeping diagnosticconfidence and safetyclassification as deprecated fields, returning the old values alongside the new score for a release or two. It would have spared everyone a migration step.&#xA;&#xA;But it forces consumers to choose between two trust signals that can disagree. The old composite says &#34;low confidence&#34; on a photo where the new score says 0.95 - which do you trust? Worse, deprecated fields stick around for months, and integrators keep reading them instead of migrating. That&#39;s basically the entire failure mode of deprecation.&#xA;&#xA;Cleaner break, single migration, no ambiguity. Schema bumped to 2.0.0 to make it loud. If your integration was on schema 1.x, you&#39;ll start getting 2.0.0 responses the next time you call the API. Field changes are documented above.&#xA;&#xA;---&#xA;&#xA;What&#39;s next&#xA;&#xA;reliabilityscore ships as v1. The field semantics stay stable: a 0 to 1 trust score, present on diagnoses that returned a condition prediction. Future improvements land behind that contract. Same field, more accurate values, no code changes on your end.&#xA;&#xA;If you migrate now, you&#39;re done with the migration.&#xA;&#xA;---&#xA;&#xA;PlantLab is free to try at plantlab.ai. Three diagnoses a day, results in milliseconds. The full API documentation, including the OpenAPI spec, lives at plantlab.ai/docs.&#xA;&#xA;---&#xA;&#xA;FAQ&#xA;&#xA;Do I have to migrate immediately?&#xA;&#xA;You&#39;ll start receiving schema 2.0.0 responses the next time you call the API. If your code reads diagnosticconfidence or safetyclassification, those reads will return null. If your code branches on those fields, your branches will fall through to whatever default path you wrote. So the migration urgency depends on what your code does with null values - some integrations will degrade gracefully, others will break.&#xA;&#xA;Is reliabilityscore the same as confidence?&#xA;&#xA;No. confidence (still present in conditions[] and pests[]) is the model&#39;s per-class probability for one specific class - &#34;how confident am I that this leaf shows magnesium deficiency?&#34; reliabilityscore is a separate signal that estimates how likely the entire diagnosis is to be correct on this image. The two answer different questions, and you can use both.&#xA;&#xA;What does it mean when reliabilityscore is missing?&#xA;&#xA;The score is only computed when the API returns a condition diagnosis - that is, when the photo is cannabis and the plant is unhealthy. For non-cannabis photos or healthy plants, there&#39;s no condition prediction to score, so the field is omitted. Treat absence as &#34;no score available,&#34; not as a low score.&#xA;&#xA;How is this different from just thresholding on confidence?&#xA;&#xA;Per-class confidence values are the model&#39;s individual outputs. They tell you which classes were predicted strongly. They don&#39;t tell you whether the diagnosis as a whole holds up on a given image. reliabilityscore answers that broader question, which is usually the one you actually have.&#xA;&#xA;Can I see PlantLab&#39;s diagnosis history for my key?&#xA;&#xA;GET /usage returns daily and monthly counts. For per-request lookup, store request_id from each diagnose response - it&#39;s stable, returned in both the JSON body and the X-Request-ID header. Use it for support tickets and feedback submission.&#xA;&#xA;---&#xA;&#xA;Related reading:&#xA;The Work Nobody Sees: How I Ran 47 Experiments to Make PlantLab&#39;s AI Better - What goes into making the model more accurate, cycle by cycle&#xA;How PlantLab&#39;s AI Diagnoses 31 Cannabis Plant Problems in 18 Milliseconds - The full pipeline&#xA;&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<h2 id="the-short-version">The Short Version</h2>

<p>PlantLab&#39;s API now returns a <code>reliability_score</code> field on every diagnosis. A number from 0 to 1 telling you how likely the answer is to be correct on this specific image. It replaces the old <code>diagnostic_confidence</code> and <code>safety_classification</code> fields, which were rule-based guesses that I never trusted. The new score is much better at flagging the diagnoses that turn out to be wrong – especially on the hard cases, which is where you actually need it. Schema bumped from 1.x to 2.0.0. If you&#39;re integrating with PlantLab today, the migration is a one-line change.</p>



<hr/>

<h2 id="the-problem-with-confidence-fields">The problem with “confidence” fields</h2>

<p>Most diagnosis APIs return a confidence number along with each answer. PlantLab did too. For every condition the model spotted, the response included a <code>confidence</code> value between 0 and 1. On top of that, the response also carried two derived fields. <code>diagnostic_confidence</code>, a single overall trust number, and <code>safety_classification</code>, a three-way bucket of high, moderate, low.</p>

<p>Those derived fields were a heuristic. A small handful of rules that mostly looked at the top condition&#39;s confidence and rolled it up into a number. Heuristics work fine when the problem is simple. They fall apart when the failure modes are subtle.</p>

<p>In real traffic, the cases that matter are the ambiguous ones – photos where the answer isn&#39;t obvious from the image alone, and a single rule isn&#39;t enough to capture how confident the diagnosis really is. That&#39;s the slice where a trust signal earns its keep, and the slice where a rule-based composite tends to break.</p>

<p>A trust signal that works on the easy cases and stops working on the harder ones isn&#39;t really a trust signal. It&#39;s a confidence display.</p>

<hr/>

<h2 id="what-reliability-score-does-differently">What reliability_score does differently</h2>

<p><code>reliability_score</code> is a single number from 0 to 1 that estimates how likely the top diagnosis is to be correct on this specific image. Higher is better. Below 0.3 is a clear “double-check this one.” Above 0.7 is “the system is confident and the confidence holds up.”</p>

<p>It doesn&#39;t replace per-class <code>confidence</code>. Those still tell you how strongly the model picked each individual condition. What <code>reliability_score</code> adds is a separate answer to a different question – “is the entire diagnosis trustworthy on this particular image, or is something off?”</p>

<p>The analogy I keep coming back to: a junior diagnostician who always gives an answer, and a supervisor who looks over their shoulder. The supervisor doesn&#39;t redo the diagnosis. They judge whether each one looks trustworthy. The old <code>diagnostic_confidence</code> was a checklist the junior filled in themselves. <code>reliability_score</code> is the supervisor.</p>

<p>I held the new score to a higher bar than the old composite. On the ambiguous cases, it does a much better job of flagging the answers you should double-check before acting on them. On the easy cases, both fields agree – which is the only place they were ever going to agree, and not where the score earns its keep.</p>

<hr/>

<h2 id="what-changes-in-the-response">What changes in the response</h2>

<p>If you&#39;re integrating with PlantLab today, here&#39;s what your code currently sees:</p>

<pre><code class="language-json">{
  &#34;request_id&#34;: &#34;550e8400-e29b-41d4-a716-446655440000&#34;,
  &#34;schema_version&#34;: &#34;1.2.0&#34;,
  &#34;success&#34;: true,
  &#34;is_cannabis&#34;: true,
  &#34;is_healthy&#34;: false,
  &#34;growth_stage&#34;: &#34;flowering&#34;,
  &#34;conditions&#34;: [
    { &#34;class_id&#34;: &#34;magnesium_deficiency&#34;, &#34;confidence&#34;: 0.85 }
  ],
  &#34;diagnostic_confidence&#34;: 0.85,
  &#34;safety_classification&#34;: &#34;high_confidence&#34;
}
</code></pre>

<p>After the upgrade, that same image returns:</p>

<pre><code class="language-json">{
  &#34;request_id&#34;: &#34;550e8400-e29b-41d4-a716-446655440000&#34;,
  &#34;schema_version&#34;: &#34;2.0.0&#34;,
  &#34;success&#34;: true,
  &#34;is_cannabis&#34;: true,
  &#34;is_healthy&#34;: false,
  &#34;growth_stage&#34;: &#34;flowering&#34;,
  &#34;conditions&#34;: [
    { &#34;class_id&#34;: &#34;magnesium_deficiency&#34;, &#34;confidence&#34;: 0.85 }
  ],
  &#34;reliability_score&#34;: 0.91
}
</code></pre>

<p>Two fields removed. One field added. The rest of the response is identical.</p>

<p><code>reliability_score</code> is omitted when the API doesn&#39;t return a condition diagnosis – for example, when the photo isn&#39;t of cannabis, or when the plant is healthy. In those cases, there&#39;s no diagnosis to score for reliability, so the field doesn&#39;t appear. Treat its absence as “no score available” rather than “low score.”</p>

<hr/>

<h2 id="migration">Migration</h2>

<p>The change you make depends on what you were doing with the old fields.</p>

<p>If you were displaying <code>diagnostic_confidence</code> to a user, swap to <code>reliability_score</code>. The semantics are the same direction (higher is better, both 0-1), and the new value is more accurate.</p>

<p>If you were branching on <code>safety_classification</code> strings, pick thresholds on <code>reliability_score</code> instead. A reasonable starting point: above 0.7 is “Confident,” 0.3 to 0.7 is “Uncertain,” below 0.3 is “Low confidence.” Your application can use whatever cutpoints make sense – the score is a number, not a string, so you have full flexibility.</p>

<p>If you were ignoring the old fields entirely, the upgrade is automatic. Remove your code that references <code>diagnostic_confidence</code> or <code>safety_classification</code> (it&#39;ll get null going forward) and you&#39;re done.</p>

<p>The Home Assistant integration shipped a new release the same day as the API change, so existing HA users get the new sensor automatically. If you&#39;re using a custom integration, update it before the next API deploy if you can – sensors that read the removed fields will return null until the integration is updated.</p>

<hr/>

<h2 id="why-a-breaking-schema-not-deprecation">Why a breaking schema, not deprecation</h2>

<p>I considered keeping <code>diagnostic_confidence</code> and <code>safety_classification</code> as deprecated fields, returning the old values alongside the new score for a release or two. It would have spared everyone a migration step.</p>

<p>But it forces consumers to choose between two trust signals that can disagree. The old composite says “low confidence” on a photo where the new score says 0.95 – which do you trust? Worse, deprecated fields stick around for months, and integrators keep reading them instead of migrating. That&#39;s basically the entire failure mode of deprecation.</p>

<p>Cleaner break, single migration, no ambiguity. Schema bumped to 2.0.0 to make it loud. If your integration was on schema 1.x, you&#39;ll start getting 2.0.0 responses the next time you call the API. Field changes are documented above.</p>

<hr/>

<h2 id="what-s-next">What&#39;s next</h2>

<p><code>reliability_score</code> ships as v1. The field semantics stay stable: a 0 to 1 trust score, present on diagnoses that returned a condition prediction. Future improvements land behind that contract. Same field, more accurate values, no code changes on your end.</p>

<p>If you migrate now, you&#39;re done with the migration.</p>

<hr/>

<p><em>PlantLab is free to try at <a href="https://plantlab.ai">plantlab.ai</a>. Three diagnoses a day, results in milliseconds. The full API documentation, including the OpenAPI spec, lives at <a href="https://plantlab.ai/docs">plantlab.ai/docs</a>.</em></p>

<hr/>

<h2 id="faq">FAQ</h2>

<p><strong>Do I have to migrate immediately?</strong></p>

<p>You&#39;ll start receiving schema 2.0.0 responses the next time you call the API. If your code reads <code>diagnostic_confidence</code> or <code>safety_classification</code>, those reads will return null. If your code branches on those fields, your branches will fall through to whatever default path you wrote. So the migration urgency depends on what your code does with null values – some integrations will degrade gracefully, others will break.</p>

<p><strong>Is reliability_score the same as confidence?</strong></p>

<p>No. <code>confidence</code> (still present in <code>conditions[]</code> and <code>pests[]</code>) is the model&#39;s per-class probability for one specific class – “how confident am I that this leaf shows magnesium deficiency?” <code>reliability_score</code> is a separate signal that estimates how likely the entire diagnosis is to be correct on this image. The two answer different questions, and you can use both.</p>

<p><strong>What does it mean when reliability_score is missing?</strong></p>

<p>The score is only computed when the API returns a condition diagnosis – that is, when the photo is cannabis and the plant is unhealthy. For non-cannabis photos or healthy plants, there&#39;s no condition prediction to score, so the field is omitted. Treat absence as “no score available,” not as a low score.</p>

<p><strong>How is this different from just thresholding on <code>confidence</code>?</strong></p>

<p>Per-class <code>confidence</code> values are the model&#39;s individual outputs. They tell you which classes were predicted strongly. They don&#39;t tell you whether the diagnosis as a whole holds up on a given image. <code>reliability_score</code> answers that broader question, which is usually the one you actually have.</p>

<p><strong>Can I see PlantLab&#39;s diagnosis history for my key?</strong></p>

<p><code>GET /usage</code> returns daily and monthly counts. For per-request lookup, store <code>request_id</code> from each diagnose response – it&#39;s stable, returned in both the JSON body and the <code>X-Request-ID</code> header. Use it for support tickets and feedback submission.</p>

<hr/>

<p><em>Related reading:</em>
– <a href="https://blog.plantlab.ai/behind-the-model-continuous-improvement">The Work Nobody Sees: How I Ran 47 Experiments to Make PlantLab&#39;s AI Better</a> – What goes into making the model more accurate, cycle by cycle
– <a href="https://blog.plantlab.ai/how-plantlabs-ai-diagnoses-31-cannabis-plant-problems-in-18-milliseconds">How PlantLab&#39;s AI Diagnoses 31 Cannabis Plant Problems in 18 Milliseconds</a> – The full pipeline</p>
]]></content:encoded>
      <guid>https://blog.plantlab.ai/how-plantlab-knows-when-it-might-be-wrong-reliability-score</guid>
      <pubDate>Tue, 21 Jul 2026 13:29:13 +0000</pubDate>
    </item>
  </channel>
</rss>