Vivary
how it works

How Vivary Works

Last updated September 15, 2026
On this page
  1. Two names, two different things
  2. The five things Vivary will tell you
  3. Three layers, and where each one stops
  4. When it doesn't get to species, tell me what it was
  5. Where the care information comes from
  6. Toxicity is never guessed
  7. Disease is a differential, not a verdict
  8. Known weak spots in identification right now
  9. When it's wrong, tell me

Most plant apps work like an oracle. You upload a photo and they give you the name of a species with confidence. When the photo is of poor quality they hand you a species anyway because on the surface, giving the appearance of confidence is more important than returning nothing, which can look like a failure.

Vivary is not most plant apps. Vivary is built to only give you what it's confident about. Nothing more, nothing less. Hopefully it is confident in identifying your plant's species, covered in the on-device catalog, but when it's not, it falls back to only what it knows. This page is meant to provide you with an overview of when it commits, when it stops short, and where the information behind either one actually came from.

Two names, two different things

Vivary is the app, and that includes the model that runs on your phone. When an identification happens offline, in about 30 milliseconds, with nothing leaving the device, that's Vivary.

Ken is the assistant, and he lives in the cloud. He's who you talk to in full sentences, and he's the wider catalog the app reaches for when the on-device model can't place something. Ken is named for the old word meaning the range of what someone can see and understand, which is where the app's "beyond my ken" comes from.

The short version: if it's fast and works on a plane (assuming you didn't purchase the Wi-Fi), it's Vivary. If it took a second and needed a connection, that's Ken.

The five things Vivary will tell you

Every identification comes labeled with a confidence pill, and the wording always matches the pill. Two numbers decide which pill you get: the score the model gives the top species, and how far ahead that species sits from the runner-up. Both matter. A decent score in a near-tie with something else is not a confident answer, and Vivary treats it as one of the weaker ones.

Confident. The plant is in the supported catalog and nothing close is competing for the answer. Top species at 85% or better.

Likely. A named answer worth a second look before you file it. Top species at 65% or better and ahead of the runner-up by at least 30 points. Vivary leads with the name; you confirm it.

Unsure. It's down to two or three candidates. The top species clears 40% and beats the next one by at least 10 points, so there's a guess worth showing but not one worth asserting. You get the shortlist and the feature that distinguishes them, so you can check it yourself via direct comparison to an image that matches the photo you took. Often one more photo settles it, and Vivary will tell you which shot to take. This is called "guided capture."

Family only. Either the top species is under 40%, or two candidates are too close to separate. Rather than name a coin flip, Vivary gives you the family and stops there. A spider plant once came back at 27% against a Beaucarnea at 27%, and naming either one would have been a guess wearing a percentage. It will still offer to walk you through a better photo.

Beyond my ken. The plant isn't in the supported offline catalog at all, or the photo isn't clear enough to make a determination. No guess follows.

That last one is the one people find strange at first. An app that shrugs feels broken. But a confident wrong answer costs you more than a shrug does: you write the wrong name in your journal, you follow care instructions meant for a different plant, and you don't find out for a season. You can see how this might be bad for the plants you care for.

Three layers, and where each one stops

There isn't just one model behind the camera. There's a ladder of models, and knowing which rung you're standing on explains most of what you'll see and experience in Vivary.

The model on your phone: 901 species.

The family, genus, species, and field mark identification model lives on the device, about 29MB of it. It identifies with no internet connection, no account, no location, and no photo leaving your phone. That's the tier you're using almost every time you open the camera, and it's the fast one, typically around 30ms per identification.

901 is a small number next to apps advertising hundreds of thousands of species, and it's small deliberately. Every one of those species was verified rather than scraped off the internet, and the whole model has to fit in your pocket and run in under a second. I plan to support several thousand species on-device before production launch on the App Store.

It's organized family-first, following Thomas Elpel's Botany in a Day method, because families share patterns and a model that learns the family first fails gracefully. When it can't reach species it can often still put you in the right neighborhood.

The model is strong across houseplants, common garden plants, and native plants across a few regions, mainly the Rocky Mountains and parts of the Gulf coast. Near future expansions will likely center on expanding houseplants and native plants.

Ken: exactly 24,529 species.

When the on-device model can't place something, Ken takes the wider swing sticking to a curated broad tier set covering most photographable species in the United States. Ken runs in the cloud, so this is the tier where your photo does get sent, and it's slower than the on-device pass. Most plants that aren't on your phone get named here.

We curate this set so that we can provide tight controls over the LLM (large language model) that powers Ken behind the scenes. Frontier models are pretty good at guessing a species name, but the hallucination and confident wrong problem is a real thing. By limiting what it can say to you by filtering its responses through our broad tier catalog, incorrect answers can be significantly reduced if not eliminated. This allows Vivary to support the inclusion of toxicity and other information. We never assert non-toxic based on cloud model identification.

When Ken isn't confident: whatever he can stand behind.

He won't reach for a species he can't support. What comes back is the part he can actually stand behind, usually the genus, plus what he can see in your photo and the detail that would settle the rest: a different angle, a closer shot of where the leaf meets the stem, a flower if the plant has one. Genus is the floor for a named result. The system narrows a claim and never widens one, and it won't hand you a family and call that an identification.

The search field stays open the whole time, so you can also look the plant up in the broad catalog yourself, by name, without spending anything or asking a model to weigh in.

So the answer narrows as you go down, and it never empties out. Each layer hands you what it can stand behind and stops there. That's why you'll sometimes get a genus where another app would have handed you a species, and why in beta the first layer passes work upward more often than it eventually will.

When it doesn't get to species, tell me what it was

The on-device catalog grows based on what people actually take pictures of. I don't need your photo, just the name. If you know what the plant was and Vivary didn't, that one line is the most direct influence you have on what I add next. Go looking for plants you think it might not know, then send me the names: dallas@vivary.app.

There's also an anonymous contribution feature in this build, off until you switch it on in the settings area. It's tied to care logging rather than to your identify captures, and once the app ships it's what will inform future on-device species expansions and botanist model training. It's complete if you want to give it a try.

Where the care information comes from

This is the part I've spent the most time on, and the part most apps won't tell you about.

No single source covers a whole plant. Each field on a care card comes from somewhere different, and where it comes from decides how much a model was allowed to touch it. Instead of taking the easy way out and consuming an API that doesn't list its sources, I've compiled our own curated data set from reliable sources. All of this data is bundled alongside the Vivary ID model during training and is shipped to the app and fully available offline. If you come across gaps in coverage, I'm likely already aware of it, but this would help me prioritize what I target next.

The structured grid (light, water, soil, temperature, size, growth rate) is extracted by a language model from openly licensed prose: Wikipedia cultivation sections first, then GBIF species descriptions, the USDA PLANTS database, and the Plant Variety Database. The model is summarizing what those sources say about that plant. It isn't writing from memory.

Pruning, feeding, and the plain-language care note come from public-domain horticultural literature. Mainly George Nicholson's Illustrated Dictionary of Gardening (1884-88), Liberty Hyde Bailey's Standard Cyclopedia of Horticulture (1917), and Vilmorin's The Vegetable Garden (1885), sitting on a wider shelf of roughly a hundred public-domain gardening titles. Not all of it is antique, either. Youngken and Karas's Common Poisonous Plants of New England (1964) is in there, and so is Steve Solomon's composting work from the 1990s, which he released to the public domain himself.

None of that prose reaches you as it was written.

A century-old gardening book is full of advice that was correct then and is useless or dangerous now, so every passage runs a modernization pass before it can ship. Pre-1930 pesticide chemistry is a hard drop rather than a footnote: Paris green, London purple, arsenic and mercury compounds, nicotine and tobacco water. A Victorian manual will cheerfully tell you to dust your roses with arsenic, and that sentence never makes it out of the pipeline. Other patterns get corrected instead of dropped. Dated soil recipes, the "turfy loam and manure" sort, become the modern potted equivalent. Syringing becomes wiping dust and raising ambient humidity, because hours of wet leaves invite leaf spot. Absolute calendar dates get reframed to last frost and soil temperature, since the book was written for somebody else's climate. Historical variety names get flagged so they don't read like something you can go buy.

What survives is rewritten in plain modern language, and the rewriter works from the audited notes and nothing else. It rephrases; it is not allowed to add a fact the source didn't contain. Anything drifting into pesticide, medicinal, or edibility advice gets caught by a scan on the output, and a species that trips it ships with no care note rather than a risky one.

Some fields no model is allowed near. Soil pH and hardiness zones come straight from the Plant Variety Database with nothing in between. Taxonomy comes from GBIF. Range data comes from Kew's World Checklist and the TDWG regional scheme.

Each of those carve-outs was bought with a specific failure rather than decided on principle:

  • A model once produced a soil pH range of 7.0 to 14.0 for lavender. 14 is lye. Soil pH has been source-only ever since.
  • A model was once handed a jumbled list of a plant's common names and asked to pick the main one. For poison hemlock it picked "Carrot-fern." No model touches names now: a human override list goes first, then USDA PLANTS for the primary name, and GBIF supplies the English alternates, ranked by how often each one actually shows up. On that ranking "Poison hemlock" appears three times as often as "Carrot-fern."

That's the shape of the whole system. Models are good at reading a paragraph and pulling a number out of it, and they are untrustworthy exactly where a plausible wrong answer is hardest to spot. So they do the reading, and the fields where a mistake hurts you are wired straight to a source.

One more honest limit: the care grid is unevenly filled. Some species have light, water, and soil worked out in detail. Others have a care note and not much else. It's filled in where a source actually said something, and left empty where none did. While there will always be some variation in the dataset, I intend to work to fill these over time.

Toxicity is never guessed

Toxicity verdicts never pass through a language model. They come from NC State Extension's plant database plus a small override set I maintain by hand with citations, merged so that the most severe documented verdict wins. A source can escalate a claim and can never quietly soften one.

If nothing documented says a plant is safe, it reads unknown rather than safe, and the app treats unknown as not-safe. That asymmetry is deliberate. A wrong "toxic" makes you over-careful for no reason. A wrong "safe" puts a pet or a child next to something that isn't.

You will see unknown a lot.

If something has already happened, if a pet or a child has eaten something and you're seeing symptoms, call a vet or poison control. Not an app.

Disease is a differential, not a verdict

Disease detection uses separate models from identification, one tuned for indoor conditions and one for outdoor. What comes back is a differential: what this could be, and what would narrow it down.

Three things in there look like limitations and are actually decisions.

It doesn't guess between over- and under-watering. It says water stress and asks you to put a finger in the soil. On a gold set of real photos, every model and every oracle tested landed at chance separating those two from an image. The plant looks the same either way. So it asks instead of guessing.

It has a "healthy, but showing wear" answer. An old leaf going yellow, a few cosmetic spots, weather damage. A model trained to find problems will find problems in healthy plants, and that's worse than useless, because it sends you treating something that didn't need treating. Vivary won't invent a diagnosis to look helpful.

"Conditions to watch" is community experience, not clinical data. That section is distilled from what people reported on r/plantclinic, and it's labeled that way everywhere it shows up. It's good for recognizing a pattern someone else has already hit. It is not a diagnosis and it hasn't been checked by a horticulturalist.

Known weak spots in identification right now

  • Outdoor trees and shrubs are the thinnest part of the on-device catalog. Expect the phone to pass a lot of them up to Ken, including some it really should know already.
  • The on-device catalog at 901 species reaches a confident answer less often than the finished product will. That gap is the beta.

When it's wrong, tell me

A confidently wrong answer is the single most useful thing you can send me, more useful than a crash. Tell me what the plant actually was, what the app called it, and how sure it claimed to be: dallas@vivary.app.

For crashes, and for anything that looks broken or reads confusingly, the fastest route is a screenshot shared straight into TestFlight. That tags the build and the device for me automatically, so there's nothing else you need to write down.

Being wrong is fine. Being wrong without knowing it is the thing I'm trying to solve.

← back to vivary.app