Update LICENSE
This commit is contained in:
1 parent
580e66f7ab
commit
924c7c12b9
43 files changed
+4850
-3
No files matched your search
+46
@@ -0,0 +1,46 @@
|
||||
__pycache__
|
||||
*.pyc
|
||||
*.pyo
|
||||
*.pyd
|
||||
*.so
|
||||
*.dylib
|
||||
*.egg
|
||||
*.egg-info
|
||||
dist
|
||||
build
|
||||
*.log
|
||||
*.tmp
|
||||
*.temp
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
.vscode
|
||||
.idea
|
||||
*.iml
|
||||
*.iws
|
||||
*.ipr
|
||||
*.pyc
|
||||
*.pyo
|
||||
*.pyd
|
||||
*.so
|
||||
*.dylib
|
||||
*.egg
|
||||
*.egg-info
|
||||
dist
|
||||
build
|
||||
*.log
|
||||
*.tmp
|
||||
*.temp
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
.vscode
|
||||
.idea
|
||||
*.iml
|
||||
*.iws
|
||||
*.ipr
|
||||
.windsurf
|
||||
File diff suppressed because it is too large.
Load diff
BIN
Binary file not shown.
|
After Width: | Height: | Size: 29 KiB |
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 chris
|
||||
Copyright (c) 2026 Grove5
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
associated documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
@@ -16,3 +16,21 @@ LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE A
|
||||
EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
Third-Party Licenses
|
||||
|
||||
This project uses AprilTag, which is licensed under the BSD 2-Clause License:
|
||||
|
||||
Copyright (C) 2013-2016, The Regents of The University of Michigan. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||
|
||||
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
|
||||
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing official policies, either expressed or implied, of the Regents of The University of Michigan.
|
||||
@@ -1,3 +1,222 @@
|
||||
# BagTag
|
||||
<img src="BagTag.webp" alt="BagTag AprilTag marker" width="300">
|
||||
|
||||
BagTag is the machine-readable identification standard for Grove5 Cultivar Select bags. It uses two codes with two completely separate audiences and two completely separate jobs.
|
||||
**A free, open identification standard for mushroom cultivation bags.**
|
||||
|
||||
Designed by [Grove5](https://grove5.com) for the [Cultivar](https://grove5.com/cultivar) smart grow chamber — **given freely to the mycology community.**
|
||||
|
||||
BagTag encodes everything a machine needs to know about a bag: **substrate**, **species**, and **size**. No app. No typing. Just scan and grow.
|
||||
|
||||
---
|
||||
|
||||
## Why BagTag Exists
|
||||
|
||||
Hobbyist mycologists face a familiar frustration: every bag needs labeling, but labels get wet, smudge, or fall off. QR codes work but require phones and apps. Barcodes are fragile. Handwriting is error-prone.
|
||||
|
||||
BagTag solves this with **industrial-grade machine vision made accessible**:
|
||||
|
||||
- **AprilTag 41h12** markers — readable in milliseconds, even at angles, through condensation, with mycelium creeping over the edges
|
||||
- **Packed enumeration** — 1,970 valid bag configurations encoded into 2,115 available tag IDs
|
||||
- **Graceful fallbacks** — damaged tag? Scan the QR. Custom substrate? Manual entry. Nothing is a dead end.
|
||||
|
||||
---
|
||||
|
||||
## The Philosophy: Maximum Obvious, Graceful Fallback
|
||||
|
||||
BagTag attempts to **load every obvious combination**:
|
||||
- 104 mushroom species across 32 substrate formulations
|
||||
- All common commercial varieties (Oysters, Shiitake, Lion's Mane, Reishi...)
|
||||
- All-in-One bags (grain + bulk), spawn-only, and bulk-only variants
|
||||
- Commercial strains and experimental lines
|
||||
|
||||
But BagTag doesn't pretend to know everything:
|
||||
- **Custom substrates** (slots 14, 23, 31) accept any species code
|
||||
- **Species 127** triggers manual entry — your unidentified wild isolate works fine
|
||||
- **Reserved tag IDs** (1,970–2,114) leave room for future expansion
|
||||
|
||||
---
|
||||
|
||||
## How It Works
|
||||
|
||||
### Dual-Code Redundancy
|
||||
|
||||
| | **AprilTag (Front)** | **QR Code (Back)** |
|
||||
|---|---|---|
|
||||
| **Readable by** | Cultivar camera | Any phone |
|
||||
| **Speed** | < 100ms | 1–3 seconds |
|
||||
| **Data** | 12-bit grow profile | Full GMP traceability record |
|
||||
| **Robustness** | Works damaged, occluded, at angle | Works when tag is destroyed |
|
||||
| **Human input** | Zero | Optional manual override |
|
||||
|
||||
**Neither code is a single point of failure.** The QR is a strict superset — if the AprilTag fails, the human scans the QR and the Cultivar receives identical grow information.
|
||||
|
||||
### The Encoding
|
||||
|
||||
```
|
||||
Logical layout: 1 bit + 5 bits + 7 bits = 13 bits (theoretical)
|
||||
Size Substrate Species
|
||||
|
||||
Physical reality: Packed enumeration → 0–1,969 (valid bags)
|
||||
→ 1,970–2,114 (reserved)
|
||||
```
|
||||
|
||||
From a tag ID, the Cultivar immediately knows:
|
||||
- Temperature targets for colonization and fruiting
|
||||
- Humidity profile and CO₂/FAE schedule
|
||||
- Colonization timeline estimates
|
||||
- Biological efficiency baselines
|
||||
- Fruiting trigger conditions
|
||||
|
||||
**Put the bag in. The machine does the rest.**
|
||||
|
||||
---
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Decode a Tag
|
||||
|
||||
```bash
|
||||
cd tools
|
||||
python decode.py 0
|
||||
# Tag ID: 0
|
||||
# Size: small
|
||||
# Substrate: [00] Masters Mix + Millet
|
||||
# Species: [00] Blue Oyster
|
||||
# (Pleurotus ostreatus)
|
||||
```
|
||||
|
||||
### Explore All Tags
|
||||
|
||||
```bash
|
||||
python decode.py --stats # Namespace summary
|
||||
python decode.py --ranges # Tag ID ranges per substrate
|
||||
python decode.py --tables # Full species tables
|
||||
```
|
||||
|
||||
### Generate Tables
|
||||
|
||||
```bash
|
||||
python generate_tables.py
|
||||
# Generates:
|
||||
# - ../tables/substrates.md (all 32 substrates)
|
||||
# - ../tables/species/*.md (32 per-substrate species tables)
|
||||
# - ../BAGTAG_MASTER_TABLE.md (complete 0–1,969 reference)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Repository Structure
|
||||
|
||||
```
|
||||
BagTag/
|
||||
├── README.md ← This file
|
||||
├── SPEC.md ← Full technical specification
|
||||
├── BAGTAG_MASTER_TABLE.md ← Complete tag ID reference (auto-generated)
|
||||
├── LICENSE ← MIT + AprilTag BSD attribution
|
||||
│
|
||||
├── tables/
|
||||
│ ├── substrates.md ← 32 substrate slots (auto-generated)
|
||||
│ └── species/ ← Per-substrate species tables
|
||||
│ ├── aio-0-flagship-mm.md
|
||||
│ ├── aio-1-speed-mm.md
|
||||
│ └── ... (32 total)
|
||||
│
|
||||
└── tools/
|
||||
├── bagtag_data.py ← 🎯 Single source of truth
|
||||
├── decode.py ← Reference decoder + CLI
|
||||
├── generate_tables.py ← Table generator
|
||||
└── generate_tags.py ← Tag image generator (placeholder)
|
||||
```
|
||||
|
||||
**The entire encoding lives in `tools/bagtag_data.py`.** Change that file, run `generate_tables.py`, and all documentation updates automatically.
|
||||
|
||||
---
|
||||
|
||||
## Technical Highlights
|
||||
|
||||
### AprilTag 41h12
|
||||
- 2,115 valid IDs, Hamming distance 12
|
||||
- Tolerates up to 5 misread bits
|
||||
- Sub-centimeter 6DOF pose estimation
|
||||
- Industrial machine vision standard
|
||||
|
||||
### Packed Enumeration
|
||||
Instead of wasting 75% of tag IDs on invalid (substrate, species) combinations, BagTag **enumerates only valid bags**:
|
||||
|
||||
| Approach | Valid IDs | Waste |
|
||||
|----------|-----------|-------|
|
||||
| Naive bit-fields (13 bits) | ~1,970 | ~75% |
|
||||
| **BagTag packed enum** | **1,970** | **0%** |
|
||||
|
||||
Each tag ID maps to exactly one valid (size, substrate, species) triple. No ambiguous decodes. No partial reads.
|
||||
|
||||
### Species 127
|
||||
Every substrate table reserves **code 127** as "Other/prompt":
|
||||
- New wild isolates
|
||||
- Proprietary commercial strains
|
||||
- User experiments
|
||||
|
||||
The Cultivar falls back to QR scan or manual entry. Nothing breaks.
|
||||
|
||||
---
|
||||
|
||||
## Documentation
|
||||
|
||||
| Document | Purpose |
|
||||
|----------|---------|
|
||||
| [SPEC.md](SPEC.md) | Complete encoding specification, bit layouts, decision trees |
|
||||
| [BAGTAG_MASTER_TABLE.md](BAGTAG_MASTER_TABLE.md) | Every valid tag ID 0–1,969 decoded |
|
||||
| [tables/substrates.md](tables/substrates.md) | All 32 substrate slots with descriptions |
|
||||
| [tables/species/](tables/species/) | 32 per-substrate species lookup tables |
|
||||
|
||||
---
|
||||
|
||||
## For Makers & Builders
|
||||
|
||||
BagTag is **hardware-agnostic**. The reference decoder is pure Python. Port it to:
|
||||
- Arduino + camera module
|
||||
- Raspberry Pi + OpenCV
|
||||
- Android/iOS apps
|
||||
- Industrial PLCs
|
||||
|
||||
The encoding is documented, the tables are generated, the data is free.
|
||||
|
||||
---
|
||||
|
||||
## License
|
||||
|
||||
**MIT License** — see [LICENSE](LICENSE)
|
||||
|
||||
Third-party: AprilTag (BSD 2-Clause), University of Michigan
|
||||
|
||||
**You can:**
|
||||
- Use BagTag in commercial products
|
||||
- Modify and redistribute
|
||||
- Build proprietary Cultivar clones
|
||||
- Print your own BagTags for home use
|
||||
|
||||
**We ask:**
|
||||
- Keep the attribution
|
||||
- Consider contributing improvements back
|
||||
- Spread good mycology practices
|
||||
|
||||
---
|
||||
|
||||
## Part of Grove5
|
||||
|
||||
BagTag was created for **Cultivar** — Grove5's smart dual-chamber mushroom cultivation appliance — and released freely because standards work best when they're *actually* standardized.
|
||||
|
||||
- **[Cultivar](https://grove5.com)** — Smart grow chamber with BagTag-native vision
|
||||
- **[Cultivar Select](https://grove5.com/#subscription)** — Subscription bag service (pre-printed with BagTag)
|
||||
- **BagTag** — This open standard, free for everyone to use and build upon
|
||||
|
||||
> *Open source software, honest hardware.*
|
||||
|
||||
---
|
||||
|
||||
## Community
|
||||
|
||||
- **Issues & PRs:** Welcome on Grove5 Git
|
||||
- **Questions:** Tag `@grove5` on socials
|
||||
- **Show & Tell:** Tag your BagTag projects — we always want to amplify good work
|
||||
|
||||
**Grow well.**
|
||||
@@ -0,0 +1,382 @@
|
||||
# BagTag v1 — Encoding Specification
|
||||
|
||||
**Version:** 1.0
|
||||
**Date:** April 2026
|
||||
**Status:** Draft
|
||||
**Tag family:** AprilTag41h12
|
||||
**Physical payload:** 12 bits (2,115 valid IDs)
|
||||
**Logical encoding:** 13 bits (packed enumeration)
|
||||
|
||||
---
|
||||
|
||||
## Table of Contents
|
||||
|
||||
1. [Overview](#1-overview)
|
||||
2. [Tag Family](#2-tag-family)
|
||||
3. [Bit Layout](#3-bit-layout)
|
||||
4. [ID Budget](#4-id-budget)
|
||||
5. [Substrate Slots](#5-substrate-slots)
|
||||
6. [Species Lookup Tables](#6-species-lookup-tables)
|
||||
7. [QR Code Payload](#7-qr-code-payload)
|
||||
8. [Physical Label Layout](#8-physical-label-layout)
|
||||
9. [Cultivar Workflow](#9-cultivar-workflow)
|
||||
10. [Decoder Decision Tree](#10-decoder-decision-tree)
|
||||
11. [Versioning](#11-versioning)
|
||||
|
||||
---
|
||||
|
||||
## 1. Overview
|
||||
|
||||
BagTag encodes a complete mushroom cultivation grow profile into an AprilTag41h12 marker. The tag is read by the Cultivar camera at bag insertion. No human input is required for any bag with a valid tag.
|
||||
|
||||
**Why the distinction matters:** AprilTag41h12 provides 12 bits of payload (2,115 valid tag IDs). BagTag's logical encoding requires 13 bits (1+5+7 = 8,192 theoretical combinations). We bridge this gap with **packed enumeration**: only valid (size, substrate, species) combinations are assigned tag IDs. Invalid combinations are simply unassigned.
|
||||
|
||||
### Design principles
|
||||
|
||||
- **Predeterminant** — the tag encodes the full grow profile, not a database key. The Cultivar acts immediately without a network call.
|
||||
- **Redundant** — the QR code on the back of the bag contains the same grow profile data. Neither code is a single point of failure.
|
||||
- **Forward compatible** — ~25% of all slot ranges are reserved. New substrates and species are added to reserved slots without a format revision.
|
||||
- **Abstract** — physical values (bag weight in lbs, exact temp in °F) live in Cultivar firmware config, not in the tag. The tag encodes intent.
|
||||
|
||||
### Substrate namespace definitions
|
||||
|
||||
| Type | Definition |
|
||||
|------|-----------|
|
||||
| **AIO** | All-in-one. Single vessel from inoculation to harvest. No transfer required. Includes layered bags (grain spawn layer + bulk fruiting layer), homogeneous blends, and direct LC-inoculated substrates. |
|
||||
| **Grain** | Colonized grain spawn bags. Destined for transfer to bulk substrate. Cultivar runs colonization protocol only and alerts when ready for transfer. |
|
||||
| **Bulk** | Bulk substrate blocks or bags that receive grain spawn. Cultivar assumes colonized spawn will be introduced and runs fruiting protocol. |
|
||||
|
||||
---
|
||||
|
||||
## 2. Tag Family
|
||||
|
||||
### AprilTag41h12
|
||||
|
||||
| Family | Valid IDs | Hamming Distance | Notes |
|
||||
|--------|-----------|-----------------|-------|
|
||||
| 16h5 | 30 | 5 | Discouraged. Poor robustness. |
|
||||
| 25h9 | 35 | 9 | Discouraged. Too few IDs. |
|
||||
| 36h11 | 587 | 11 | Most common. Insufficient IDs for BagTag. |
|
||||
| **41h12** | **2,115** | **12** | **Selected.** Co-recommended. Sufficient IDs, highest robustness. |
|
||||
|
||||
The 41h12 family carries 41 data modules in a **3×3 inner + 4×8 outer ring** layout. Hamming distance 12 means the Cultivar camera can misread up to 5 bits due to condensation, mycelium occlusion, or angle and still decode the correct tag with certainty.
|
||||
|
||||
The mathematical 12-bit space is 4,096 values. Of these, 2,115 survive the Hamming distance and false positive filters — approximately 52% of the theoretical space. The remaining 1,981 patterns are not assigned as valid tags because the camera cannot read them reliably enough. A misread is worse than no read: the Cultivar would load the wrong grow profile silently.
|
||||
|
||||
### Why not 36h11?
|
||||
|
||||
36h11 provides only 587 valid IDs. The BagTag encoding requires approximately 1,900 active IDs across the full substrate × species × size space. 587 is insufficient.
|
||||
|
||||
### Why not ArUco?
|
||||
|
||||
ArUco provides more IDs but is optimized for data storage, not pose estimation. AprilTag's rigid border geometry enables sub-centimeter 6DOF pose estimation from a single camera frame — essential for the Cultivar's spatial bag tracking.
|
||||
|
||||
---
|
||||
|
||||
## 3. Logical Encoding
|
||||
|
||||
The BagTag logical encoding uses 13 bits: 1 bit for size, 5 bits for substrate, and 7 bits for species. This provides a theoretical 8,192 combinations, but only a subset are valid bag configurations.
|
||||
|
||||
```
|
||||
Bit: 0 1 2 3 4 5 6 7 8 9 10 11 12
|
||||
Field: [SIZE] [SUBSTRATE ........] [SPECIES ..........]
|
||||
1 bit 5 bits 7 bits
|
||||
```
|
||||
|
||||
### Field definitions
|
||||
|
||||
| Bits | Field | Width | States | Notes |
|
||||
|------|-------|-------|--------|-------|
|
||||
| 0 | Size | 1 bit | 2 | Small=0, Large=1 |
|
||||
| 1–5 | Substrate | 5 bits | 32 | See Section 5 |
|
||||
| 6–12 | Species | 7 bits | 128 | Lookup table selected by substrate slot |
|
||||
|
||||
### Physical Encoding (Packed Enumeration)
|
||||
|
||||
AprilTag41h12 provides only 2,115 valid tag IDs (12-bit native, ~52% usable after Hamming distance constraints). BagTag uses **packed enumeration**: only valid (size, substrate, species) combinations are assigned sequential tag IDs 0–1,905. Invalid combinations are unassigned.
|
||||
|
||||
The decoder maps:
|
||||
- **Tag ID 0** → (small, substrate 0, species 0)
|
||||
- **Tag ID 1** → (large, substrate 0, species 0)
|
||||
- **Tag ID 2** → (small, substrate 0, species 1)
|
||||
- ...
|
||||
- **Tag ID 1,905** → (large, substrate 31, species 127)
|
||||
- **Tag IDs 1,906–2,114** → Reserved for future use
|
||||
|
||||
### Size field
|
||||
|
||||
| Value | Meaning |
|
||||
|-------|---------|
|
||||
| 0 | Small bag |
|
||||
| 1 | Large bag |
|
||||
|
||||
The size field is intentionally abstract. Physical weights (e.g. 3lb, 5lb) are defined in Cultivar firmware configuration, not in the tag. If bag sizes change, firmware is updated — no labels are reprinted. Every tag ever printed remains valid.
|
||||
|
||||
The size field enables automatic biological efficiency calculation:
|
||||
|
||||
```
|
||||
BE = (fresh weight harvested) / (dry weight substrate) × 100%
|
||||
```
|
||||
|
||||
The Cultivar knows starting substrate weight from the size field. Harvest weight is logged in the Cultivar UI. BE is calculated automatically.
|
||||
|
||||
### Substrate field
|
||||
|
||||
5 bits provide 32 slots. Slots are organized into namespaces by substrate type. The substrate slot also selects which species lookup table is active for bits 6–11. See Section 5 for the full slot table.
|
||||
|
||||
### Species field
|
||||
|
||||
7 bits provide 128 slots **per substrate**. The substrate slot (bits 1–5) selects which species lookup table is active. The same species code always refers to the same species across all tables where that species appears — ensuring QR redundancy checks are consistent.
|
||||
|
||||
**Species code 127** (binary `1111111`) is reserved as Other/prompt on every substrate table. The Cultivar falls back to QR scan or manual entry when this code is encountered. Slots 104-126 are reserved for future species additions.
|
||||
|
||||
### Encoding example
|
||||
|
||||
**Large bag, Masters Mix + Millet, Lion's Mane:**
|
||||
|
||||
```
|
||||
Bit 0 = 1 → Large
|
||||
Bits 1–5 = 00000 → Substrate slot 0 (Masters Mix + Millet)
|
||||
Bits 6–12 = 0000000 → Species code 0 (Hericium erinaceus)
|
||||
|
||||
Binary: 1_00000_0000000
|
||||
Integer: 4096
|
||||
Tag ID: 41h12 tag #4096 (Note: 41h12 max is 2114, so this is illustrative)
|
||||
```
|
||||
|
||||
**Small bag, Rye Berry grain, Pearl Oyster:**
|
||||
|
||||
```
|
||||
Bit 0 = 0 → Small
|
||||
Bits 1–5 = 01111 → Substrate slot 15 (Rye Berry)
|
||||
Bits 6–11 = 000001 → Species code 1 (Pleurotus ostreatus)
|
||||
|
||||
Binary: 0_01111_000001
|
||||
Integer: 961
|
||||
Tag ID: 41h12 tag #961
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. ID Budget
|
||||
|
||||
Total valid AprilTag41h12 IDs: **2,115**
|
||||
|
||||
Distribution across the encoding space:
|
||||
|
||||
| Namespace | Substrate Slots | Species / Substrate | IDs Used |
|
||||
|-----------|----------------|---------------------|----------|
|
||||
| AIO Standard (slots 0–9) | 10 | ~40 avg | ~400 |
|
||||
| AIO Advanced (slots 10–14) | 5 | ~25 avg | ~125 |
|
||||
| Grain (slots 15–23) | 9 | ~40 avg | ~360 |
|
||||
| Bulk (slots 24–31) | 8 | ~40 avg | ~320 |
|
||||
| Other / Reserved (slots 29–31) | 3 | — | ~3 |
|
||||
| **Total active** | **32** | **128 max** | **~1,208** |
|
||||
| **Headroom** | | | **~907** |
|
||||
|
||||
Reserved ID slots are never assigned as printed tags. The Cultivar validates against the active dictionary. An unknown tag ID triggers graceful fallback — it never causes an error state.
|
||||
|
||||
The **25% reserved headroom principle**: approximately one quarter of every slot range is reserved. New substrate or species additions consume reserved slots. A format revision is only required when reserved slots are exhausted.
|
||||
|
||||
---
|
||||
|
||||
## 5. Substrate Slots
|
||||
|
||||
Full table: see [`tables/substrates.md`](tables/substrates.md)
|
||||
|
||||
Substrate slots are split into three categories:
|
||||
|
||||
- AIO (0-14)
|
||||
- Grain (15-23)
|
||||
- Bulk (24-31)
|
||||
|
||||
14, 23, and 31 are custom all-in-one, grain, and bulk substrates respectively and can be used to prompt manual entry.
|
||||
---
|
||||
|
||||
## 6. Species Lookup Tables
|
||||
|
||||
Species lookup tables are defined per substrate slot in [`tables/species/`](tables/species/).
|
||||
|
||||
### Principles
|
||||
|
||||
- The substrate slot selects the active species table
|
||||
- The same species code refers to the same species across all tables where that species appears
|
||||
- Species code 63 = Other/prompt on every table
|
||||
- ~25% of species slots per table are reserved for future additions
|
||||
- Tables are populated as the Cultivar Select catalog is confirmed
|
||||
|
||||
### Per-substrate species files
|
||||
|
||||
| File | Substrate |
|
||||
|------|-----------|
|
||||
| `tables/species/aio-0-flagship-mm.md` | Masters Mix + Millet |
|
||||
| `tables/species/aio-1-speed-mm.md` | Masters Mix + Rye Berry |
|
||||
| `tables/species/aio-2-woody-mm.md` | Masters Mix + Wheat Berry |
|
||||
| `tables/species/aio-3-low-n-mm.md` | MM Lite + Wheat Berry |
|
||||
| `tables/species/aio-4-hobbyist-cvg.md` | CVG + Millet |
|
||||
| `tables/species/aio-5-economy-cvg.md` | CVG + Oats |
|
||||
| `tables/species/aio-6-straw-millet.md` | Pasteurized Straw + Millet |
|
||||
| `tables/species/aio-7-straw-barley.md` | Pasteurized Straw + Barley |
|
||||
| `tables/species/aio-8-pure-wood.md` | HWSD 100% + Wheat Berry |
|
||||
| `tables/species/aio-9-blend.md` | Rye + HWSD Blended 70:30 |
|
||||
| `tables/species/aio-10-adv-soy.md` | Soy Hull Heavy + Millet |
|
||||
| `tables/species/aio-11-adv-rye.md` | Soy Hull Heavy + Rye Berry |
|
||||
| `tables/species/aio-12-waste-stream.md` | Cardboard + Coffee Grounds |
|
||||
| `tables/species/aio-13-dung.md` | Manure Based + Rye Berry |
|
||||
| `tables/species/spawn-15-rye.md` | Rye Berry |
|
||||
| `tables/species/spawn-16-milo.md` | Milo |
|
||||
| ... | ... |
|
||||
|
||||
---
|
||||
|
||||
## 7. QR Code Payload
|
||||
|
||||
The QR code on the back of the bag is the human-facing traceability record and GMP documentation layer. It is not part of the Cultivar's real-time grow workflow.
|
||||
|
||||
The QR payload is a JSON object. The `btv` field (BagTag version) allows future parsers to handle format evolution. All AprilTag grow profile data is included as redundancy.
|
||||
|
||||
### Schema v1
|
||||
|
||||
```json
|
||||
{
|
||||
"btv": 1,
|
||||
"april_tag_id": 2048,
|
||||
"size": "large",
|
||||
"substrate_slot": 0,
|
||||
"substrate_label": "Masters Mix + Millet",
|
||||
"species_code": 0,
|
||||
"species_label": "Hericium erinaceus",
|
||||
"species_common": "Lion's Mane",
|
||||
"producer_id": "GV-001",
|
||||
"batch_id": "GV-001-2026-0420-003",
|
||||
"sterilized_at": "2026-04-20T14:32:00Z",
|
||||
"sterilize_temp_c": 121,
|
||||
"sterilize_psi": 15,
|
||||
"sterilize_duration_mins": 150,
|
||||
"raw_lot": "RL-2026-0418-MM-07",
|
||||
"best_by": "2026-06-18",
|
||||
"batch_url": "https://batch.grove5.com/GV-001-2026-0420-003"
|
||||
}
|
||||
```
|
||||
|
||||
### Field reference
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `btv` | integer | BagTag version. Allows future parsers to handle format evolution. |
|
||||
| `april_tag_id` | integer | Raw AprilTag integer ID (0–2114). Primary grow profile reference. |
|
||||
| `size` | string | `"small"` or `"large"`. Human-readable size label. |
|
||||
| `substrate_slot` | integer | Substrate slot index (0–31). |
|
||||
| `substrate_label` | string | Human-readable substrate name. |
|
||||
| `species_code` | integer | Species code within substrate namespace (0–127). |
|
||||
| `species_label` | string | Scientific name (e.g. `"Hericium erinaceus"`). |
|
||||
| `species_common` | string | Common name (e.g. `"Lion's Mane"`). |
|
||||
| `producer_id` | string | Producer identifier. |
|
||||
| `batch_id` | string | Batch identifier. |
|
||||
| `sterilized_at` | string | ISO 8601 datetime of sterilization. |
|
||||
| `sterilize_temp_c` | integer | Sterilization temperature (°C). |
|
||||
| `sterilize_psi` | integer | Sterilization pressure (PSI). |
|
||||
| `sterilize_duration_mins` | integer | Sterilization duration (minutes). |
|
||||
| `raw_lot` | string | Raw material lot identifier. |
|
||||
| `best_by` | string | Best by date (ISO 8601). |
|
||||
| `batch_url` | string | Grove5 batch record URL for full GMP traceability. |
|
||||
|
||||
---
|
||||
|
||||
## 8. Physical Label Layout
|
||||
|
||||
Both codes fit on a **50×80mm Phomemo label**. Front and back.
|
||||
|
||||
```
|
||||
┌─────────────────────────┐ ┌─────────────────────────┐
|
||||
│ │ │ │
|
||||
│ [AprilTag41h12] │ │ [QR Code] │
|
||||
│ │ │ │
|
||||
│ 12 bits │ │ Full GMP record │
|
||||
│ Grow profile │ │ Traceability │
|
||||
│ Faces camera │ │ Faces human │
|
||||
│ │ │ │
|
||||
└─────────────────────────┘ └─────────────────────────┘
|
||||
FRONT BACK
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. Cultivar Workflow
|
||||
|
||||
### Zero-input bag insertion
|
||||
|
||||
1. Grower inserts bag into Cultivar chamber
|
||||
2. Vision coprocessor detects AprilTag41h12
|
||||
3. Tag ID returned as integer (0–2114)
|
||||
4. Logical decode (13-bit concept): size bit → substrate slot → species code
|
||||
5. Substrate slot selects species lookup table
|
||||
6. Species code resolved to grow profile
|
||||
7. Cultivar loads: temp targets, humidity profile, CO₂/FAE schedule, colonization timeline, BE baseline
|
||||
8. Protocol begins
|
||||
|
||||
The QR code is never part of this workflow. The Cultivar is not designed to natively scan QR codes but it is possible it could in the future. This would handle cases where bags are put into Cultivar in an orientation that prevents the AprilTag from being read but potentially allows QR fallback.
|
||||
|
||||
### Fallback handling
|
||||
|
||||
| Condition | Cultivar response |
|
||||
|-----------|------------------|
|
||||
| Tag damaged or obscured | Prompt QR scan via Cultivar UI |
|
||||
| QR scanned | `april_tag_id` field used to load same grow profile |
|
||||
| Species code 127 (Other/prompt) | Prompt manual species selection |
|
||||
| Tag ID 1906–2114 (reserved) | Graceful error, QR fallback suggested |
|
||||
| Invalid tag ID (< 0 or > 2114) | Error, request valid BagTag |
|
||||
|
||||
---
|
||||
|
||||
## 10. Decoder Decision Tree
|
||||
|
||||
BagTag uses **packed enumeration**: only valid (size, substrate, species) combinations are assigned tag IDs. The decoder performs a direct lookup.
|
||||
|
||||
```
|
||||
Read tag integer (0–2114)
|
||||
│
|
||||
▼
|
||||
Is tag_id in range [0, 1905]? ──── No ───→ Reserved → QR fallback → stop
|
||||
│ Yes
|
||||
▼
|
||||
Lookup in TAG_DECODE_TABLE[tag_id]
|
||||
│
|
||||
├─ Returns: size (small/large)
|
||||
├─ Returns: substrate_slot (0–31)
|
||||
├─ Returns: species_id (0–103, or 127 for Other/prompt)
|
||||
│
|
||||
▼
|
||||
Is species_id == 127? ──────────── Yes ───→ Other/prompt → manual entry → stop
|
||||
│ No
|
||||
▼
|
||||
Load grow profile for (substrate, species)
|
||||
│
|
||||
▼
|
||||
Begin protocol
|
||||
```
|
||||
|
||||
**Logical bit layout** (for documentation only, not used in decoding):
|
||||
```
|
||||
Bit 0 → Size (0=small, 1=large)
|
||||
Bits 1–5 → Substrate slot (0–31)
|
||||
Bits 6–12 → Species ID (0–127, where 127 = Other/prompt)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 11. Versioning
|
||||
|
||||
BagTag version is encoded in the QR payload `btv` field only. The AprilTag has no version field — the 12-bit layout is fixed for the lifetime of v1.
|
||||
|
||||
A format revision (v2) would introduce a new tag family or bit layout. All v1 tags remain decodable by any implementation that retains the v1 lookup tables.
|
||||
|
||||
### Version history
|
||||
|
||||
| Version | Date | Notes |
|
||||
|---------|------|-------|
|
||||
| 1.0 | April 2026 | Initial specification. AprilTag41h12 selected. 12-bit layout locked. AIO substrate table complete. |
|
||||
|
||||
---
|
||||
|
||||
*Grove5 · Open source software, honest hardware · [grove5.com](https://grove5.com)*
|
||||
@@ -0,0 +1,59 @@
|
||||
# Species Table: AIO-0-FLAGSHIP-MM
|
||||
|
||||
**Substrate Slot:** 0
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 0 | Blue Oyster | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 1 | Pearl Oyster | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 2 | Golden Oyster | *Pleurotus citrinopileatus* | Unknown | Permissive |
|
||||
| 3 | Pink Oyster | *Pleurotus djamor* | Unknown | Permissive |
|
||||
| 4 | King Trumpet | *Pleurotus eryngii* | Unknown | Optimal |
|
||||
| 5 | Black Pearl King | *Hybrid* | Unknown | Optimal |
|
||||
| 6 | Phoenix Oyster | *Pleurotus pulmonarius* | Unknown | Optimal |
|
||||
| 7 | Snow Oyster | *Pleurotus columbinus* | Unknown | Optimal |
|
||||
| 8 | Abalone Mushroom | *Pleurotus cystidiosus* | Unknown | Optimal |
|
||||
| 9 | Tarragon Oyster | *Pleurotus euosmus* | Unknown | Optimal |
|
||||
| 10 | Florida Oyster | *Pleurotus floridanus* | Unknown | Permissive |
|
||||
| 11 | Lung Oyster | *Pleurotus pulmonarius* | Unknown | Optimal |
|
||||
| 12 | Late Oyster | *Sarcomyxa serotina* | Unknown | Permissive |
|
||||
| 13 | Veiled Oyster | *Pleurotus dryinus* | Unknown | Permissive |
|
||||
| 14 | Tree Oyster | *Pleurotus sapidus* | Unknown | Optimal |
|
||||
| 15 | Elm Oyster | *Hypsizygus ulmarius* | Unknown | Optimal |
|
||||
| 16 | Indian Oyster | *Pleurotus sajor-caju* | Unknown | Optimal |
|
||||
| 17 | Lion's Mane | *Hericium erinaceus* | Unknown | Optimal |
|
||||
| 18 | Bear's Head | *Hericium americanum* | Unknown | Optimal |
|
||||
| 19 | Coral Tooth | *Hericium coralloides* | Unknown | Optimal |
|
||||
| 20 | Shiitake (Fast) | *Lentinula edodes* | Unknown | Optimal |
|
||||
| 22 | Chestnut | *Pholiota adiposa* | Unknown | Optimal |
|
||||
| 23 | Pioppino | *Cyclocybe aegerita* | Unknown | Optimal |
|
||||
| 24 | Nameko | *Pholiota nameko* | Unknown | Permissive |
|
||||
| 25 | Maitake | *Grifola frondosa* | Unknown | Optimal |
|
||||
| 26 | Brown Beech | *Hypsizygus tessulatus* | Unknown | Permissive |
|
||||
| 27 | White Beech | *Hypsizygus tessulatus* | Unknown | Permissive |
|
||||
| 28 | Wood Ear | *Auricularia auricula-judae* | Unknown | Permissive |
|
||||
| 29 | Black Fungus | *Auricularia polytricha* | Unknown | Optimal |
|
||||
| 30 | Enoki (White) | *Flammulina velutipes* | Unknown | Permissive |
|
||||
| 31 | Enoki (Gold) | *Flammulina velutipes* | Unknown | Optimal |
|
||||
| 32 | Tiger Sawgill | *Lentinus tigrinus* | Unknown | Optimal |
|
||||
| 38 | Velvet Foot (Wild) | *Flammulina velutipes* | Unknown | Optimal |
|
||||
| 39 | Golden Needle | *Flammulina filiformis* | Unknown | Permissive |
|
||||
| 40 | Lion's Mane (LM-01) | *Hericium erinaceus* | Unknown | Optimal |
|
||||
| 41 | Maitake (900) | *Grifola frondosa* | Unknown | Permissive |
|
||||
| 60 | Red Reishi | *Ganoderma lingzhi* | Unknown | Optimal |
|
||||
| 61 | Yellow Reishi | *Ganoderma curtisii* | Unknown | Optimal |
|
||||
| 64 | Southern Reishi | *Ganoderma curtisii* | Unknown | Optimal |
|
||||
| 66 | Reishi (G-W) | *Ganoderma lingzhi* | Unknown | Optimal |
|
||||
| 67 | Turkey Tail | *Trametes versicolor* | Unknown | Optimal |
|
||||
| 68 | Turkey Tail (Wild) | *Trametes versicolor* | Unknown | Optimal |
|
||||
| 90 | Leather Fungus | *Ganoderma sp.* | Unknown | Permissive |
|
||||
| 96 | Blue Oyster (3015) | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 97 | Pearl (P-77) | *Pleurotus ostreatus* | Unknown | Permissive |
|
||||
| 98 | Pink (V-22) | *Pleurotus djamor* | Unknown | Permissive |
|
||||
| 99 | Chestnut (CH-2) | *Pholiota adiposa* | Unknown | Optimal |
|
||||
| 100 | Enoki (Comm.) | *Flammulina velutipes* | Unknown | Permissive |
|
||||
| 101 | Black Pearl (Hy-X) | *Hybrid* | Unknown | Optimal |
|
||||
| 102 | Abalone (Taiwan) | *Pleurotus cystidiosus* | Unknown | Permissive |
|
||||
| 103 | Snow (Deep Blue) | *Pleurotus columbinus* | Unknown | Permissive |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,13 @@
|
||||
# Species Table: AIO-1-SPEED-MM
|
||||
|
||||
**Substrate Slot:** 1
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 17 | Lion's Mane | *Hericium erinaceus* | Unknown | Optimal |
|
||||
| 18 | Bear's Head | *Hericium americanum* | Unknown | Optimal |
|
||||
| 20 | Shiitake (Fast) | *Lentinula edodes* | Unknown | Optimal |
|
||||
| 40 | Lion's Mane (LM-01) | *Hericium erinaceus* | Unknown | Permissive |
|
||||
| 96 | Blue Oyster (3015) | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,16 @@
|
||||
# Species Table: AIO-10-ADV-SOY
|
||||
|
||||
**Substrate Slot:** 10
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 4 | King Trumpet | *Pleurotus eryngii* | Unknown | Optimal |
|
||||
| 17 | Lion's Mane | *Hericium erinaceus* | Unknown | Permissive |
|
||||
| 26 | Brown Beech | *Hypsizygus tessulatus* | Unknown | Optimal |
|
||||
| 27 | White Beech | *Hypsizygus tessulatus* | Unknown | Optimal |
|
||||
| 30 | Enoki (White) | *Flammulina velutipes* | Unknown | Optimal |
|
||||
| 39 | Golden Needle | *Flammulina filiformis* | Unknown | Optimal |
|
||||
| 90 | Leather Fungus | *Ganoderma sp.* | Unknown | Optimal |
|
||||
| 100 | Enoki (Comm.) | *Flammulina velutipes* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,23 @@
|
||||
# Species Table: AIO-11-ADV-RYE
|
||||
|
||||
**Substrate Slot:** 11
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 2 | Golden Oyster | *Pleurotus citrinopileatus* | Unknown | Optimal |
|
||||
| 3 | Pink Oyster | *Pleurotus djamor* | Unknown | Optimal |
|
||||
| 4 | King Trumpet | *Pleurotus eryngii* | Unknown | Permissive |
|
||||
| 5 | Black Pearl King | *Hybrid* | Unknown | Optimal |
|
||||
| 10 | Florida Oyster | *Pleurotus floridanus* | Unknown | Optimal |
|
||||
| 19 | Coral Tooth | *Hericium coralloides* | Unknown | Optimal |
|
||||
| 22 | Chestnut | *Pholiota adiposa* | Unknown | Optimal |
|
||||
| 26 | Brown Beech | *Hypsizygus tessulatus* | Unknown | Optimal |
|
||||
| 27 | White Beech | *Hypsizygus tessulatus* | Unknown | Optimal |
|
||||
| 30 | Enoki (White) | *Flammulina velutipes* | Unknown | Optimal |
|
||||
| 39 | Golden Needle | *Flammulina filiformis* | Unknown | Optimal |
|
||||
| 98 | Pink (V-22) | *Pleurotus djamor* | Unknown | Optimal |
|
||||
| 99 | Chestnut (CH-2) | *Pholiota adiposa* | Unknown | Optimal |
|
||||
| 101 | Black Pearl (Hy-X) | *Hybrid* | Unknown | Optimal |
|
||||
| 102 | Abalone (Taiwan) | *Pleurotus cystidiosus* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,21 @@
|
||||
# Species Table: AIO-12-WASTE-STREAM
|
||||
|
||||
**Substrate Slot:** 12
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 3 | Pink Oyster | *Pleurotus djamor* | Unknown | Permissive |
|
||||
| 43 | Wine Cap | *Stropharia rugosoannulata* | Unknown | Permissive |
|
||||
| 57 | Ink Cap | *Coprinopsis lagopus* | Unknown | Optimal |
|
||||
| 69 | False Turkey Tail | *Stereum ostrea* | Unknown | Optimal |
|
||||
| 84 | Bitter Oyster | *Panellus stipticus* | Unknown | Optimal |
|
||||
| 87 | Split Gill | *Schizophyllum commune* | Unknown | Optimal |
|
||||
| 88 | Diesel Oyster | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 89 | Sugar Cane Oyster | *Pleurotus djamor var.* | Unknown | Optimal |
|
||||
| 90 | Leather Fungus | *Ganoderma sp.* | Unknown | Optimal |
|
||||
| 91 | Packaging Myco | *Various* | Unknown | Optimal |
|
||||
| 92 | Insulation Myco | *Trametes pubescens* | Unknown | Optimal |
|
||||
| 93 | Textile Myco | *Schizophyllum commune* | Unknown | Optimal |
|
||||
| 94 | Paper Myco | *Polyporus sp.* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,25 @@
|
||||
# Species Table: AIO-13-DUNG
|
||||
|
||||
**Substrate Slot:** 13
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 43 | Wine Cap | *Stropharia rugosoannulata* | Unknown | Optimal |
|
||||
| 44 | White Button | *Agaricus bisporus* | Unknown | Optimal |
|
||||
| 45 | Cremini | *Agaricus bisporus* | Unknown | Optimal |
|
||||
| 46 | Portobello | *Agaricus bisporus* | Unknown | Optimal |
|
||||
| 47 | Almond Agaricus | *Agaricus subrufescens* | Unknown | Optimal |
|
||||
| 48 | Shaggy Mane | *Coprinus comatus* | Unknown | Optimal |
|
||||
| 49 | Horse Mushroom | *Agaricus arvensis* | Unknown | Optimal |
|
||||
| 50 | The Prince | *Agaricus augustus* | Unknown | Optimal |
|
||||
| 51 | Blewit | *Lepista nuda* | Unknown | Optimal |
|
||||
| 52 | Paddy Straw | *Volvariella volvacea* | Unknown | Permissive |
|
||||
| 53 | Milky Mushroom | *Calocybe indica* | Unknown | Optimal |
|
||||
| 54 | Bamboo Pith | *Phallus indusiatus* | Unknown | Optimal |
|
||||
| 55 | Bamboo Fungus | *Phallus sp.* | Unknown | Optimal |
|
||||
| 56 | Glistening Inky | *Coprinellus micaceus* | Unknown | Optimal |
|
||||
| 57 | Ink Cap | *Coprinopsis lagopus* | Unknown | Permissive |
|
||||
| 58 | Summer Mushroom | *Agaricus bitorquis* | Unknown | Optimal |
|
||||
| 59 | Field Mushroom | *Agaricus campestris* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,112 @@
|
||||
# Species Table: AIO-14-CUSTOM
|
||||
|
||||
**Substrate Slot:** 14
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 0 | Blue Oyster | *Pleurotus ostreatus* | Unknown | Permissive |
|
||||
| 1 | Pearl Oyster | *Pleurotus ostreatus* | Unknown | Permissive |
|
||||
| 2 | Golden Oyster | *Pleurotus citrinopileatus* | Unknown | Permissive |
|
||||
| 3 | Pink Oyster | *Pleurotus djamor* | Unknown | Permissive |
|
||||
| 4 | King Trumpet | *Pleurotus eryngii* | Unknown | Permissive |
|
||||
| 5 | Black Pearl King | *Hybrid* | Unknown | Permissive |
|
||||
| 6 | Phoenix Oyster | *Pleurotus pulmonarius* | Unknown | Permissive |
|
||||
| 7 | Snow Oyster | *Pleurotus columbinus* | Unknown | Permissive |
|
||||
| 8 | Abalone Mushroom | *Pleurotus cystidiosus* | Unknown | Permissive |
|
||||
| 9 | Tarragon Oyster | *Pleurotus euosmus* | Unknown | Permissive |
|
||||
| 10 | Florida Oyster | *Pleurotus floridanus* | Unknown | Permissive |
|
||||
| 11 | Lung Oyster | *Pleurotus pulmonarius* | Unknown | Permissive |
|
||||
| 12 | Late Oyster | *Sarcomyxa serotina* | Unknown | Permissive |
|
||||
| 13 | Veiled Oyster | *Pleurotus dryinus* | Unknown | Permissive |
|
||||
| 14 | Tree Oyster | *Pleurotus sapidus* | Unknown | Permissive |
|
||||
| 15 | Elm Oyster | *Hypsizygus ulmarius* | Unknown | Permissive |
|
||||
| 16 | Indian Oyster | *Pleurotus sajor-caju* | Unknown | Permissive |
|
||||
| 17 | Lion's Mane | *Hericium erinaceus* | Unknown | Permissive |
|
||||
| 18 | Bear's Head | *Hericium americanum* | Unknown | Permissive |
|
||||
| 19 | Coral Tooth | *Hericium coralloides* | Unknown | Permissive |
|
||||
| 20 | Shiitake (Fast) | *Lentinula edodes* | Unknown | Permissive |
|
||||
| 21 | Shiitake (Donko) | *Lentinula edodes* | Unknown | Permissive |
|
||||
| 22 | Chestnut | *Pholiota adiposa* | Unknown | Permissive |
|
||||
| 23 | Pioppino | *Cyclocybe aegerita* | Unknown | Permissive |
|
||||
| 24 | Nameko | *Pholiota nameko* | Unknown | Permissive |
|
||||
| 25 | Maitake | *Grifola frondosa* | Unknown | Permissive |
|
||||
| 26 | Brown Beech | *Hypsizygus tessulatus* | Unknown | Permissive |
|
||||
| 27 | White Beech | *Hypsizygus tessulatus* | Unknown | Permissive |
|
||||
| 28 | Wood Ear | *Auricularia auricula-judae* | Unknown | Permissive |
|
||||
| 29 | Black Fungus | *Auricularia polytricha* | Unknown | Permissive |
|
||||
| 30 | Enoki (White) | *Flammulina velutipes* | Unknown | Permissive |
|
||||
| 31 | Enoki (Gold) | *Flammulina velutipes* | Unknown | Permissive |
|
||||
| 32 | Tiger Sawgill | *Lentinus tigrinus* | Unknown | Permissive |
|
||||
| 33 | Cauliflower Mushroom | *Sparassis crispa* | Unknown | Permissive |
|
||||
| 34 | Beefsteak Fungus | *Fistulina hepatica* | Unknown | Permissive |
|
||||
| 35 | Chicken of the Woods | *Laetiporus sulphureus* | Unknown | Permissive |
|
||||
| 36 | Black Poplar | *Cyclocybe aegerita* | Unknown | Permissive |
|
||||
| 37 | Dryad's Saddle | *Cerioporus squamosus* | Unknown | Permissive |
|
||||
| 38 | Velvet Foot (Wild) | *Flammulina velutipes* | Unknown | Permissive |
|
||||
| 39 | Golden Needle | *Flammulina filiformis* | Unknown | Permissive |
|
||||
| 40 | Lion's Mane (LM-01) | *Hericium erinaceus* | Unknown | Permissive |
|
||||
| 41 | Maitake (900) | *Grifola frondosa* | Unknown | Permissive |
|
||||
| 42 | White-pored Chicken | *Laetiporus cincinnatus* | Unknown | Permissive |
|
||||
| 43 | Wine Cap | *Stropharia rugosoannulata* | Unknown | Permissive |
|
||||
| 44 | White Button | *Agaricus bisporus* | Unknown | Permissive |
|
||||
| 45 | Cremini | *Agaricus bisporus* | Unknown | Permissive |
|
||||
| 46 | Portobello | *Agaricus bisporus* | Unknown | Permissive |
|
||||
| 47 | Almond Agaricus | *Agaricus subrufescens* | Unknown | Permissive |
|
||||
| 48 | Shaggy Mane | *Coprinus comatus* | Unknown | Permissive |
|
||||
| 49 | Horse Mushroom | *Agaricus arvensis* | Unknown | Permissive |
|
||||
| 50 | The Prince | *Agaricus augustus* | Unknown | Permissive |
|
||||
| 51 | Blewit | *Lepista nuda* | Unknown | Permissive |
|
||||
| 52 | Paddy Straw | *Volvariella volvacea* | Unknown | Permissive |
|
||||
| 53 | Milky Mushroom | *Calocybe indica* | Unknown | Permissive |
|
||||
| 54 | Bamboo Pith | *Phallus indusiatus* | Unknown | Permissive |
|
||||
| 55 | Bamboo Fungus | *Phallus sp.* | Unknown | Permissive |
|
||||
| 56 | Glistening Inky | *Coprinellus micaceus* | Unknown | Permissive |
|
||||
| 57 | Ink Cap | *Coprinopsis lagopus* | Unknown | Permissive |
|
||||
| 58 | Summer Mushroom | *Agaricus bitorquis* | Unknown | Permissive |
|
||||
| 59 | Field Mushroom | *Agaricus campestris* | Unknown | Permissive |
|
||||
| 60 | Red Reishi | *Ganoderma lingzhi* | Unknown | Permissive |
|
||||
| 61 | Yellow Reishi | *Ganoderma curtisii* | Unknown | Permissive |
|
||||
| 62 | Black Reishi | *Ganoderma sinense* | Unknown | Permissive |
|
||||
| 63 | Oregon Reishi | *Ganoderma oregonense* | Unknown | Permissive |
|
||||
| 64 | Southern Reishi | *Ganoderma curtisii* | Unknown | Permissive |
|
||||
| 65 | Hemlock Varnish | *Ganoderma tsugae* | Unknown | Permissive |
|
||||
| 66 | Reishi (G-W) | *Ganoderma lingzhi* | Unknown | Permissive |
|
||||
| 67 | Turkey Tail | *Trametes versicolor* | Unknown | Permissive |
|
||||
| 68 | Turkey Tail (Wild) | *Trametes versicolor* | Unknown | Permissive |
|
||||
| 69 | False Turkey Tail | *Stereum ostrea* | Unknown | Permissive |
|
||||
| 70 | Artist's Conk | *Ganoderma applanatum* | Unknown | Permissive |
|
||||
| 71 | Agarikon | *Laricifomes officinalis* | Unknown | Permissive |
|
||||
| 72 | Mesima | *Phellinus linteus* | Unknown | Permissive |
|
||||
| 73 | Birch Polypore | *Fomitopsis betulina* | Unknown | Permissive |
|
||||
| 74 | Tinder Polypore | *Fomitopsis fomentarius* | Unknown | Permissive |
|
||||
| 75 | False Tinder Poly | *Phellinus igniarius* | Unknown | Permissive |
|
||||
| 76 | Hoof Fungus | *Fomitopsis fomentarius* | Unknown | Permissive |
|
||||
| 77 | Amadou Sponge | *Fomitopsis fomentarius* | Unknown | Permissive |
|
||||
| 78 | Willow Bracket | *Phellinus igniarius* | Unknown | Permissive |
|
||||
| 79 | Pine Conk | *Porodaedalea pini* | Unknown | Permissive |
|
||||
| 80 | Resinous Polypore | *Ischnoderma resinosum* | Unknown | Permissive |
|
||||
| 81 | Cinnabar Polypore | *Pycnoporus cinnabarinus* | Unknown | Permissive |
|
||||
| 82 | Violet Polypore | *Trichaptum biforme* | Unknown | Permissive |
|
||||
| 83 | Purple-Gilled Poly | *Trichaptum biforme* | Unknown | Permissive |
|
||||
| 84 | Bitter Oyster | *Panellus stipticus* | Unknown | Permissive |
|
||||
| 85 | Cordyceps | *Cordyceps militaris* | Unknown | Optimal |
|
||||
| 86 | Silver Ear | *Tremella fuciformis* | Unknown | Optimal |
|
||||
| 87 | Split Gill | *Schizophyllum commune* | Unknown | Permissive |
|
||||
| 88 | Diesel Oyster | *Pleurotus ostreatus* | Unknown | Permissive |
|
||||
| 89 | Sugar Cane Oyster | *Pleurotus djamor var.* | Unknown | Permissive |
|
||||
| 90 | Leather Fungus | *Ganoderma sp.* | Unknown | Permissive |
|
||||
| 91 | Packaging Myco | *Various* | Unknown | Permissive |
|
||||
| 92 | Insulation Myco | *Trametes pubescens* | Unknown | Permissive |
|
||||
| 93 | Textile Myco | *Schizophyllum commune* | Unknown | Permissive |
|
||||
| 94 | Paper Myco | *Polyporus sp.* | Unknown | Permissive |
|
||||
| 95 | Shiitake (LE-46) | *Lentinula edodes* | Unknown | Permissive |
|
||||
| 96 | Blue Oyster (3015) | *Pleurotus ostreatus* | Unknown | Permissive |
|
||||
| 97 | Pearl (P-77) | *Pleurotus ostreatus* | Unknown | Permissive |
|
||||
| 98 | Pink (V-22) | *Pleurotus djamor* | Unknown | Permissive |
|
||||
| 99 | Chestnut (CH-2) | *Pholiota adiposa* | Unknown | Permissive |
|
||||
| 100 | Enoki (Comm.) | *Flammulina velutipes* | Unknown | Permissive |
|
||||
| 101 | Black Pearl (Hy-X) | *Hybrid* | Unknown | Permissive |
|
||||
| 102 | Abalone (Taiwan) | *Pleurotus cystidiosus* | Unknown | Permissive |
|
||||
| 103 | Snow (Deep Blue) | *Pleurotus columbinus* | Unknown | Permissive |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,37 @@
|
||||
# Species Table: AIO-2-WOODY-MM
|
||||
|
||||
**Substrate Slot:** 2
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 4 | King Trumpet | *Pleurotus eryngii* | Unknown | Permissive |
|
||||
| 5 | Black Pearl King | *Hybrid* | Unknown | Permissive |
|
||||
| 12 | Late Oyster | *Sarcomyxa serotina* | Unknown | Permissive |
|
||||
| 13 | Veiled Oyster | *Pleurotus dryinus* | Unknown | Permissive |
|
||||
| 14 | Tree Oyster | *Pleurotus sapidus* | Unknown | Permissive |
|
||||
| 15 | Elm Oyster | *Hypsizygus ulmarius* | Unknown | Optimal |
|
||||
| 17 | Lion's Mane | *Hericium erinaceus* | Unknown | Permissive |
|
||||
| 18 | Bear's Head | *Hericium americanum* | Unknown | Permissive |
|
||||
| 19 | Coral Tooth | *Hericium coralloides* | Unknown | Permissive |
|
||||
| 20 | Shiitake (Fast) | *Lentinula edodes* | Unknown | Permissive |
|
||||
| 21 | Shiitake (Donko) | *Lentinula edodes* | Unknown | Permissive |
|
||||
| 22 | Chestnut | *Pholiota adiposa* | Unknown | Permissive |
|
||||
| 23 | Pioppino | *Cyclocybe aegerita* | Unknown | Optimal |
|
||||
| 25 | Maitake | *Grifola frondosa* | Unknown | Optimal |
|
||||
| 31 | Enoki (Gold) | *Flammulina velutipes* | Unknown | Optimal |
|
||||
| 32 | Tiger Sawgill | *Lentinus tigrinus* | Unknown | Permissive |
|
||||
| 33 | Cauliflower Mushroom | *Sparassis crispa* | Unknown | Optimal |
|
||||
| 34 | Beefsteak Fungus | *Fistulina hepatica* | Unknown | Optimal |
|
||||
| 35 | Chicken of the Woods | *Laetiporus sulphureus* | Unknown | Permissive |
|
||||
| 36 | Black Poplar | *Cyclocybe aegerita* | Unknown | Optimal |
|
||||
| 37 | Dryad's Saddle | *Cerioporus squamosus* | Unknown | Permissive |
|
||||
| 38 | Velvet Foot (Wild) | *Flammulina velutipes* | Unknown | Optimal |
|
||||
| 40 | Lion's Mane (LM-01) | *Hericium erinaceus* | Unknown | Permissive |
|
||||
| 41 | Maitake (900) | *Grifola frondosa* | Unknown | Optimal |
|
||||
| 42 | White-pored Chicken | *Laetiporus cincinnatus* | Unknown | Permissive |
|
||||
| 62 | Black Reishi | *Ganoderma sinense* | Unknown | Permissive |
|
||||
| 95 | Shiitake (LE-46) | *Lentinula edodes* | Unknown | Permissive |
|
||||
| 99 | Chestnut (CH-2) | *Pholiota adiposa* | Unknown | Permissive |
|
||||
| 101 | Black Pearl (Hy-X) | *Hybrid* | Unknown | Permissive |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,29 @@
|
||||
# Species Table: AIO-3-LOW-N-MM
|
||||
|
||||
**Substrate Slot:** 3
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 21 | Shiitake (Donko) | *Lentinula edodes* | Unknown | Optimal |
|
||||
| 24 | Nameko | *Pholiota nameko* | Unknown | Optimal |
|
||||
| 25 | Maitake | *Grifola frondosa* | Unknown | Permissive |
|
||||
| 33 | Cauliflower Mushroom | *Sparassis crispa* | Unknown | Permissive |
|
||||
| 36 | Black Poplar | *Cyclocybe aegerita* | Unknown | Optimal |
|
||||
| 41 | Maitake (900) | *Grifola frondosa* | Unknown | Permissive |
|
||||
| 60 | Red Reishi | *Ganoderma lingzhi* | Unknown | Optimal |
|
||||
| 61 | Yellow Reishi | *Ganoderma curtisii* | Unknown | Optimal |
|
||||
| 62 | Black Reishi | *Ganoderma sinense* | Unknown | Optimal |
|
||||
| 63 | Oregon Reishi | *Ganoderma oregonense* | Unknown | Permissive |
|
||||
| 64 | Southern Reishi | *Ganoderma curtisii* | Unknown | Permissive |
|
||||
| 65 | Hemlock Varnish | *Ganoderma tsugae* | Unknown | Permissive |
|
||||
| 66 | Reishi (G-W) | *Ganoderma lingzhi* | Unknown | Optimal |
|
||||
| 67 | Turkey Tail | *Trametes versicolor* | Unknown | Permissive |
|
||||
| 69 | False Turkey Tail | *Stereum ostrea* | Unknown | Permissive |
|
||||
| 70 | Artist's Conk | *Ganoderma applanatum* | Unknown | Permissive |
|
||||
| 80 | Resinous Polypore | *Ischnoderma resinosum* | Unknown | Permissive |
|
||||
| 81 | Cinnabar Polypore | *Pycnoporus cinnabarinus* | Unknown | Permissive |
|
||||
| 82 | Violet Polypore | *Trichaptum biforme* | Unknown | Permissive |
|
||||
| 83 | Purple-Gilled Poly | *Trichaptum biforme* | Unknown | Permissive |
|
||||
| 95 | Shiitake (LE-46) | *Lentinula edodes* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,18 @@
|
||||
# Species Table: AIO-4-HOBBYIST-CVG
|
||||
|
||||
**Substrate Slot:** 4
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 0 | Blue Oyster | *Pleurotus ostreatus* | Unknown | Permissive |
|
||||
| 6 | Phoenix Oyster | *Pleurotus pulmonarius* | Unknown | Permissive |
|
||||
| 7 | Snow Oyster | *Pleurotus columbinus* | Unknown | Optimal |
|
||||
| 8 | Abalone Mushroom | *Pleurotus cystidiosus* | Unknown | Optimal |
|
||||
| 9 | Tarragon Oyster | *Pleurotus euosmus* | Unknown | Optimal |
|
||||
| 11 | Lung Oyster | *Pleurotus pulmonarius* | Unknown | Optimal |
|
||||
| 16 | Indian Oyster | *Pleurotus sajor-caju* | Unknown | Permissive |
|
||||
| 91 | Packaging Myco | *Various* | Unknown | Permissive |
|
||||
| 102 | Abalone (Taiwan) | *Pleurotus cystidiosus* | Unknown | Optimal |
|
||||
| 103 | Snow (Deep Blue) | *Pleurotus columbinus* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,8 @@
|
||||
# Species Table: AIO-5-ECONOMY-CVG
|
||||
|
||||
**Substrate Slot:** 5
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,21 @@
|
||||
# Species Table: AIO-6-STRAW-MILLET
|
||||
|
||||
**Substrate Slot:** 6
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 0 | Blue Oyster | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 1 | Pearl Oyster | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 2 | Golden Oyster | *Pleurotus citrinopileatus* | Unknown | Optimal |
|
||||
| 3 | Pink Oyster | *Pleurotus djamor* | Unknown | Optimal |
|
||||
| 6 | Phoenix Oyster | *Pleurotus pulmonarius* | Unknown | Optimal |
|
||||
| 10 | Florida Oyster | *Pleurotus floridanus* | Unknown | Optimal |
|
||||
| 16 | Indian Oyster | *Pleurotus sajor-caju* | Unknown | Optimal |
|
||||
| 28 | Wood Ear | *Auricularia auricula-judae* | Unknown | Optimal |
|
||||
| 43 | Wine Cap | *Stropharia rugosoannulata* | Unknown | Permissive |
|
||||
| 52 | Paddy Straw | *Volvariella volvacea* | Unknown | Optimal |
|
||||
| 96 | Blue Oyster (3015) | *Pleurotus ostreatus* | Unknown | Permissive |
|
||||
| 97 | Pearl (P-77) | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 98 | Pink (V-22) | *Pleurotus djamor* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,13 @@
|
||||
# Species Table: AIO-7-STRAW-BARLEY
|
||||
|
||||
**Substrate Slot:** 7
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 0 | Blue Oyster | *Pleurotus ostreatus* | Unknown | Permissive |
|
||||
| 1 | Pearl Oyster | *Pleurotus ostreatus* | Unknown | Permissive |
|
||||
| 16 | Indian Oyster | *Pleurotus sajor-caju* | Unknown | Permissive |
|
||||
| 52 | Paddy Straw | *Volvariella volvacea* | Unknown | Optimal |
|
||||
| 97 | Pearl (P-77) | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,49 @@
|
||||
# Species Table: AIO-8-PURE-WOOD
|
||||
|
||||
**Substrate Slot:** 8
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 12 | Late Oyster | *Sarcomyxa serotina* | Unknown | Optimal |
|
||||
| 13 | Veiled Oyster | *Pleurotus dryinus* | Unknown | Optimal |
|
||||
| 15 | Elm Oyster | *Hypsizygus ulmarius* | Unknown | Permissive |
|
||||
| 21 | Shiitake (Donko) | *Lentinula edodes* | Unknown | Optimal |
|
||||
| 24 | Nameko | *Pholiota nameko* | Unknown | Optimal |
|
||||
| 28 | Wood Ear | *Auricularia auricula-judae* | Unknown | Optimal |
|
||||
| 29 | Black Fungus | *Auricularia polytricha* | Unknown | Optimal |
|
||||
| 31 | Enoki (Gold) | *Flammulina velutipes* | Unknown | Permissive |
|
||||
| 33 | Cauliflower Mushroom | *Sparassis crispa* | Unknown | Optimal |
|
||||
| 34 | Beefsteak Fungus | *Fistulina hepatica* | Unknown | Permissive |
|
||||
| 35 | Chicken of the Woods | *Laetiporus sulphureus* | Unknown | Optimal |
|
||||
| 36 | Black Poplar | *Cyclocybe aegerita* | Unknown | Permissive |
|
||||
| 37 | Dryad's Saddle | *Cerioporus squamosus* | Unknown | Optimal |
|
||||
| 38 | Velvet Foot (Wild) | *Flammulina velutipes* | Unknown | Permissive |
|
||||
| 42 | White-pored Chicken | *Laetiporus cincinnatus* | Unknown | Optimal |
|
||||
| 60 | Red Reishi | *Ganoderma lingzhi* | Unknown | Permissive |
|
||||
| 62 | Black Reishi | *Ganoderma sinense* | Unknown | Optimal |
|
||||
| 63 | Oregon Reishi | *Ganoderma oregonense* | Unknown | Optimal |
|
||||
| 65 | Hemlock Varnish | *Ganoderma tsugae* | Unknown | Optimal |
|
||||
| 66 | Reishi (G-W) | *Ganoderma lingzhi* | Unknown | Permissive |
|
||||
| 67 | Turkey Tail | *Trametes versicolor* | Unknown | Optimal |
|
||||
| 68 | Turkey Tail (Wild) | *Trametes versicolor* | Unknown | Optimal |
|
||||
| 69 | False Turkey Tail | *Stereum ostrea* | Unknown | Optimal |
|
||||
| 70 | Artist's Conk | *Ganoderma applanatum* | Unknown | Optimal |
|
||||
| 71 | Agarikon | *Laricifomes officinalis* | Unknown | Optimal |
|
||||
| 72 | Mesima | *Phellinus linteus* | Unknown | Optimal |
|
||||
| 73 | Birch Polypore | *Fomitopsis betulina* | Unknown | Optimal |
|
||||
| 74 | Tinder Polypore | *Fomitopsis fomentarius* | Unknown | Optimal |
|
||||
| 75 | False Tinder Poly | *Phellinus igniarius* | Unknown | Optimal |
|
||||
| 76 | Hoof Fungus | *Fomitopsis fomentarius* | Unknown | Optimal |
|
||||
| 77 | Amadou Sponge | *Fomitopsis fomentarius* | Unknown | Optimal |
|
||||
| 78 | Willow Bracket | *Phellinus igniarius* | Unknown | Optimal |
|
||||
| 79 | Pine Conk | *Porodaedalea pini* | Unknown | Optimal |
|
||||
| 80 | Resinous Polypore | *Ischnoderma resinosum* | Unknown | Optimal |
|
||||
| 81 | Cinnabar Polypore | *Pycnoporus cinnabarinus* | Unknown | Optimal |
|
||||
| 82 | Violet Polypore | *Trichaptum biforme* | Unknown | Optimal |
|
||||
| 83 | Purple-Gilled Poly | *Trichaptum biforme* | Unknown | Optimal |
|
||||
| 84 | Bitter Oyster | *Panellus stipticus* | Unknown | Permissive |
|
||||
| 87 | Split Gill | *Schizophyllum commune* | Unknown | Permissive |
|
||||
| 92 | Insulation Myco | *Trametes pubescens* | Unknown | Permissive |
|
||||
| 95 | Shiitake (LE-46) | *Lentinula edodes* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,29 @@
|
||||
# Species Table: AIO-9-BLEND
|
||||
|
||||
**Substrate Slot:** 9
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 0 | Blue Oyster | *Pleurotus ostreatus* | Unknown | Permissive |
|
||||
| 1 | Pearl Oyster | *Pleurotus ostreatus* | Unknown | Permissive |
|
||||
| 6 | Phoenix Oyster | *Pleurotus pulmonarius* | Unknown | Permissive |
|
||||
| 7 | Snow Oyster | *Pleurotus columbinus* | Unknown | Permissive |
|
||||
| 8 | Abalone Mushroom | *Pleurotus cystidiosus* | Unknown | Permissive |
|
||||
| 9 | Tarragon Oyster | *Pleurotus euosmus* | Unknown | Permissive |
|
||||
| 11 | Lung Oyster | *Pleurotus pulmonarius* | Unknown | Permissive |
|
||||
| 14 | Tree Oyster | *Pleurotus sapidus* | Unknown | Optimal |
|
||||
| 15 | Elm Oyster | *Hypsizygus ulmarius* | Unknown | Permissive |
|
||||
| 17 | Lion's Mane | *Hericium erinaceus* | Unknown | Permissive |
|
||||
| 18 | Bear's Head | *Hericium americanum* | Unknown | Permissive |
|
||||
| 20 | Shiitake (Fast) | *Lentinula edodes* | Unknown | Permissive |
|
||||
| 23 | Pioppino | *Cyclocybe aegerita* | Unknown | Permissive |
|
||||
| 28 | Wood Ear | *Auricularia auricula-judae* | Unknown | Permissive |
|
||||
| 29 | Black Fungus | *Auricularia polytricha* | Unknown | Permissive |
|
||||
| 32 | Tiger Sawgill | *Lentinus tigrinus* | Unknown | Optimal |
|
||||
| 61 | Yellow Reishi | *Ganoderma curtisii* | Unknown | Permissive |
|
||||
| 64 | Southern Reishi | *Ganoderma curtisii* | Unknown | Optimal |
|
||||
| 67 | Turkey Tail | *Trametes versicolor* | Unknown | Permissive |
|
||||
| 68 | Turkey Tail (Wild) | *Trametes versicolor* | Unknown | Permissive |
|
||||
| 103 | Snow (Deep Blue) | *Pleurotus columbinus* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,61 @@
|
||||
# Species Table: BULK-24-MM
|
||||
|
||||
**Substrate Slot:** 24
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 0 | Blue Oyster | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 1 | Pearl Oyster | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 4 | King Trumpet | *Pleurotus eryngii* | Unknown | Optimal |
|
||||
| 5 | Black Pearl King | *Hybrid* | Unknown | Optimal |
|
||||
| 6 | Phoenix Oyster | *Pleurotus pulmonarius* | Unknown | Optimal |
|
||||
| 7 | Snow Oyster | *Pleurotus columbinus* | Unknown | Optimal |
|
||||
| 8 | Abalone Mushroom | *Pleurotus cystidiosus* | Unknown | Optimal |
|
||||
| 9 | Tarragon Oyster | *Pleurotus euosmus* | Unknown | Optimal |
|
||||
| 10 | Florida Oyster | *Pleurotus floridanus* | Unknown | Permissive |
|
||||
| 11 | Lung Oyster | *Pleurotus pulmonarius* | Unknown | Optimal |
|
||||
| 14 | Tree Oyster | *Pleurotus sapidus* | Unknown | Optimal |
|
||||
| 15 | Elm Oyster | *Hypsizygus ulmarius* | Unknown | Optimal |
|
||||
| 16 | Indian Oyster | *Pleurotus sajor-caju* | Unknown | Optimal |
|
||||
| 17 | Lion's Mane | *Hericium erinaceus* | Unknown | Optimal |
|
||||
| 18 | Bear's Head | *Hericium americanum* | Unknown | Optimal |
|
||||
| 19 | Coral Tooth | *Hericium coralloides* | Unknown | Optimal |
|
||||
| 20 | Shiitake (Fast) | *Lentinula edodes* | Unknown | Optimal |
|
||||
| 21 | Shiitake (Donko) | *Lentinula edodes* | Unknown | Permissive |
|
||||
| 22 | Chestnut | *Pholiota adiposa* | Unknown | Optimal |
|
||||
| 23 | Pioppino | *Cyclocybe aegerita* | Unknown | Optimal |
|
||||
| 24 | Nameko | *Pholiota nameko* | Unknown | Permissive |
|
||||
| 25 | Maitake | *Grifola frondosa* | Unknown | Optimal |
|
||||
| 26 | Brown Beech | *Hypsizygus tessulatus* | Unknown | Optimal |
|
||||
| 27 | White Beech | *Hypsizygus tessulatus* | Unknown | Optimal |
|
||||
| 28 | Wood Ear | *Auricularia auricula-judae* | Unknown | Permissive |
|
||||
| 29 | Black Fungus | *Auricularia polytricha* | Unknown | Permissive |
|
||||
| 30 | Enoki (White) | *Flammulina velutipes* | Unknown | Permissive |
|
||||
| 31 | Enoki (Gold) | *Flammulina velutipes* | Unknown | Optimal |
|
||||
| 32 | Tiger Sawgill | *Lentinus tigrinus* | Unknown | Optimal |
|
||||
| 33 | Cauliflower Mushroom | *Sparassis crispa* | Unknown | Permissive |
|
||||
| 34 | Beefsteak Fungus | *Fistulina hepatica* | Unknown | Optimal |
|
||||
| 35 | Chicken of the Woods | *Laetiporus sulphureus* | Unknown | Permissive |
|
||||
| 38 | Velvet Foot (Wild) | *Flammulina velutipes* | Unknown | Optimal |
|
||||
| 39 | Golden Needle | *Flammulina filiformis* | Unknown | Permissive |
|
||||
| 40 | Lion's Mane (LM-01) | *Hericium erinaceus* | Unknown | Optimal |
|
||||
| 41 | Maitake (900) | *Grifola frondosa* | Unknown | Optimal |
|
||||
| 42 | White-pored Chicken | *Laetiporus cincinnatus* | Unknown | Permissive |
|
||||
| 60 | Red Reishi | *Ganoderma lingzhi* | Unknown | Optimal |
|
||||
| 61 | Yellow Reishi | *Ganoderma curtisii* | Unknown | Optimal |
|
||||
| 64 | Southern Reishi | *Ganoderma curtisii* | Unknown | Optimal |
|
||||
| 66 | Reishi (G-W) | *Ganoderma lingzhi* | Unknown | Optimal |
|
||||
| 67 | Turkey Tail | *Trametes versicolor* | Unknown | Optimal |
|
||||
| 68 | Turkey Tail (Wild) | *Trametes versicolor* | Unknown | Permissive |
|
||||
| 90 | Leather Fungus | *Ganoderma sp.* | Unknown | Permissive |
|
||||
| 95 | Shiitake (LE-46) | *Lentinula edodes* | Unknown | Permissive |
|
||||
| 96 | Blue Oyster (3015) | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 97 | Pearl (P-77) | *Pleurotus ostreatus* | Unknown | Permissive |
|
||||
| 98 | Pink (V-22) | *Pleurotus djamor* | Unknown | Permissive |
|
||||
| 99 | Chestnut (CH-2) | *Pholiota adiposa* | Unknown | Optimal |
|
||||
| 100 | Enoki (Comm.) | *Flammulina velutipes* | Unknown | Permissive |
|
||||
| 101 | Black Pearl (Hy-X) | *Hybrid* | Unknown | Optimal |
|
||||
| 102 | Abalone (Taiwan) | *Pleurotus cystidiosus* | Unknown | Permissive |
|
||||
| 103 | Snow (Deep Blue) | *Pleurotus columbinus* | Unknown | Permissive |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,62 @@
|
||||
# Species Table: BULK-25-HWSD
|
||||
|
||||
**Substrate Slot:** 25
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 7 | Snow Oyster | *Pleurotus columbinus* | Unknown | Permissive |
|
||||
| 8 | Abalone Mushroom | *Pleurotus cystidiosus* | Unknown | Permissive |
|
||||
| 9 | Tarragon Oyster | *Pleurotus euosmus* | Unknown | Permissive |
|
||||
| 11 | Lung Oyster | *Pleurotus pulmonarius* | Unknown | Permissive |
|
||||
| 12 | Late Oyster | *Sarcomyxa serotina* | Unknown | Optimal |
|
||||
| 13 | Veiled Oyster | *Pleurotus dryinus* | Unknown | Optimal |
|
||||
| 14 | Tree Oyster | *Pleurotus sapidus* | Unknown | Permissive |
|
||||
| 15 | Elm Oyster | *Hypsizygus ulmarius* | Unknown | Optimal |
|
||||
| 17 | Lion's Mane | *Hericium erinaceus* | Unknown | Permissive |
|
||||
| 18 | Bear's Head | *Hericium americanum* | Unknown | Permissive |
|
||||
| 19 | Coral Tooth | *Hericium coralloides* | Unknown | Permissive |
|
||||
| 21 | Shiitake (Donko) | *Lentinula edodes* | Unknown | Optimal |
|
||||
| 23 | Pioppino | *Cyclocybe aegerita* | Unknown | Optimal |
|
||||
| 24 | Nameko | *Pholiota nameko* | Unknown | Optimal |
|
||||
| 25 | Maitake | *Grifola frondosa* | Unknown | Permissive |
|
||||
| 28 | Wood Ear | *Auricularia auricula-judae* | Unknown | Optimal |
|
||||
| 29 | Black Fungus | *Auricularia polytricha* | Unknown | Optimal |
|
||||
| 31 | Enoki (Gold) | *Flammulina velutipes* | Unknown | Permissive |
|
||||
| 32 | Tiger Sawgill | *Lentinus tigrinus* | Unknown | Permissive |
|
||||
| 33 | Cauliflower Mushroom | *Sparassis crispa* | Unknown | Optimal |
|
||||
| 34 | Beefsteak Fungus | *Fistulina hepatica* | Unknown | Permissive |
|
||||
| 35 | Chicken of the Woods | *Laetiporus sulphureus* | Unknown | Optimal |
|
||||
| 36 | Black Poplar | *Cyclocybe aegerita* | Unknown | Optimal |
|
||||
| 37 | Dryad's Saddle | *Cerioporus squamosus* | Unknown | Optimal |
|
||||
| 38 | Velvet Foot (Wild) | *Flammulina velutipes* | Unknown | Permissive |
|
||||
| 42 | White-pored Chicken | *Laetiporus cincinnatus* | Unknown | Optimal |
|
||||
| 60 | Red Reishi | *Ganoderma lingzhi* | Unknown | Optimal |
|
||||
| 61 | Yellow Reishi | *Ganoderma curtisii* | Unknown | Optimal |
|
||||
| 62 | Black Reishi | *Ganoderma sinense* | Unknown | Optimal |
|
||||
| 63 | Oregon Reishi | *Ganoderma oregonense* | Unknown | Optimal |
|
||||
| 64 | Southern Reishi | *Ganoderma curtisii* | Unknown | Permissive |
|
||||
| 65 | Hemlock Varnish | *Ganoderma tsugae* | Unknown | Optimal |
|
||||
| 66 | Reishi (G-W) | *Ganoderma lingzhi* | Unknown | Permissive |
|
||||
| 67 | Turkey Tail | *Trametes versicolor* | Unknown | Optimal |
|
||||
| 68 | Turkey Tail (Wild) | *Trametes versicolor* | Unknown | Optimal |
|
||||
| 69 | False Turkey Tail | *Stereum ostrea* | Unknown | Optimal |
|
||||
| 70 | Artist's Conk | *Ganoderma applanatum* | Unknown | Optimal |
|
||||
| 71 | Agarikon | *Laricifomes officinalis* | Unknown | Optimal |
|
||||
| 72 | Mesima | *Phellinus linteus* | Unknown | Optimal |
|
||||
| 73 | Birch Polypore | *Fomitopsis betulina* | Unknown | Optimal |
|
||||
| 74 | Tinder Polypore | *Fomitopsis fomentarius* | Unknown | Optimal |
|
||||
| 75 | False Tinder Poly | *Phellinus igniarius* | Unknown | Optimal |
|
||||
| 76 | Hoof Fungus | *Fomitopsis fomentarius* | Unknown | Optimal |
|
||||
| 77 | Amadou Sponge | *Fomitopsis fomentarius* | Unknown | Optimal |
|
||||
| 78 | Willow Bracket | *Phellinus igniarius* | Unknown | Optimal |
|
||||
| 79 | Pine Conk | *Porodaedalea pini* | Unknown | Optimal |
|
||||
| 80 | Resinous Polypore | *Ischnoderma resinosum* | Unknown | Optimal |
|
||||
| 81 | Cinnabar Polypore | *Pycnoporus cinnabarinus* | Unknown | Optimal |
|
||||
| 82 | Violet Polypore | *Trichaptum biforme* | Unknown | Optimal |
|
||||
| 83 | Purple-Gilled Poly | *Trichaptum biforme* | Unknown | Optimal |
|
||||
| 84 | Bitter Oyster | *Panellus stipticus* | Unknown | Permissive |
|
||||
| 87 | Split Gill | *Schizophyllum commune* | Unknown | Permissive |
|
||||
| 92 | Insulation Myco | *Trametes pubescens* | Unknown | Permissive |
|
||||
| 95 | Shiitake (LE-46) | *Lentinula edodes* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,43 @@
|
||||
# Species Table: BULK-26-BRAN
|
||||
|
||||
**Substrate Slot:** 26
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 4 | King Trumpet | *Pleurotus eryngii* | Unknown | Permissive |
|
||||
| 5 | Black Pearl King | *Hybrid* | Unknown | Permissive |
|
||||
| 12 | Late Oyster | *Sarcomyxa serotina* | Unknown | Permissive |
|
||||
| 13 | Veiled Oyster | *Pleurotus dryinus* | Unknown | Permissive |
|
||||
| 15 | Elm Oyster | *Hypsizygus ulmarius* | Unknown | Permissive |
|
||||
| 17 | Lion's Mane | *Hericium erinaceus* | Unknown | Permissive |
|
||||
| 20 | Shiitake (Fast) | *Lentinula edodes* | Unknown | Permissive |
|
||||
| 21 | Shiitake (Donko) | *Lentinula edodes* | Unknown | Optimal |
|
||||
| 22 | Chestnut | *Pholiota adiposa* | Unknown | Permissive |
|
||||
| 23 | Pioppino | *Cyclocybe aegerita* | Unknown | Permissive |
|
||||
| 24 | Nameko | *Pholiota nameko* | Unknown | Optimal |
|
||||
| 25 | Maitake | *Grifola frondosa* | Unknown | Permissive |
|
||||
| 26 | Brown Beech | *Hypsizygus tessulatus* | Unknown | Permissive |
|
||||
| 27 | White Beech | *Hypsizygus tessulatus* | Unknown | Permissive |
|
||||
| 36 | Black Poplar | *Cyclocybe aegerita* | Unknown | Permissive |
|
||||
| 37 | Dryad's Saddle | *Cerioporus squamosus* | Unknown | Permissive |
|
||||
| 41 | Maitake (900) | *Grifola frondosa* | Unknown | Permissive |
|
||||
| 43 | Wine Cap | *Stropharia rugosoannulata* | Unknown | Permissive |
|
||||
| 48 | Shaggy Mane | *Coprinus comatus* | Unknown | Permissive |
|
||||
| 57 | Ink Cap | *Coprinopsis lagopus* | Unknown | Optimal |
|
||||
| 60 | Red Reishi | *Ganoderma lingzhi* | Unknown | Permissive |
|
||||
| 61 | Yellow Reishi | *Ganoderma curtisii* | Unknown | Permissive |
|
||||
| 62 | Black Reishi | *Ganoderma sinense* | Unknown | Permissive |
|
||||
| 63 | Oregon Reishi | *Ganoderma oregonense* | Unknown | Permissive |
|
||||
| 65 | Hemlock Varnish | *Ganoderma tsugae* | Unknown | Permissive |
|
||||
| 67 | Turkey Tail | *Trametes versicolor* | Unknown | Permissive |
|
||||
| 69 | False Turkey Tail | *Stereum ostrea* | Unknown | Permissive |
|
||||
| 70 | Artist's Conk | *Ganoderma applanatum* | Unknown | Permissive |
|
||||
| 80 | Resinous Polypore | *Ischnoderma resinosum* | Unknown | Permissive |
|
||||
| 81 | Cinnabar Polypore | *Pycnoporus cinnabarinus* | Unknown | Permissive |
|
||||
| 82 | Violet Polypore | *Trichaptum biforme* | Unknown | Permissive |
|
||||
| 83 | Purple-Gilled Poly | *Trichaptum biforme* | Unknown | Permissive |
|
||||
| 95 | Shiitake (LE-46) | *Lentinula edodes* | Unknown | Optimal |
|
||||
| 99 | Chestnut (CH-2) | *Pholiota adiposa* | Unknown | Permissive |
|
||||
| 101 | Black Pearl (Hy-X) | *Hybrid* | Unknown | Permissive |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,30 @@
|
||||
# Species Table: BULK-27-CVG
|
||||
|
||||
**Substrate Slot:** 27
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 0 | Blue Oyster | *Pleurotus ostreatus* | Unknown | Permissive |
|
||||
| 1 | Pearl Oyster | *Pleurotus ostreatus* | Unknown | Permissive |
|
||||
| 2 | Golden Oyster | *Pleurotus citrinopileatus* | Unknown | Permissive |
|
||||
| 3 | Pink Oyster | *Pleurotus djamor* | Unknown | Permissive |
|
||||
| 6 | Phoenix Oyster | *Pleurotus pulmonarius* | Unknown | Permissive |
|
||||
| 7 | Snow Oyster | *Pleurotus columbinus* | Unknown | Optimal |
|
||||
| 8 | Abalone Mushroom | *Pleurotus cystidiosus* | Unknown | Optimal |
|
||||
| 9 | Tarragon Oyster | *Pleurotus euosmus* | Unknown | Optimal |
|
||||
| 11 | Lung Oyster | *Pleurotus pulmonarius* | Unknown | Optimal |
|
||||
| 16 | Indian Oyster | *Pleurotus sajor-caju* | Unknown | Permissive |
|
||||
| 43 | Wine Cap | *Stropharia rugosoannulata* | Unknown | Optimal |
|
||||
| 52 | Paddy Straw | *Volvariella volvacea* | Unknown | Optimal |
|
||||
| 69 | False Turkey Tail | *Stereum ostrea* | Unknown | Optimal |
|
||||
| 84 | Bitter Oyster | *Panellus stipticus* | Unknown | Optimal |
|
||||
| 87 | Split Gill | *Schizophyllum commune* | Unknown | Optimal |
|
||||
| 88 | Diesel Oyster | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 91 | Packaging Myco | *Various* | Unknown | Optimal |
|
||||
| 92 | Insulation Myco | *Trametes pubescens* | Unknown | Optimal |
|
||||
| 93 | Textile Myco | *Schizophyllum commune* | Unknown | Optimal |
|
||||
| 94 | Paper Myco | *Polyporus sp.* | Unknown | Optimal |
|
||||
| 102 | Abalone (Taiwan) | *Pleurotus cystidiosus* | Unknown | Optimal |
|
||||
| 103 | Snow (Deep Blue) | *Pleurotus columbinus* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,33 @@
|
||||
# Species Table: BULK-28-STRAW
|
||||
|
||||
**Substrate Slot:** 28
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 0 | Blue Oyster | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 1 | Pearl Oyster | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 2 | Golden Oyster | *Pleurotus citrinopileatus* | Unknown | Optimal |
|
||||
| 3 | Pink Oyster | *Pleurotus djamor* | Unknown | Optimal |
|
||||
| 6 | Phoenix Oyster | *Pleurotus pulmonarius* | Unknown | Optimal |
|
||||
| 10 | Florida Oyster | *Pleurotus floridanus* | Unknown | Optimal |
|
||||
| 16 | Indian Oyster | *Pleurotus sajor-caju* | Unknown | Optimal |
|
||||
| 17 | Lion's Mane | *Hericium erinaceus* | Unknown | Optimal |
|
||||
| 18 | Bear's Head | *Hericium americanum* | Unknown | Optimal |
|
||||
| 19 | Coral Tooth | *Hericium coralloides* | Unknown | Optimal |
|
||||
| 22 | Chestnut | *Pholiota adiposa* | Unknown | Optimal |
|
||||
| 26 | Brown Beech | *Hypsizygus tessulatus* | Unknown | Optimal |
|
||||
| 27 | White Beech | *Hypsizygus tessulatus* | Unknown | Optimal |
|
||||
| 28 | Wood Ear | *Auricularia auricula-judae* | Unknown | Optimal |
|
||||
| 29 | Black Fungus | *Auricularia polytricha* | Unknown | Optimal |
|
||||
| 30 | Enoki (White) | *Flammulina velutipes* | Unknown | Optimal |
|
||||
| 39 | Golden Needle | *Flammulina filiformis* | Unknown | Optimal |
|
||||
| 40 | Lion's Mane (LM-01) | *Hericium erinaceus* | Unknown | Permissive |
|
||||
| 89 | Sugar Cane Oyster | *Pleurotus djamor var.* | Unknown | Optimal |
|
||||
| 90 | Leather Fungus | *Ganoderma sp.* | Unknown | Optimal |
|
||||
| 91 | Packaging Myco | *Various* | Unknown | Permissive |
|
||||
| 96 | Blue Oyster (3015) | *Pleurotus ostreatus* | Unknown | Permissive |
|
||||
| 97 | Pearl (P-77) | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 98 | Pink (V-22) | *Pleurotus djamor* | Unknown | Optimal |
|
||||
| 100 | Enoki (Comm.) | *Flammulina velutipes* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,31 @@
|
||||
# Species Table: BULK-29-SOY
|
||||
|
||||
**Substrate Slot:** 29
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 2 | Golden Oyster | *Pleurotus citrinopileatus* | Unknown | Optimal |
|
||||
| 3 | Pink Oyster | *Pleurotus djamor* | Unknown | Optimal |
|
||||
| 4 | King Trumpet | *Pleurotus eryngii* | Unknown | Optimal |
|
||||
| 5 | Black Pearl King | *Hybrid* | Unknown | Optimal |
|
||||
| 10 | Florida Oyster | *Pleurotus floridanus* | Unknown | Optimal |
|
||||
| 43 | Wine Cap | *Stropharia rugosoannulata* | Unknown | Optimal |
|
||||
| 44 | White Button | *Agaricus bisporus* | Unknown | Optimal |
|
||||
| 45 | Cremini | *Agaricus bisporus* | Unknown | Optimal |
|
||||
| 46 | Portobello | *Agaricus bisporus* | Unknown | Optimal |
|
||||
| 47 | Almond Agaricus | *Agaricus subrufescens* | Unknown | Optimal |
|
||||
| 48 | Shaggy Mane | *Coprinus comatus* | Unknown | Optimal |
|
||||
| 49 | Horse Mushroom | *Agaricus arvensis* | Unknown | Optimal |
|
||||
| 50 | The Prince | *Agaricus augustus* | Unknown | Optimal |
|
||||
| 51 | Blewit | *Lepista nuda* | Unknown | Optimal |
|
||||
| 52 | Paddy Straw | *Volvariella volvacea* | Unknown | Permissive |
|
||||
| 53 | Milky Mushroom | *Calocybe indica* | Unknown | Optimal |
|
||||
| 54 | Bamboo Pith | *Phallus indusiatus* | Unknown | Optimal |
|
||||
| 55 | Bamboo Fungus | *Phallus sp.* | Unknown | Optimal |
|
||||
| 56 | Glistening Inky | *Coprinellus micaceus* | Unknown | Optimal |
|
||||
| 57 | Ink Cap | *Coprinopsis lagopus* | Unknown | Permissive |
|
||||
| 98 | Pink (V-22) | *Pleurotus djamor* | Unknown | Optimal |
|
||||
| 99 | Chestnut (CH-2) | *Pholiota adiposa* | Unknown | Optimal |
|
||||
| 101 | Black Pearl (Hy-X) | *Hybrid* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,10 @@
|
||||
# Species Table: BULK-30-DUNG
|
||||
|
||||
**Substrate Slot:** 30
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 58 | Summer Mushroom | *Agaricus bitorquis* | Unknown | Optimal |
|
||||
| 59 | Field Mushroom | *Agaricus campestris* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,112 @@
|
||||
# Species Table: BULK-31-CUSTOM
|
||||
|
||||
**Substrate Slot:** 31
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 0 | Blue Oyster | *Pleurotus ostreatus* | Unknown | Permissive |
|
||||
| 1 | Pearl Oyster | *Pleurotus ostreatus* | Unknown | Permissive |
|
||||
| 2 | Golden Oyster | *Pleurotus citrinopileatus* | Unknown | Permissive |
|
||||
| 3 | Pink Oyster | *Pleurotus djamor* | Unknown | Permissive |
|
||||
| 4 | King Trumpet | *Pleurotus eryngii* | Unknown | Permissive |
|
||||
| 5 | Black Pearl King | *Hybrid* | Unknown | Permissive |
|
||||
| 6 | Phoenix Oyster | *Pleurotus pulmonarius* | Unknown | Permissive |
|
||||
| 7 | Snow Oyster | *Pleurotus columbinus* | Unknown | Permissive |
|
||||
| 8 | Abalone Mushroom | *Pleurotus cystidiosus* | Unknown | Permissive |
|
||||
| 9 | Tarragon Oyster | *Pleurotus euosmus* | Unknown | Permissive |
|
||||
| 10 | Florida Oyster | *Pleurotus floridanus* | Unknown | Permissive |
|
||||
| 11 | Lung Oyster | *Pleurotus pulmonarius* | Unknown | Permissive |
|
||||
| 12 | Late Oyster | *Sarcomyxa serotina* | Unknown | Permissive |
|
||||
| 13 | Veiled Oyster | *Pleurotus dryinus* | Unknown | Permissive |
|
||||
| 14 | Tree Oyster | *Pleurotus sapidus* | Unknown | Permissive |
|
||||
| 15 | Elm Oyster | *Hypsizygus ulmarius* | Unknown | Permissive |
|
||||
| 16 | Indian Oyster | *Pleurotus sajor-caju* | Unknown | Permissive |
|
||||
| 17 | Lion's Mane | *Hericium erinaceus* | Unknown | Permissive |
|
||||
| 18 | Bear's Head | *Hericium americanum* | Unknown | Permissive |
|
||||
| 19 | Coral Tooth | *Hericium coralloides* | Unknown | Permissive |
|
||||
| 20 | Shiitake (Fast) | *Lentinula edodes* | Unknown | Permissive |
|
||||
| 21 | Shiitake (Donko) | *Lentinula edodes* | Unknown | Permissive |
|
||||
| 22 | Chestnut | *Pholiota adiposa* | Unknown | Permissive |
|
||||
| 23 | Pioppino | *Cyclocybe aegerita* | Unknown | Permissive |
|
||||
| 24 | Nameko | *Pholiota nameko* | Unknown | Permissive |
|
||||
| 25 | Maitake | *Grifola frondosa* | Unknown | Permissive |
|
||||
| 26 | Brown Beech | *Hypsizygus tessulatus* | Unknown | Permissive |
|
||||
| 27 | White Beech | *Hypsizygus tessulatus* | Unknown | Permissive |
|
||||
| 28 | Wood Ear | *Auricularia auricula-judae* | Unknown | Permissive |
|
||||
| 29 | Black Fungus | *Auricularia polytricha* | Unknown | Permissive |
|
||||
| 30 | Enoki (White) | *Flammulina velutipes* | Unknown | Permissive |
|
||||
| 31 | Enoki (Gold) | *Flammulina velutipes* | Unknown | Permissive |
|
||||
| 32 | Tiger Sawgill | *Lentinus tigrinus* | Unknown | Permissive |
|
||||
| 33 | Cauliflower Mushroom | *Sparassis crispa* | Unknown | Permissive |
|
||||
| 34 | Beefsteak Fungus | *Fistulina hepatica* | Unknown | Permissive |
|
||||
| 35 | Chicken of the Woods | *Laetiporus sulphureus* | Unknown | Permissive |
|
||||
| 36 | Black Poplar | *Cyclocybe aegerita* | Unknown | Permissive |
|
||||
| 37 | Dryad's Saddle | *Cerioporus squamosus* | Unknown | Permissive |
|
||||
| 38 | Velvet Foot (Wild) | *Flammulina velutipes* | Unknown | Permissive |
|
||||
| 39 | Golden Needle | *Flammulina filiformis* | Unknown | Permissive |
|
||||
| 40 | Lion's Mane (LM-01) | *Hericium erinaceus* | Unknown | Permissive |
|
||||
| 41 | Maitake (900) | *Grifola frondosa* | Unknown | Permissive |
|
||||
| 42 | White-pored Chicken | *Laetiporus cincinnatus* | Unknown | Permissive |
|
||||
| 43 | Wine Cap | *Stropharia rugosoannulata* | Unknown | Permissive |
|
||||
| 44 | White Button | *Agaricus bisporus* | Unknown | Permissive |
|
||||
| 45 | Cremini | *Agaricus bisporus* | Unknown | Permissive |
|
||||
| 46 | Portobello | *Agaricus bisporus* | Unknown | Permissive |
|
||||
| 47 | Almond Agaricus | *Agaricus subrufescens* | Unknown | Permissive |
|
||||
| 48 | Shaggy Mane | *Coprinus comatus* | Unknown | Permissive |
|
||||
| 49 | Horse Mushroom | *Agaricus arvensis* | Unknown | Permissive |
|
||||
| 50 | The Prince | *Agaricus augustus* | Unknown | Permissive |
|
||||
| 51 | Blewit | *Lepista nuda* | Unknown | Permissive |
|
||||
| 52 | Paddy Straw | *Volvariella volvacea* | Unknown | Permissive |
|
||||
| 53 | Milky Mushroom | *Calocybe indica* | Unknown | Permissive |
|
||||
| 54 | Bamboo Pith | *Phallus indusiatus* | Unknown | Permissive |
|
||||
| 55 | Bamboo Fungus | *Phallus sp.* | Unknown | Permissive |
|
||||
| 56 | Glistening Inky | *Coprinellus micaceus* | Unknown | Permissive |
|
||||
| 57 | Ink Cap | *Coprinopsis lagopus* | Unknown | Permissive |
|
||||
| 58 | Summer Mushroom | *Agaricus bitorquis* | Unknown | Permissive |
|
||||
| 59 | Field Mushroom | *Agaricus campestris* | Unknown | Permissive |
|
||||
| 60 | Red Reishi | *Ganoderma lingzhi* | Unknown | Permissive |
|
||||
| 61 | Yellow Reishi | *Ganoderma curtisii* | Unknown | Permissive |
|
||||
| 62 | Black Reishi | *Ganoderma sinense* | Unknown | Permissive |
|
||||
| 63 | Oregon Reishi | *Ganoderma oregonense* | Unknown | Permissive |
|
||||
| 64 | Southern Reishi | *Ganoderma curtisii* | Unknown | Permissive |
|
||||
| 65 | Hemlock Varnish | *Ganoderma tsugae* | Unknown | Permissive |
|
||||
| 66 | Reishi (G-W) | *Ganoderma lingzhi* | Unknown | Permissive |
|
||||
| 67 | Turkey Tail | *Trametes versicolor* | Unknown | Permissive |
|
||||
| 68 | Turkey Tail (Wild) | *Trametes versicolor* | Unknown | Permissive |
|
||||
| 69 | False Turkey Tail | *Stereum ostrea* | Unknown | Permissive |
|
||||
| 70 | Artist's Conk | *Ganoderma applanatum* | Unknown | Permissive |
|
||||
| 71 | Agarikon | *Laricifomes officinalis* | Unknown | Permissive |
|
||||
| 72 | Mesima | *Phellinus linteus* | Unknown | Permissive |
|
||||
| 73 | Birch Polypore | *Fomitopsis betulina* | Unknown | Permissive |
|
||||
| 74 | Tinder Polypore | *Fomitopsis fomentarius* | Unknown | Permissive |
|
||||
| 75 | False Tinder Poly | *Phellinus igniarius* | Unknown | Permissive |
|
||||
| 76 | Hoof Fungus | *Fomitopsis fomentarius* | Unknown | Permissive |
|
||||
| 77 | Amadou Sponge | *Fomitopsis fomentarius* | Unknown | Permissive |
|
||||
| 78 | Willow Bracket | *Phellinus igniarius* | Unknown | Permissive |
|
||||
| 79 | Pine Conk | *Porodaedalea pini* | Unknown | Permissive |
|
||||
| 80 | Resinous Polypore | *Ischnoderma resinosum* | Unknown | Permissive |
|
||||
| 81 | Cinnabar Polypore | *Pycnoporus cinnabarinus* | Unknown | Permissive |
|
||||
| 82 | Violet Polypore | *Trichaptum biforme* | Unknown | Permissive |
|
||||
| 83 | Purple-Gilled Poly | *Trichaptum biforme* | Unknown | Permissive |
|
||||
| 84 | Bitter Oyster | *Panellus stipticus* | Unknown | Permissive |
|
||||
| 85 | Cordyceps | *Cordyceps militaris* | Unknown | Permissive |
|
||||
| 86 | Silver Ear | *Tremella fuciformis* | Unknown | Permissive |
|
||||
| 87 | Split Gill | *Schizophyllum commune* | Unknown | Permissive |
|
||||
| 88 | Diesel Oyster | *Pleurotus ostreatus* | Unknown | Permissive |
|
||||
| 89 | Sugar Cane Oyster | *Pleurotus djamor var.* | Unknown | Permissive |
|
||||
| 90 | Leather Fungus | *Ganoderma sp.* | Unknown | Permissive |
|
||||
| 91 | Packaging Myco | *Various* | Unknown | Permissive |
|
||||
| 92 | Insulation Myco | *Trametes pubescens* | Unknown | Permissive |
|
||||
| 93 | Textile Myco | *Schizophyllum commune* | Unknown | Permissive |
|
||||
| 94 | Paper Myco | *Polyporus sp.* | Unknown | Permissive |
|
||||
| 95 | Shiitake (LE-46) | *Lentinula edodes* | Unknown | Permissive |
|
||||
| 96 | Blue Oyster (3015) | *Pleurotus ostreatus* | Unknown | Permissive |
|
||||
| 97 | Pearl (P-77) | *Pleurotus ostreatus* | Unknown | Permissive |
|
||||
| 98 | Pink (V-22) | *Pleurotus djamor* | Unknown | Permissive |
|
||||
| 99 | Chestnut (CH-2) | *Pholiota adiposa* | Unknown | Permissive |
|
||||
| 100 | Enoki (Comm.) | *Flammulina velutipes* | Unknown | Permissive |
|
||||
| 101 | Black Pearl (Hy-X) | *Hybrid* | Unknown | Permissive |
|
||||
| 102 | Abalone (Taiwan) | *Pleurotus cystidiosus* | Unknown | Permissive |
|
||||
| 103 | Snow (Deep Blue) | *Pleurotus columbinus* | Unknown | Permissive |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,39 @@
|
||||
# Species Table: SPAWN-15-RYE
|
||||
|
||||
**Substrate Slot:** 15
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 0 | Blue Oyster | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 3 | Pink Oyster | *Pleurotus djamor* | Unknown | Optimal |
|
||||
| 5 | Black Pearl King | *Hybrid* | Unknown | Optimal |
|
||||
| 6 | Phoenix Oyster | *Pleurotus pulmonarius* | Unknown | Optimal |
|
||||
| 7 | Snow Oyster | *Pleurotus columbinus* | Unknown | Optimal |
|
||||
| 8 | Abalone Mushroom | *Pleurotus cystidiosus* | Unknown | Optimal |
|
||||
| 9 | Tarragon Oyster | *Pleurotus euosmus* | Unknown | Optimal |
|
||||
| 14 | Tree Oyster | *Pleurotus sapidus* | Unknown | Optimal |
|
||||
| 15 | Elm Oyster | *Hypsizygus ulmarius* | Unknown | Optimal |
|
||||
| 16 | Indian Oyster | *Pleurotus sajor-caju* | Unknown | Optimal |
|
||||
| 17 | Lion's Mane | *Hericium erinaceus* | Unknown | Optimal |
|
||||
| 18 | Bear's Head | *Hericium americanum* | Unknown | Optimal |
|
||||
| 19 | Coral Tooth | *Hericium coralloides* | Unknown | Optimal |
|
||||
| 20 | Shiitake (Fast) | *Lentinula edodes* | Unknown | Optimal |
|
||||
| 22 | Chestnut | *Pholiota adiposa* | Unknown | Optimal |
|
||||
| 26 | Brown Beech | *Hypsizygus tessulatus* | Unknown | Optimal |
|
||||
| 27 | White Beech | *Hypsizygus tessulatus* | Unknown | Optimal |
|
||||
| 32 | Tiger Sawgill | *Lentinus tigrinus* | Unknown | Optimal |
|
||||
| 40 | Lion's Mane (LM-01) | *Hericium erinaceus* | Unknown | Optimal |
|
||||
| 44 | White Button | *Agaricus bisporus* | Unknown | Optimal |
|
||||
| 45 | Cremini | *Agaricus bisporus* | Unknown | Optimal |
|
||||
| 46 | Portobello | *Agaricus bisporus* | Unknown | Optimal |
|
||||
| 47 | Almond Agaricus | *Agaricus subrufescens* | Unknown | Optimal |
|
||||
| 49 | Horse Mushroom | *Agaricus arvensis* | Unknown | Optimal |
|
||||
| 50 | The Prince | *Agaricus augustus* | Unknown | Optimal |
|
||||
| 58 | Summer Mushroom | *Agaricus bitorquis* | Unknown | Optimal |
|
||||
| 59 | Field Mushroom | *Agaricus campestris* | Unknown | Optimal |
|
||||
| 61 | Yellow Reishi | *Ganoderma curtisii* | Unknown | Optimal |
|
||||
| 96 | Blue Oyster (3015) | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 99 | Chestnut (CH-2) | *Pholiota adiposa* | Unknown | Optimal |
|
||||
| 101 | Black Pearl (Hy-X) | *Hybrid* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,29 @@
|
||||
# Species Table: SPAWN-16-MILO
|
||||
|
||||
**Substrate Slot:** 16
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 1 | Pearl Oyster | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 2 | Golden Oyster | *Pleurotus citrinopileatus* | Unknown | Optimal |
|
||||
| 8 | Abalone Mushroom | *Pleurotus cystidiosus* | Unknown | Optimal |
|
||||
| 10 | Florida Oyster | *Pleurotus floridanus* | Unknown | Optimal |
|
||||
| 11 | Lung Oyster | *Pleurotus pulmonarius* | Unknown | Optimal |
|
||||
| 17 | Lion's Mane | *Hericium erinaceus* | Unknown | Optimal |
|
||||
| 18 | Bear's Head | *Hericium americanum* | Unknown | Optimal |
|
||||
| 22 | Chestnut | *Pholiota adiposa* | Unknown | Optimal |
|
||||
| 26 | Brown Beech | *Hypsizygus tessulatus* | Unknown | Optimal |
|
||||
| 27 | White Beech | *Hypsizygus tessulatus* | Unknown | Optimal |
|
||||
| 30 | Enoki (White) | *Flammulina velutipes* | Unknown | Optimal |
|
||||
| 31 | Enoki (Gold) | *Flammulina velutipes* | Unknown | Optimal |
|
||||
| 40 | Lion's Mane (LM-01) | *Hericium erinaceus* | Unknown | Optimal |
|
||||
| 52 | Paddy Straw | *Volvariella volvacea* | Unknown | Optimal |
|
||||
| 53 | Milky Mushroom | *Calocybe indica* | Unknown | Optimal |
|
||||
| 61 | Yellow Reishi | *Ganoderma curtisii* | Unknown | Optimal |
|
||||
| 64 | Southern Reishi | *Ganoderma curtisii* | Unknown | Optimal |
|
||||
| 67 | Turkey Tail | *Trametes versicolor* | Unknown | Optimal |
|
||||
| 90 | Leather Fungus | *Ganoderma sp.* | Unknown | Optimal |
|
||||
| 97 | Pearl (P-77) | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 102 | Abalone (Taiwan) | *Pleurotus cystidiosus* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,45 @@
|
||||
# Species Table: SPAWN-17-MILLET
|
||||
|
||||
**Substrate Slot:** 17
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 0 | Blue Oyster | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 1 | Pearl Oyster | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 2 | Golden Oyster | *Pleurotus citrinopileatus* | Unknown | Optimal |
|
||||
| 3 | Pink Oyster | *Pleurotus djamor* | Unknown | Optimal |
|
||||
| 6 | Phoenix Oyster | *Pleurotus pulmonarius* | Unknown | Optimal |
|
||||
| 9 | Tarragon Oyster | *Pleurotus euosmus* | Unknown | Optimal |
|
||||
| 10 | Florida Oyster | *Pleurotus floridanus* | Unknown | Optimal |
|
||||
| 11 | Lung Oyster | *Pleurotus pulmonarius* | Unknown | Optimal |
|
||||
| 14 | Tree Oyster | *Pleurotus sapidus* | Unknown | Optimal |
|
||||
| 16 | Indian Oyster | *Pleurotus sajor-caju* | Unknown | Optimal |
|
||||
| 17 | Lion's Mane | *Hericium erinaceus* | Unknown | Optimal |
|
||||
| 19 | Coral Tooth | *Hericium coralloides* | Unknown | Optimal |
|
||||
| 28 | Wood Ear | *Auricularia auricula-judae* | Unknown | Optimal |
|
||||
| 29 | Black Fungus | *Auricularia polytricha* | Unknown | Optimal |
|
||||
| 32 | Tiger Sawgill | *Lentinus tigrinus* | Unknown | Optimal |
|
||||
| 43 | Wine Cap | *Stropharia rugosoannulata* | Unknown | Optimal |
|
||||
| 47 | Almond Agaricus | *Agaricus subrufescens* | Unknown | Optimal |
|
||||
| 48 | Shaggy Mane | *Coprinus comatus* | Unknown | Optimal |
|
||||
| 51 | Blewit | *Lepista nuda* | Unknown | Optimal |
|
||||
| 52 | Paddy Straw | *Volvariella volvacea* | Unknown | Optimal |
|
||||
| 54 | Bamboo Pith | *Phallus indusiatus* | Unknown | Optimal |
|
||||
| 55 | Bamboo Fungus | *Phallus sp.* | Unknown | Optimal |
|
||||
| 56 | Glistening Inky | *Coprinellus micaceus* | Unknown | Optimal |
|
||||
| 57 | Ink Cap | *Coprinopsis lagopus* | Unknown | Optimal |
|
||||
| 67 | Turkey Tail | *Trametes versicolor* | Unknown | Optimal |
|
||||
| 69 | False Turkey Tail | *Stereum ostrea* | Unknown | Optimal |
|
||||
| 84 | Bitter Oyster | *Panellus stipticus* | Unknown | Optimal |
|
||||
| 87 | Split Gill | *Schizophyllum commune* | Unknown | Optimal |
|
||||
| 88 | Diesel Oyster | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 89 | Sugar Cane Oyster | *Pleurotus djamor var.* | Unknown | Optimal |
|
||||
| 90 | Leather Fungus | *Ganoderma sp.* | Unknown | Optimal |
|
||||
| 91 | Packaging Myco | *Various* | Unknown | Optimal |
|
||||
| 92 | Insulation Myco | *Trametes pubescens* | Unknown | Optimal |
|
||||
| 93 | Textile Myco | *Schizophyllum commune* | Unknown | Optimal |
|
||||
| 94 | Paper Myco | *Polyporus sp.* | Unknown | Optimal |
|
||||
| 97 | Pearl (P-77) | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 98 | Pink (V-22) | *Pleurotus djamor* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,48 @@
|
||||
# Species Table: SPAWN-18-OATS
|
||||
|
||||
**Substrate Slot:** 18
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 4 | King Trumpet | *Pleurotus eryngii* | Unknown | Optimal |
|
||||
| 5 | Black Pearl King | *Hybrid* | Unknown | Optimal |
|
||||
| 7 | Snow Oyster | *Pleurotus columbinus* | Unknown | Optimal |
|
||||
| 12 | Late Oyster | *Sarcomyxa serotina* | Unknown | Optimal |
|
||||
| 13 | Veiled Oyster | *Pleurotus dryinus* | Unknown | Optimal |
|
||||
| 15 | Elm Oyster | *Hypsizygus ulmarius* | Unknown | Optimal |
|
||||
| 20 | Shiitake (Fast) | *Lentinula edodes* | Unknown | Optimal |
|
||||
| 21 | Shiitake (Donko) | *Lentinula edodes* | Unknown | Optimal |
|
||||
| 23 | Pioppino | *Cyclocybe aegerita* | Unknown | Optimal |
|
||||
| 24 | Nameko | *Pholiota nameko* | Unknown | Optimal |
|
||||
| 25 | Maitake | *Grifola frondosa* | Unknown | Optimal |
|
||||
| 30 | Enoki (White) | *Flammulina velutipes* | Unknown | Optimal |
|
||||
| 31 | Enoki (Gold) | *Flammulina velutipes* | Unknown | Optimal |
|
||||
| 33 | Cauliflower Mushroom | *Sparassis crispa* | Unknown | Optimal |
|
||||
| 34 | Beefsteak Fungus | *Fistulina hepatica* | Unknown | Optimal |
|
||||
| 35 | Chicken of the Woods | *Laetiporus sulphureus* | Unknown | Optimal |
|
||||
| 36 | Black Poplar | *Cyclocybe aegerita* | Unknown | Optimal |
|
||||
| 37 | Dryad's Saddle | *Cerioporus squamosus* | Unknown | Optimal |
|
||||
| 38 | Velvet Foot (Wild) | *Flammulina velutipes* | Unknown | Optimal |
|
||||
| 39 | Golden Needle | *Flammulina filiformis* | Unknown | Optimal |
|
||||
| 41 | Maitake (900) | *Grifola frondosa* | Unknown | Optimal |
|
||||
| 42 | White-pored Chicken | *Laetiporus cincinnatus* | Unknown | Optimal |
|
||||
| 60 | Red Reishi | *Ganoderma lingzhi* | Unknown | Optimal |
|
||||
| 62 | Black Reishi | *Ganoderma sinense* | Unknown | Optimal |
|
||||
| 63 | Oregon Reishi | *Ganoderma oregonense* | Unknown | Optimal |
|
||||
| 65 | Hemlock Varnish | *Ganoderma tsugae* | Unknown | Optimal |
|
||||
| 66 | Reishi (G-W) | *Ganoderma lingzhi* | Unknown | Optimal |
|
||||
| 70 | Artist's Conk | *Ganoderma applanatum* | Unknown | Optimal |
|
||||
| 73 | Birch Polypore | *Fomitopsis betulina* | Unknown | Optimal |
|
||||
| 74 | Tinder Polypore | *Fomitopsis fomentarius* | Unknown | Optimal |
|
||||
| 75 | False Tinder Poly | *Phellinus igniarius* | Unknown | Optimal |
|
||||
| 77 | Amadou Sponge | *Fomitopsis fomentarius* | Unknown | Optimal |
|
||||
| 80 | Resinous Polypore | *Ischnoderma resinosum* | Unknown | Optimal |
|
||||
| 81 | Cinnabar Polypore | *Pycnoporus cinnabarinus* | Unknown | Optimal |
|
||||
| 82 | Violet Polypore | *Trichaptum biforme* | Unknown | Optimal |
|
||||
| 83 | Purple-Gilled Poly | *Trichaptum biforme* | Unknown | Optimal |
|
||||
| 95 | Shiitake (LE-46) | *Lentinula edodes* | Unknown | Optimal |
|
||||
| 100 | Enoki (Comm.) | *Flammulina velutipes* | Unknown | Optimal |
|
||||
| 101 | Black Pearl (Hy-X) | *Hybrid* | Unknown | Optimal |
|
||||
| 103 | Snow (Deep Blue) | *Pleurotus columbinus* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,43 @@
|
||||
# Species Table: SPAWN-19-WHEAT
|
||||
|
||||
**Substrate Slot:** 19
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 4 | King Trumpet | *Pleurotus eryngii* | Unknown | Optimal |
|
||||
| 12 | Late Oyster | *Sarcomyxa serotina* | Unknown | Optimal |
|
||||
| 13 | Veiled Oyster | *Pleurotus dryinus* | Unknown | Optimal |
|
||||
| 15 | Elm Oyster | *Hypsizygus ulmarius* | Unknown | Optimal |
|
||||
| 20 | Shiitake (Fast) | *Lentinula edodes* | Unknown | Optimal |
|
||||
| 21 | Shiitake (Donko) | *Lentinula edodes* | Unknown | Optimal |
|
||||
| 23 | Pioppino | *Cyclocybe aegerita* | Unknown | Optimal |
|
||||
| 24 | Nameko | *Pholiota nameko* | Unknown | Optimal |
|
||||
| 25 | Maitake | *Grifola frondosa* | Unknown | Optimal |
|
||||
| 33 | Cauliflower Mushroom | *Sparassis crispa* | Unknown | Optimal |
|
||||
| 35 | Chicken of the Woods | *Laetiporus sulphureus* | Unknown | Optimal |
|
||||
| 36 | Black Poplar | *Cyclocybe aegerita* | Unknown | Optimal |
|
||||
| 37 | Dryad's Saddle | *Cerioporus squamosus* | Unknown | Optimal |
|
||||
| 41 | Maitake (900) | *Grifola frondosa* | Unknown | Optimal |
|
||||
| 42 | White-pored Chicken | *Laetiporus cincinnatus* | Unknown | Optimal |
|
||||
| 60 | Red Reishi | *Ganoderma lingzhi* | Unknown | Optimal |
|
||||
| 62 | Black Reishi | *Ganoderma sinense* | Unknown | Optimal |
|
||||
| 63 | Oregon Reishi | *Ganoderma oregonense* | Unknown | Optimal |
|
||||
| 65 | Hemlock Varnish | *Ganoderma tsugae* | Unknown | Optimal |
|
||||
| 66 | Reishi (G-W) | *Ganoderma lingzhi* | Unknown | Optimal |
|
||||
| 70 | Artist's Conk | *Ganoderma applanatum* | Unknown | Optimal |
|
||||
| 71 | Agarikon | *Laricifomes officinalis* | Unknown | Optimal |
|
||||
| 72 | Mesima | *Phellinus linteus* | Unknown | Optimal |
|
||||
| 73 | Birch Polypore | *Fomitopsis betulina* | Unknown | Optimal |
|
||||
| 74 | Tinder Polypore | *Fomitopsis fomentarius* | Unknown | Optimal |
|
||||
| 75 | False Tinder Poly | *Phellinus igniarius* | Unknown | Optimal |
|
||||
| 76 | Hoof Fungus | *Fomitopsis fomentarius* | Unknown | Optimal |
|
||||
| 77 | Amadou Sponge | *Fomitopsis fomentarius* | Unknown | Optimal |
|
||||
| 78 | Willow Bracket | *Phellinus igniarius* | Unknown | Optimal |
|
||||
| 79 | Pine Conk | *Porodaedalea pini* | Unknown | Optimal |
|
||||
| 80 | Resinous Polypore | *Ischnoderma resinosum* | Unknown | Optimal |
|
||||
| 81 | Cinnabar Polypore | *Pycnoporus cinnabarinus* | Unknown | Optimal |
|
||||
| 82 | Violet Polypore | *Trichaptum biforme* | Unknown | Optimal |
|
||||
| 83 | Purple-Gilled Poly | *Trichaptum biforme* | Unknown | Optimal |
|
||||
| 95 | Shiitake (LE-46) | *Lentinula edodes* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,17 @@
|
||||
# Species Table: SPAWN-20-CORN
|
||||
|
||||
**Substrate Slot:** 20
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 1 | Pearl Oyster | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 44 | White Button | *Agaricus bisporus* | Unknown | Optimal |
|
||||
| 45 | Cremini | *Agaricus bisporus* | Unknown | Optimal |
|
||||
| 46 | Portobello | *Agaricus bisporus* | Unknown | Optimal |
|
||||
| 49 | Horse Mushroom | *Agaricus arvensis* | Unknown | Optimal |
|
||||
| 50 | The Prince | *Agaricus augustus* | Unknown | Optimal |
|
||||
| 53 | Milky Mushroom | *Calocybe indica* | Unknown | Optimal |
|
||||
| 58 | Summer Mushroom | *Agaricus bitorquis* | Unknown | Optimal |
|
||||
| 59 | Field Mushroom | *Agaricus campestris* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,20 @@
|
||||
# Species Table: SPAWN-21-WBS
|
||||
|
||||
**Substrate Slot:** 21
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 0 | Blue Oyster | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 28 | Wood Ear | *Auricularia auricula-judae* | Unknown | Optimal |
|
||||
| 29 | Black Fungus | *Auricularia polytricha* | Unknown | Optimal |
|
||||
| 43 | Wine Cap | *Stropharia rugosoannulata* | Unknown | Optimal |
|
||||
| 48 | Shaggy Mane | *Coprinus comatus* | Unknown | Optimal |
|
||||
| 51 | Blewit | *Lepista nuda* | Unknown | Optimal |
|
||||
| 56 | Glistening Inky | *Coprinellus micaceus* | Unknown | Optimal |
|
||||
| 67 | Turkey Tail | *Trametes versicolor* | Unknown | Optimal |
|
||||
| 68 | Turkey Tail (Wild) | *Trametes versicolor* | Unknown | Optimal |
|
||||
| 87 | Split Gill | *Schizophyllum commune* | Unknown | Optimal |
|
||||
| 93 | Textile Myco | *Schizophyllum commune* | Unknown | Optimal |
|
||||
| 94 | Paper Myco | *Polyporus sp.* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,10 @@
|
||||
# Species Table: SPAWN-22-RICE
|
||||
|
||||
**Substrate Slot:** 22
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 85 | Cordyceps | *Cordyceps militaris* | Unknown | Optimal |
|
||||
| 86 | Silver Ear | *Tremella fuciformis* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,112 @@
|
||||
# Species Table: SPAWN-23-CUSTOM
|
||||
|
||||
**Substrate Slot:** 23
|
||||
|
||||
| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |
|
||||
|:---:|:---|:---|:---|:---|
|
||||
| 0 | Blue Oyster | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 1 | Pearl Oyster | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 2 | Golden Oyster | *Pleurotus citrinopileatus* | Unknown | Optimal |
|
||||
| 3 | Pink Oyster | *Pleurotus djamor* | Unknown | Optimal |
|
||||
| 4 | King Trumpet | *Pleurotus eryngii* | Unknown | Optimal |
|
||||
| 5 | Black Pearl King | *Hybrid* | Unknown | Optimal |
|
||||
| 6 | Phoenix Oyster | *Pleurotus pulmonarius* | Unknown | Optimal |
|
||||
| 7 | Snow Oyster | *Pleurotus columbinus* | Unknown | Optimal |
|
||||
| 8 | Abalone Mushroom | *Pleurotus cystidiosus* | Unknown | Optimal |
|
||||
| 9 | Tarragon Oyster | *Pleurotus euosmus* | Unknown | Optimal |
|
||||
| 10 | Florida Oyster | *Pleurotus floridanus* | Unknown | Optimal |
|
||||
| 11 | Lung Oyster | *Pleurotus pulmonarius* | Unknown | Optimal |
|
||||
| 12 | Late Oyster | *Sarcomyxa serotina* | Unknown | Optimal |
|
||||
| 13 | Veiled Oyster | *Pleurotus dryinus* | Unknown | Optimal |
|
||||
| 14 | Tree Oyster | *Pleurotus sapidus* | Unknown | Optimal |
|
||||
| 15 | Elm Oyster | *Hypsizygus ulmarius* | Unknown | Optimal |
|
||||
| 16 | Indian Oyster | *Pleurotus sajor-caju* | Unknown | Optimal |
|
||||
| 17 | Lion's Mane | *Hericium erinaceus* | Unknown | Optimal |
|
||||
| 18 | Bear's Head | *Hericium americanum* | Unknown | Optimal |
|
||||
| 19 | Coral Tooth | *Hericium coralloides* | Unknown | Optimal |
|
||||
| 20 | Shiitake (Fast) | *Lentinula edodes* | Unknown | Optimal |
|
||||
| 21 | Shiitake (Donko) | *Lentinula edodes* | Unknown | Optimal |
|
||||
| 22 | Chestnut | *Pholiota adiposa* | Unknown | Optimal |
|
||||
| 23 | Pioppino | *Cyclocybe aegerita* | Unknown | Optimal |
|
||||
| 24 | Nameko | *Pholiota nameko* | Unknown | Optimal |
|
||||
| 25 | Maitake | *Grifola frondosa* | Unknown | Optimal |
|
||||
| 26 | Brown Beech | *Hypsizygus tessulatus* | Unknown | Optimal |
|
||||
| 27 | White Beech | *Hypsizygus tessulatus* | Unknown | Optimal |
|
||||
| 28 | Wood Ear | *Auricularia auricula-judae* | Unknown | Optimal |
|
||||
| 29 | Black Fungus | *Auricularia polytricha* | Unknown | Optimal |
|
||||
| 30 | Enoki (White) | *Flammulina velutipes* | Unknown | Optimal |
|
||||
| 31 | Enoki (Gold) | *Flammulina velutipes* | Unknown | Optimal |
|
||||
| 32 | Tiger Sawgill | *Lentinus tigrinus* | Unknown | Optimal |
|
||||
| 33 | Cauliflower Mushroom | *Sparassis crispa* | Unknown | Optimal |
|
||||
| 34 | Beefsteak Fungus | *Fistulina hepatica* | Unknown | Optimal |
|
||||
| 35 | Chicken of the Woods | *Laetiporus sulphureus* | Unknown | Optimal |
|
||||
| 36 | Black Poplar | *Cyclocybe aegerita* | Unknown | Optimal |
|
||||
| 37 | Dryad's Saddle | *Cerioporus squamosus* | Unknown | Optimal |
|
||||
| 38 | Velvet Foot (Wild) | *Flammulina velutipes* | Unknown | Optimal |
|
||||
| 39 | Golden Needle | *Flammulina filiformis* | Unknown | Optimal |
|
||||
| 40 | Lion's Mane (LM-01) | *Hericium erinaceus* | Unknown | Optimal |
|
||||
| 41 | Maitake (900) | *Grifola frondosa* | Unknown | Optimal |
|
||||
| 42 | White-pored Chicken | *Laetiporus cincinnatus* | Unknown | Optimal |
|
||||
| 43 | Wine Cap | *Stropharia rugosoannulata* | Unknown | Optimal |
|
||||
| 44 | White Button | *Agaricus bisporus* | Unknown | Optimal |
|
||||
| 45 | Cremini | *Agaricus bisporus* | Unknown | Optimal |
|
||||
| 46 | Portobello | *Agaricus bisporus* | Unknown | Optimal |
|
||||
| 47 | Almond Agaricus | *Agaricus subrufescens* | Unknown | Optimal |
|
||||
| 48 | Shaggy Mane | *Coprinus comatus* | Unknown | Optimal |
|
||||
| 49 | Horse Mushroom | *Agaricus arvensis* | Unknown | Optimal |
|
||||
| 50 | The Prince | *Agaricus augustus* | Unknown | Optimal |
|
||||
| 51 | Blewit | *Lepista nuda* | Unknown | Optimal |
|
||||
| 52 | Paddy Straw | *Volvariella volvacea* | Unknown | Optimal |
|
||||
| 53 | Milky Mushroom | *Calocybe indica* | Unknown | Optimal |
|
||||
| 54 | Bamboo Pith | *Phallus indusiatus* | Unknown | Optimal |
|
||||
| 55 | Bamboo Fungus | *Phallus sp.* | Unknown | Optimal |
|
||||
| 56 | Glistening Inky | *Coprinellus micaceus* | Unknown | Optimal |
|
||||
| 57 | Ink Cap | *Coprinopsis lagopus* | Unknown | Optimal |
|
||||
| 58 | Summer Mushroom | *Agaricus bitorquis* | Unknown | Optimal |
|
||||
| 59 | Field Mushroom | *Agaricus campestris* | Unknown | Optimal |
|
||||
| 60 | Red Reishi | *Ganoderma lingzhi* | Unknown | Optimal |
|
||||
| 61 | Yellow Reishi | *Ganoderma curtisii* | Unknown | Optimal |
|
||||
| 62 | Black Reishi | *Ganoderma sinense* | Unknown | Optimal |
|
||||
| 63 | Oregon Reishi | *Ganoderma oregonense* | Unknown | Optimal |
|
||||
| 64 | Southern Reishi | *Ganoderma curtisii* | Unknown | Optimal |
|
||||
| 65 | Hemlock Varnish | *Ganoderma tsugae* | Unknown | Optimal |
|
||||
| 66 | Reishi (G-W) | *Ganoderma lingzhi* | Unknown | Optimal |
|
||||
| 67 | Turkey Tail | *Trametes versicolor* | Unknown | Optimal |
|
||||
| 68 | Turkey Tail (Wild) | *Trametes versicolor* | Unknown | Optimal |
|
||||
| 69 | False Turkey Tail | *Stereum ostrea* | Unknown | Optimal |
|
||||
| 70 | Artist's Conk | *Ganoderma applanatum* | Unknown | Optimal |
|
||||
| 71 | Agarikon | *Laricifomes officinalis* | Unknown | Optimal |
|
||||
| 72 | Mesima | *Phellinus linteus* | Unknown | Optimal |
|
||||
| 73 | Birch Polypore | *Fomitopsis betulina* | Unknown | Optimal |
|
||||
| 74 | Tinder Polypore | *Fomitopsis fomentarius* | Unknown | Optimal |
|
||||
| 75 | False Tinder Poly | *Phellinus igniarius* | Unknown | Optimal |
|
||||
| 76 | Hoof Fungus | *Fomitopsis fomentarius* | Unknown | Optimal |
|
||||
| 77 | Amadou Sponge | *Fomitopsis fomentarius* | Unknown | Optimal |
|
||||
| 78 | Willow Bracket | *Phellinus igniarius* | Unknown | Optimal |
|
||||
| 79 | Pine Conk | *Porodaedalea pini* | Unknown | Optimal |
|
||||
| 80 | Resinous Polypore | *Ischnoderma resinosum* | Unknown | Optimal |
|
||||
| 81 | Cinnabar Polypore | *Pycnoporus cinnabarinus* | Unknown | Optimal |
|
||||
| 82 | Violet Polypore | *Trichaptum biforme* | Unknown | Optimal |
|
||||
| 83 | Purple-Gilled Poly | *Trichaptum biforme* | Unknown | Optimal |
|
||||
| 84 | Bitter Oyster | *Panellus stipticus* | Unknown | Optimal |
|
||||
| 85 | Cordyceps | *Cordyceps militaris* | Unknown | Optimal |
|
||||
| 86 | Silver Ear | *Tremella fuciformis* | Unknown | Optimal |
|
||||
| 87 | Split Gill | *Schizophyllum commune* | Unknown | Optimal |
|
||||
| 88 | Diesel Oyster | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 89 | Sugar Cane Oyster | *Pleurotus djamor var.* | Unknown | Optimal |
|
||||
| 90 | Leather Fungus | *Ganoderma sp.* | Unknown | Optimal |
|
||||
| 91 | Packaging Myco | *Various* | Unknown | Optimal |
|
||||
| 92 | Insulation Myco | *Trametes pubescens* | Unknown | Optimal |
|
||||
| 93 | Textile Myco | *Schizophyllum commune* | Unknown | Optimal |
|
||||
| 94 | Paper Myco | *Polyporus sp.* | Unknown | Optimal |
|
||||
| 95 | Shiitake (LE-46) | *Lentinula edodes* | Unknown | Optimal |
|
||||
| 96 | Blue Oyster (3015) | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 97 | Pearl (P-77) | *Pleurotus ostreatus* | Unknown | Optimal |
|
||||
| 98 | Pink (V-22) | *Pleurotus djamor* | Unknown | Optimal |
|
||||
| 99 | Chestnut (CH-2) | *Pholiota adiposa* | Unknown | Optimal |
|
||||
| 100 | Enoki (Comm.) | *Flammulina velutipes* | Unknown | Optimal |
|
||||
| 101 | Black Pearl (Hy-X) | *Hybrid* | Unknown | Optimal |
|
||||
| 102 | Abalone (Taiwan) | *Pleurotus cystidiosus* | Unknown | Optimal |
|
||||
| 103 | Snow (Deep Blue) | *Pleurotus columbinus* | Unknown | Optimal |
|
||||
| 104-126 | Reserved | — | — | Reserved |
|
||||
| 127 | Other/prompt | — | — | — |
|
||||
@@ -0,0 +1,74 @@
|
||||
# BagTag Substrate Slots
|
||||
|
||||
**Bits 1–5 · 32 slots · Table version 1.0**
|
||||
|
||||
The substrate slot is the most consequential field in the encoding. It determines the species lookup table, the Cultivar's baseline grow profile parameters, the biological efficiency baseline, and the workflow type.
|
||||
|
||||
---
|
||||
|
||||
## AIO Standard (Slots 0–9)
|
||||
|
||||
| Slot | Bulk Layer | Grain Layer | Character |
|
||||
|------|-----------|-------------|-----------|
|
||||
| 0 | Masters Mix (HWSD/Soy Hull 50:50) | Millet | Flagship. Broad species, high yield, fast colonization. Core Cultivar Select bag. |
|
||||
| 1 | Masters Mix (HWSD/Soy Hull 50:50) | Rye Berry | Speed variant. Fastest colonization. Same broad species compatibility. |
|
||||
| 2 | Masters Mix (HWSD/Soy Hull 50:50) | Wheat Berry | Woody species variant. Slower colonization suits Shiitake, Maitake. |
|
||||
| 3 | HWSD/Wheat Bran 80:20 | Wheat Berry | Slow woody. Lower nitrogen for Reishi, Turkey Tail, Shiitake. |
|
||||
| 4 | CVG (Coco Coir + Verm + Gypsum) | Millet | Clean, no smell alternative for dung loving species. |
|
||||
| 5 | CVG (Coco Coir + Verm + Gypsum) | Oats | Budget Oyster. Economical. |
|
||||
| 6 | Pasteurized Straw | Millet | Oyster dominant. Clean fruiting surface. |
|
||||
| 7 | Pasteurized Straw | Barley | Oyster dominant with barley grain for robust spawn. |
|
||||
| 8 | Hardwood Sawdust 100% | Wheat Berry | Pure wood for conk and polypore species. |
|
||||
| 9 | HWSD 30% | Rye 70% (blended) | Economy blend with rye grain dominance. |
|
||||
|
||||
---
|
||||
|
||||
## AIO Advanced (Slots 10–14)
|
||||
|
||||
| Slot | Bulk Layer | Grain Layer | Character |
|
||||
|------|-----------|-------------|-----------|
|
||||
| 10 | Soy Hull Heavy 60:40 | Millet | High yield variant. Soy hulls for Oyster acceleration. |
|
||||
| 11 | Soy Hull Heavy 60:40 | Rye Berry | High yield speed variant. |
|
||||
| 12 | Cardboard + Coffee Grounds 50:50 | None (LC inoculated) | Waste stream grow. Zero cost substrate for experiments. |
|
||||
| 13 | Composted Manure | Rye Berry | Button mushroom and dung lovers. Requires pasteurization. |
|
||||
| 14 | None | None | User-defined substrate. Species 127 (Other) triggers manual configuration. |
|
||||
|
||||
---
|
||||
|
||||
## Grain Spawn (Slots 15–23)
|
||||
|
||||
| Slot | Type | Character |
|
||||
|------|------|-----------|
|
||||
| 15 | Rye Berry Spawn | Standard spawn. Best for most species. |
|
||||
| 16 | Millet Spawn | Small grain, fast colonization. |
|
||||
| 17 | Milo Spawn | Small grain, economical alternative. |
|
||||
| 18 | Whole Oats Spawn | Large grain, good for Gourmets. |
|
||||
| 19 | Wheat Berry Spawn | Standard spawn. Affordable and widely compatible. |
|
||||
| 20 | Whole Corn Spawn | Large grain for aggressive species. |
|
||||
| 21 | Wild Bird Seed Spawn | Mixed grain for diverse nutrition. |
|
||||
| 22 | Brown Rice Spawn | Alternative grain for experiments. |
|
||||
| 23 | Custom Grain Spawn | User-defined grain. Species 127 (Other) triggers manual configuration. |
|
||||
|
||||
---
|
||||
|
||||
## Bulk (Slots 24–31)
|
||||
|
||||
| Slot | Type | Character |
|
||||
|------|------|-----------|
|
||||
| 24 | Masters Mix (bulk) | Commercial bulk. Scale-out block production. |
|
||||
| 25 | Hardwood Sawdust 100% | Pure wood for conks and polypores. |
|
||||
| 26 | HWSD/Wheat Bran 80:20 | Standard wood lover bulk with nutrition boost. |
|
||||
| 27 | CVG (bulk) | Clean bulk for indoor fruiting. No wood chips. |
|
||||
| 28 | Pasteurized Straw (bulk) | Low cost Oyster production. |
|
||||
| 29 | Soy Hull Heavy 60:40 (bulk) | High yield Oyster bulk production. |
|
||||
| 30 | Manure Based (bulk) | Button and dung lovers. Requires full pasteurization. |
|
||||
| 31 | Custom Bulk | User-defined bulk substrate. Species 127 (Other) triggers manual configuration. |
|
||||
|
||||
---
|
||||
|
||||
## Notes
|
||||
|
||||
- **AIO (All-In-One)**: Bags contain both sterile grain spawn layer and sterile bulk substrate layer. No mixing required by user.
|
||||
- **Spawn**: Grain spawn only. User provides their own bulk substrate.
|
||||
- **Bulk**: Bulk substrate only. User provides their own spawn.
|
||||
- **Custom slots (14, 23, 31)**: Reserved for user-defined substrates. Species code 127 triggers manual configuration in Cultivar.
|
||||
@@ -0,0 +1,204 @@
|
||||
"""
|
||||
BagTag Master Data
|
||||
Shared source of truth for species and substrate definitions.
|
||||
Used by generate_tables.py and decode.py
|
||||
"""
|
||||
|
||||
# ── SUBSTRATES ──────────────────────────────────────────────────────────────
|
||||
# Indexed by substrate slot (0-31)
|
||||
# Used for filename generation
|
||||
|
||||
SUBSTRATES = {
|
||||
0: "aio-0-flagship-mm",
|
||||
1: "aio-1-speed-mm",
|
||||
2: "aio-2-woody-mm",
|
||||
3: "aio-3-low-n-mm",
|
||||
4: "aio-4-hobbyist-cvg",
|
||||
5: "aio-5-economy-cvg",
|
||||
6: "aio-6-straw-millet",
|
||||
7: "aio-7-straw-barley",
|
||||
8: "aio-8-pure-wood",
|
||||
9: "aio-9-blend",
|
||||
10: "aio-10-adv-soy",
|
||||
11: "aio-11-adv-rye",
|
||||
12: "aio-12-waste-stream",
|
||||
13: "aio-13-dung",
|
||||
14: "aio-14-custom",
|
||||
15: "spawn-15-rye",
|
||||
16: "spawn-16-milo",
|
||||
17: "spawn-17-millet",
|
||||
18: "spawn-18-oats",
|
||||
19: "spawn-19-wheat",
|
||||
20: "spawn-20-corn",
|
||||
21: "spawn-21-wbs",
|
||||
22: "spawn-22-rice",
|
||||
23: "spawn-23-custom",
|
||||
24: "bulk-24-mm",
|
||||
25: "bulk-25-hwsd",
|
||||
26: "bulk-26-bran",
|
||||
27: "bulk-27-cvg",
|
||||
28: "bulk-28-straw",
|
||||
29: "bulk-29-soy",
|
||||
30: "bulk-30-dung",
|
||||
31: "bulk-31-custom"
|
||||
}
|
||||
|
||||
|
||||
# ── SUBSTRATE DETAILS ───────────────────────────────────────────────────────
|
||||
# Detailed metadata for each substrate slot
|
||||
# Used by decoder and for generating substrates.md documentation
|
||||
|
||||
SUBSTRATE_DETAILS = {
|
||||
# AIO Standard (slots 0-9)
|
||||
0: {"label": "Masters Mix + Millet", "type": "aio", "category": "AIO Standard", "bulk": "Masters Mix (HWSD/Soy Hull 50:50)", "grain": "Millet", "character": "Flagship. Broad species, high yield, fast colonization. Core Cultivar Select bag."},
|
||||
1: {"label": "Masters Mix + Rye Berry", "type": "aio", "category": "AIO Standard", "bulk": "Masters Mix (HWSD/Soy Hull 50:50)", "grain": "Rye Berry", "character": "Speed variant. Fastest colonization. Same broad species compatibility."},
|
||||
2: {"label": "Masters Mix + Wheat Berry", "type": "aio", "category": "AIO Standard", "bulk": "Masters Mix (HWSD/Soy Hull 50:50)", "grain": "Wheat Berry", "character": "Woody species variant. Slower colonization suits Shiitake, Maitake."},
|
||||
3: {"label": "MM Lite + Wheat Berry", "type": "aio", "category": "AIO Standard", "bulk": "HWSD/Wheat Bran 80:20", "grain": "Wheat Berry", "character": "Slow woody. Lower nitrogen for Reishi, Turkey Tail, Shiitake."},
|
||||
4: {"label": "CVG + Millet", "type": "aio", "category": "AIO Standard", "bulk": "CVG (Coco Coir + Verm + Gypsum)", "grain": "Millet", "character": "Clean, no smell alternative for dung loving species."},
|
||||
5: {"label": "CVG + Oats", "type": "aio", "category": "AIO Standard", "bulk": "CVG (Coco Coir + Verm + Gypsum)", "grain": "Oats", "character": "Budget Oyster. Economical."},
|
||||
6: {"label": "Pasteurized Straw + Millet", "type": "aio", "category": "AIO Standard", "bulk": "Pasteurized Straw", "grain": "Millet", "character": "Oyster dominant. Clean fruiting surface."},
|
||||
7: {"label": "Pasteurized Straw + Barley", "type": "aio", "category": "AIO Standard", "bulk": "Pasteurized Straw", "grain": "Barley", "character": "Oyster dominant with barley grain for robust spawn."},
|
||||
8: {"label": "HWSD 100% + Wheat Berry", "type": "aio", "category": "AIO Standard", "bulk": "Hardwood Sawdust 100%", "grain": "Wheat Berry", "character": "Pure wood for conk and polypore species."},
|
||||
9: {"label": "Rye + HWSD Blended 70:30", "type": "aio", "category": "AIO Standard", "bulk": "HWSD 30%", "grain": "Rye 70% (blended)", "character": "Economy blend with rye grain dominance."},
|
||||
# AIO Advanced (slots 10-14)
|
||||
10: {"label": "Soy Hull Heavy 60:40 + Millet", "type": "aio-adv", "category": "AIO Advanced", "bulk": "Soy Hull Heavy 60:40", "grain": "Millet", "character": "High yield variant. Soy hulls for Oyster acceleration."},
|
||||
11: {"label": "Soy Hull Heavy 60:40 + Rye Berry", "type": "aio-adv", "category": "AIO Advanced", "bulk": "Soy Hull Heavy 60:40", "grain": "Rye Berry", "character": "High yield speed variant."},
|
||||
12: {"label": "Cardboard + Coffee Grounds 50:50", "type": "aio-adv", "category": "AIO Advanced", "bulk": "Cardboard + Coffee Grounds 50:50", "grain": "None (LC inoculated)", "character": "Waste stream grow. Zero cost substrate for experiments."},
|
||||
13: {"label": "Manure Based + Rye Berry", "type": "aio-adv", "category": "AIO Advanced", "bulk": "Composted Manure", "grain": "Rye Berry", "character": "Button mushroom and dung lovers. Requires pasteurization."},
|
||||
14: {"label": "Custom AIO", "type": "aio-custom","category": "AIO Advanced", "bulk": None, "grain": None, "character": "User-defined substrate. Species 127 (Other) triggers manual configuration."},
|
||||
# Grain Spawn (slots 15-23)
|
||||
15: {"label": "Rye Berry Spawn", "type": "spawn", "category": "Grain Spawn", "grain": "Rye Berry", "character": "Standard spawn. Best for most species."},
|
||||
16: {"label": "Millet Spawn", "type": "spawn", "category": "Grain Spawn", "grain": "Millet", "character": "Small grain, fast colonization."},
|
||||
17: {"label": "Milo Spawn", "type": "spawn", "category": "Grain Spawn", "grain": "Milo", "character": "Small grain, economical alternative."},
|
||||
18: {"label": "Whole Oats Spawn", "type": "spawn", "category": "Grain Spawn", "grain": "Whole Oats", "character": "Large grain, good for Gourmets."},
|
||||
19: {"label": "Wheat Berry Spawn", "type": "spawn", "category": "Grain Spawn", "grain": "Wheat Berry", "character": "Standard spawn. Affordable and widely compatible."},
|
||||
20: {"label": "Whole Corn Spawn", "type": "spawn", "category": "Grain Spawn", "grain": "Whole Corn", "character": "Large grain for aggressive species."},
|
||||
21: {"label": "Wild Bird Seed Spawn", "type": "spawn", "category": "Grain Spawn", "grain": "WBS (mixed)", "character": "Mixed grain for diverse nutrition."},
|
||||
22: {"label": "Brown Rice Spawn", "type": "spawn", "category": "Grain Spawn", "grain": "Brown Rice", "character": "Alternative grain for experiments."},
|
||||
23: {"label": "Custom Grain Spawn", "type": "spawn-custom", "category": "Grain Spawn", "grain": None, "character": "User-defined grain. Species 127 (Other) triggers manual configuration."},
|
||||
# Bulk Substrates (slots 24-31)
|
||||
24: {"label": "Masters Mix (bulk)", "type": "bulk", "category": "Bulk", "bulk": "Masters Mix (HWSD/Soy Hull 50:50)", "character": "Commercial bulk. Scale-out block production."},
|
||||
25: {"label": "Hardwood Sawdust 100%", "type": "bulk", "category": "Bulk", "bulk": "HWSD 100%", "character": "Pure wood for conks and polypores."},
|
||||
26: {"label": "HWSD/Wheat Bran 80:20", "type": "bulk", "category": "Bulk", "bulk": "HWSD/Wheat Bran 80:20", "character": "Standard wood lover bulk with nutrition boost."},
|
||||
27: {"label": "CVG (bulk)", "type": "bulk", "category": "Bulk", "bulk": "CVG (Coco Coir + Verm + Gypsum)", "character": "Clean bulk for indoor fruiting. No wood chips."},
|
||||
28: {"label": "Pasteurized Straw (bulk)", "type": "bulk", "category": "Bulk", "bulk": "Pasteurized Straw", "character": "Low cost Oyster production."},
|
||||
29: {"label": "Soy Hull Heavy 60:40 (bulk)", "type": "bulk", "category": "Bulk", "bulk": "Soy Hull Heavy 60:40", "character": "High yield Oyster bulk production."},
|
||||
30: {"label": "Manure Based (bulk)", "type": "bulk", "category": "Bulk", "bulk": "Composted Manure", "character": "Button and dung lovers. Requires full pasteurization."},
|
||||
31: {"label": "Custom Bulk", "type": "bulk-custom", "category": "Bulk", "bulk": None, "character": "User-defined bulk substrate. Species 127 (Other) triggers manual configuration."},
|
||||
}
|
||||
|
||||
|
||||
# ── SPECIES MASTER DATA ─────────────────────────────────────────────────────
|
||||
# Source of truth for species compatibility across all substrate types
|
||||
|
||||
SPECIES_MASTER = [
|
||||
# IDs 0-16: The Oyster Dynasty
|
||||
{"id": 0, "name": "Blue Oyster", "sci": "Pleurotus ostreatus", "optimal_aios": [6, 0], "permissive_aios": [4, 7, 9, 14], "optimal_bulk": [28, 24], "permissive_bulk": [27, 31], "spawn_subs": [15, 17, 21, 23]},
|
||||
{"id": 1, "name": "Pearl Oyster", "sci": "Pleurotus ostreatus", "optimal_aios": [6, 0], "permissive_aios": [7, 9, 14], "optimal_bulk": [28, 24], "permissive_bulk": [27, 31], "spawn_subs": [16, 17, 20, 23]},
|
||||
{"id": 2, "name": "Golden Oyster", "sci": "Pleurotus citrinopileatus", "optimal_aios": [6, 11], "permissive_aios": [0, 14], "optimal_bulk": [28, 29], "permissive_bulk": [27, 31], "spawn_subs": [16, 17, 23]},
|
||||
{"id": 3, "name": "Pink Oyster", "sci": "Pleurotus djamor", "optimal_aios": [6, 11], "permissive_aios": [0, 12, 14], "optimal_bulk": [28, 29], "permissive_bulk": [27, 31], "spawn_subs": [15, 17, 23]},
|
||||
{"id": 4, "name": "King Trumpet", "sci": "Pleurotus eryngii", "optimal_aios": [0, 10], "permissive_aios": [2, 11, 14], "optimal_bulk": [24, 29], "permissive_bulk": [26, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 5, "name": "Black Pearl King", "sci": "Hybrid", "optimal_aios": [0, 11], "permissive_aios": [2, 14], "optimal_bulk": [24, 29], "permissive_bulk": [26, 31], "spawn_subs": [15, 18, 23]},
|
||||
{"id": 6, "name": "Phoenix Oyster", "sci": "Pleurotus pulmonarius", "optimal_aios": [6, 0], "permissive_aios": [4, 9, 14], "optimal_bulk": [28, 24], "permissive_bulk": [27, 31], "spawn_subs": [15, 17, 23]},
|
||||
{"id": 7, "name": "Snow Oyster", "sci": "Pleurotus columbinus", "optimal_aios": [0, 4], "permissive_aios": [9, 14], "optimal_bulk": [24, 27], "permissive_bulk": [25, 31], "spawn_subs": [15, 18, 23]},
|
||||
{"id": 8, "name": "Abalone Mushroom", "sci": "Pleurotus cystidiosus", "optimal_aios": [0, 4], "permissive_aios": [9, 14], "optimal_bulk": [24, 27], "permissive_bulk": [25, 31], "spawn_subs": [15, 16, 23]},
|
||||
{"id": 9, "name": "Tarragon Oyster", "sci": "Pleurotus euosmus", "optimal_aios": [0, 4], "permissive_aios": [9, 14], "optimal_bulk": [24, 27], "permissive_bulk": [25, 31], "spawn_subs": [15, 17, 23]},
|
||||
{"id": 10, "name": "Florida Oyster", "sci": "Pleurotus floridanus", "optimal_aios": [6, 11], "permissive_aios": [0, 14], "optimal_bulk": [28, 29], "permissive_bulk": [24, 31], "spawn_subs": [16, 17, 23]},
|
||||
{"id": 11, "name": "Lung Oyster", "sci": "Pleurotus pulmonarius", "optimal_aios": [0, 4], "permissive_aios": [9, 14], "optimal_bulk": [24, 27], "permissive_bulk": [25, 31], "spawn_subs": [16, 17, 23]},
|
||||
{"id": 12, "name": "Late Oyster", "sci": "Sarcomyxa serotina", "optimal_aios": [8], "permissive_aios": [0, 2, 14], "optimal_bulk": [25], "permissive_bulk": [26, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 13, "name": "Veiled Oyster", "sci": "Pleurotus dryinus", "optimal_aios": [8], "permissive_aios": [0, 2, 14], "optimal_bulk": [25], "permissive_bulk": [26, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 14, "name": "Tree Oyster", "sci": "Pleurotus sapidus", "optimal_aios": [0, 9], "permissive_aios": [2, 14], "optimal_bulk": [24], "permissive_bulk": [25, 31], "spawn_subs": [15, 17, 23]},
|
||||
{"id": 15, "name": "Elm Oyster", "sci": "Hypsizygus ulmarius", "optimal_aios": [0, 2], "permissive_aios": [8, 9, 14], "optimal_bulk": [24, 25], "permissive_bulk": [26, 31], "spawn_subs": [15, 18, 19, 23]},
|
||||
{"id": 16, "name": "Indian Oyster", "sci": "Pleurotus sajor-caju", "optimal_aios": [6, 0], "permissive_aios": [4, 7, 14], "optimal_bulk": [28, 24], "permissive_bulk": [27, 31], "spawn_subs": [15, 17, 23]},
|
||||
# IDs 17-43: Wood Gourmets
|
||||
{"id": 17, "name": "Lion's Mane", "sci": "Hericium erinaceus", "optimal_aios": [0, 1], "permissive_aios": [2, 9, 10, 14], "optimal_bulk": [24, 28], "permissive_bulk": [25, 26, 31], "spawn_subs": [15, 16, 17, 23]},
|
||||
{"id": 18, "name": "Bear's Head", "sci": "Hericium americanum", "optimal_aios": [0, 1], "permissive_aios": [2, 9, 14], "optimal_bulk": [24, 28], "permissive_bulk": [25, 31], "spawn_subs": [15, 16, 23]},
|
||||
{"id": 19, "name": "Coral Tooth", "sci": "Hericium coralloides", "optimal_aios": [0, 11], "permissive_aios": [2, 14], "optimal_bulk": [24, 28], "permissive_bulk": [25, 31], "spawn_subs": [15, 17, 23]},
|
||||
{"id": 20, "name": "Shiitake (Fast)", "sci": "Lentinula edodes", "optimal_aios": [0, 1], "permissive_aios": [2, 9, 14], "optimal_bulk": [24], "permissive_bulk": [26, 31], "spawn_subs": [15, 18, 19, 23]},
|
||||
{"id": 21, "name": "Shiitake (Donko)", "sci": "Lentinula edodes", "optimal_aios": [8, 3], "permissive_aios": [2, 14], "optimal_bulk": [25, 26], "permissive_bulk": [24, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 22, "name": "Chestnut", "sci": "Pholiota adiposa", "optimal_aios": [0, 11], "permissive_aios": [2, 14], "optimal_bulk": [24, 28], "permissive_bulk": [26, 31], "spawn_subs": [15, 16, 23]},
|
||||
{"id": 23, "name": "Pioppino", "sci": "Cyclocybe aegerita", "optimal_aios": [0, 2], "permissive_aios": [9, 14], "optimal_bulk": [24, 25], "permissive_bulk": [26, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 24, "name": "Nameko", "sci": "Pholiota nameko", "optimal_aios": [8, 3], "permissive_aios": [0, 14], "optimal_bulk": [25, 26], "permissive_bulk": [24, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 25, "name": "Maitake", "sci": "Grifola frondosa", "optimal_aios": [0, 2], "permissive_aios": [3, 14], "optimal_bulk": [24], "permissive_bulk": [25, 26, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 26, "name": "Brown Beech", "sci": "Hypsizygus tessulatus", "optimal_aios": [10, 11], "permissive_aios": [0, 14], "optimal_bulk": [28, 24], "permissive_bulk": [26, 31], "spawn_subs": [15, 16, 23]},
|
||||
{"id": 27, "name": "White Beech", "sci": "Hypsizygus tessulatus", "optimal_aios": [10, 11], "permissive_aios": [0, 14], "optimal_bulk": [28, 24], "permissive_bulk": [26, 31], "spawn_subs": [15, 16, 23]},
|
||||
{"id": 28, "name": "Wood Ear", "sci": "Auricularia auricula-judae","optimal_aios": [6, 8], "permissive_aios": [0, 9, 14], "optimal_bulk": [28, 25], "permissive_bulk": [24, 31], "spawn_subs": [17, 21, 23]},
|
||||
{"id": 29, "name": "Black Fungus", "sci": "Auricularia polytricha", "optimal_aios": [8, 0], "permissive_aios": [9, 14], "optimal_bulk": [25, 28], "permissive_bulk": [24, 31], "spawn_subs": [17, 21, 23]},
|
||||
{"id": 30, "name": "Enoki (White)", "sci": "Flammulina velutipes", "optimal_aios": [10, 11], "permissive_aios": [0, 14], "optimal_bulk": [28], "permissive_bulk": [24, 31], "spawn_subs": [16, 18, 23]},
|
||||
{"id": 31, "name": "Enoki (Gold)", "sci": "Flammulina velutipes", "optimal_aios": [0, 2], "permissive_aios": [8, 14], "optimal_bulk": [24], "permissive_bulk": [25, 31], "spawn_subs": [16, 18, 23]},
|
||||
{"id": 32, "name": "Tiger Sawgill", "sci": "Lentinus tigrinus", "optimal_aios": [0, 9], "permissive_aios": [2, 14], "optimal_bulk": [24], "permissive_bulk": [25, 31], "spawn_subs": [15, 17, 23]},
|
||||
{"id": 33, "name": "Cauliflower Mushroom", "sci": "Sparassis crispa", "optimal_aios": [8, 2], "permissive_aios": [3, 14], "optimal_bulk": [25], "permissive_bulk": [24, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 34, "name": "Beefsteak Fungus", "sci": "Fistulina hepatica", "optimal_aios": [2], "permissive_aios": [8, 14], "optimal_bulk": [24], "permissive_bulk": [25, 31], "spawn_subs": [18, 23]},
|
||||
{"id": 35, "name": "Chicken of the Woods", "sci": "Laetiporus sulphureus", "optimal_aios": [8], "permissive_aios": [2, 14], "optimal_bulk": [25], "permissive_bulk": [24, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 36, "name": "Black Poplar", "sci": "Cyclocybe aegerita", "optimal_aios": [2, 3], "permissive_aios": [8, 14], "optimal_bulk": [25], "permissive_bulk": [26, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 37, "name": "Dryad's Saddle", "sci": "Cerioporus squamosus", "optimal_aios": [8], "permissive_aios": [2, 14], "optimal_bulk": [25], "permissive_bulk": [26, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 38, "name": "Velvet Foot (Wild)", "sci": "Flammulina velutipes", "optimal_aios": [0, 2], "permissive_aios": [8, 14], "optimal_bulk": [24], "permissive_bulk": [25, 31], "spawn_subs": [18, 23]},
|
||||
{"id": 39, "name": "Golden Needle", "sci": "Flammulina filiformis", "optimal_aios": [10, 11], "permissive_aios": [0, 14], "optimal_bulk": [28], "permissive_bulk": [24, 31], "spawn_subs": [18, 23]},
|
||||
{"id": 40, "name": "Lion's Mane (LM-01)", "sci": "Hericium erinaceus", "optimal_aios": [0], "permissive_aios": [1, 2, 14], "optimal_bulk": [24], "permissive_bulk": [28, 31], "spawn_subs": [15, 16, 23]},
|
||||
{"id": 41, "name": "Maitake (900)", "sci": "Grifola frondosa", "optimal_aios": [2], "permissive_aios": [0, 3, 14], "optimal_bulk": [24], "permissive_bulk": [26, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 42, "name": "White-pored Chicken", "sci": "Laetiporus cincinnatus", "optimal_aios": [8], "permissive_aios": [2, 14], "optimal_bulk": [25], "permissive_bulk": [24, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 43, "name": "Wine Cap", "sci": "Stropharia rugosoannulata", "optimal_aios": [13], "permissive_aios": [6, 12, 14], "optimal_bulk": [29, 27], "permissive_bulk": [26, 31], "spawn_subs": [17, 21, 23]},
|
||||
# IDs 44-59: Compost & Dung Lovers
|
||||
{"id": 44, "name": "White Button", "sci": "Agaricus bisporus", "optimal_aios": [13], "permissive_aios": [14], "optimal_bulk": [29], "permissive_bulk": [31], "spawn_subs": [15, 20, 23]},
|
||||
{"id": 45, "name": "Cremini", "sci": "Agaricus bisporus", "optimal_aios": [13], "permissive_aios": [14], "optimal_bulk": [29], "permissive_bulk": [31], "spawn_subs": [15, 20, 23]},
|
||||
{"id": 46, "name": "Portobello", "sci": "Agaricus bisporus", "optimal_aios": [13], "permissive_aios": [14], "optimal_bulk": [29], "permissive_bulk": [31], "spawn_subs": [15, 20, 23]},
|
||||
{"id": 47, "name": "Almond Agaricus", "sci": "Agaricus subrufescens", "optimal_aios": [13], "permissive_aios": [14], "optimal_bulk": [29], "permissive_bulk": [31], "spawn_subs": [15, 17, 23]},
|
||||
{"id": 48, "name": "Shaggy Mane", "sci": "Coprinus comatus", "optimal_aios": [13], "permissive_aios": [14], "optimal_bulk": [29], "permissive_bulk": [26, 31], "spawn_subs": [17, 21, 23]},
|
||||
{"id": 49, "name": "Horse Mushroom", "sci": "Agaricus arvensis", "optimal_aios": [13], "permissive_aios": [14], "optimal_bulk": [29], "permissive_bulk": [31], "spawn_subs": [15, 20, 23]},
|
||||
{"id": 50, "name": "The Prince", "sci": "Agaricus augustus", "optimal_aios": [13], "permissive_aios": [14], "optimal_bulk": [29], "permissive_bulk": [31], "spawn_subs": [15, 20, 23]},
|
||||
{"id": 51, "name": "Blewit", "sci": "Lepista nuda", "optimal_aios": [13], "permissive_aios": [14], "optimal_bulk": [29], "permissive_bulk": [31], "spawn_subs": [17, 21, 23]},
|
||||
{"id": 52, "name": "Paddy Straw", "sci": "Volvariella volvacea", "optimal_aios": [6, 7], "permissive_aios": [13, 14], "optimal_bulk": [27], "permissive_bulk": [29, 31], "spawn_subs": [16, 17, 23]},
|
||||
{"id": 53, "name": "Milky Mushroom", "sci": "Calocybe indica", "optimal_aios": [13], "permissive_aios": [14], "optimal_bulk": [29], "permissive_bulk": [31], "spawn_subs": [16, 20, 23]},
|
||||
{"id": 54, "name": "Bamboo Pith", "sci": "Phallus indusiatus", "optimal_aios": [13], "permissive_aios": [14], "optimal_bulk": [29], "permissive_bulk": [31], "spawn_subs": [17, 23]},
|
||||
{"id": 55, "name": "Bamboo Fungus", "sci": "Phallus sp.", "optimal_aios": [13], "permissive_aios": [14], "optimal_bulk": [29], "permissive_bulk": [31], "spawn_subs": [17, 23]},
|
||||
{"id": 56, "name": "Glistening Inky", "sci": "Coprinellus micaceus", "optimal_aios": [13], "permissive_aios": [14], "optimal_bulk": [29], "permissive_bulk": [31], "spawn_subs": [17, 21, 23]},
|
||||
{"id": 57, "name": "Ink Cap", "sci": "Coprinopsis lagopus", "optimal_aios": [12], "permissive_aios": [13, 14], "optimal_bulk": [26], "permissive_bulk": [29, 31], "spawn_subs": [17, 23]},
|
||||
{"id": 58, "name": "Summer Mushroom", "sci": "Agaricus bitorquis", "optimal_aios": [13], "permissive_aios": [14], "optimal_bulk": [30], "permissive_bulk": [31], "spawn_subs": [15, 20, 23]},
|
||||
{"id": 59, "name": "Field Mushroom", "sci": "Agaricus campestris", "optimal_aios": [13], "permissive_aios": [14], "optimal_bulk": [30], "permissive_bulk": [31], "spawn_subs": [15, 20, 23]},
|
||||
# IDs 60-84: Functional Polypores & Conks
|
||||
{"id": 60, "name": "Red Reishi", "sci": "Ganoderma lingzhi", "optimal_aios": [0, 3], "permissive_aios": [8, 14], "optimal_bulk": [24, 25], "permissive_bulk": [26, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 61, "name": "Yellow Reishi", "sci": "Ganoderma curtisii", "optimal_aios": [0, 3], "permissive_aios": [9, 14], "optimal_bulk": [24, 25], "permissive_bulk": [26, 31], "spawn_subs": [15, 16, 23]},
|
||||
{"id": 62, "name": "Black Reishi", "sci": "Ganoderma sinense", "optimal_aios": [3, 8], "permissive_aios": [2, 14], "optimal_bulk": [25], "permissive_bulk": [26, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 63, "name": "Oregon Reishi", "sci": "Ganoderma oregonense", "optimal_aios": [8], "permissive_aios": [3, 14], "optimal_bulk": [25], "permissive_bulk": [26, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 64, "name": "Southern Reishi", "sci": "Ganoderma curtisii", "optimal_aios": [0, 9], "permissive_aios": [3, 14], "optimal_bulk": [24], "permissive_bulk": [25, 31], "spawn_subs": [16, 23]},
|
||||
{"id": 65, "name": "Hemlock Varnish", "sci": "Ganoderma tsugae", "optimal_aios": [8], "permissive_aios": [3, 14], "optimal_bulk": [25], "permissive_bulk": [26, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 66, "name": "Reishi (G-W)", "sci": "Ganoderma lingzhi", "optimal_aios": [0, 3], "permissive_aios": [8, 14], "optimal_bulk": [24], "permissive_bulk": [25, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 67, "name": "Turkey Tail", "sci": "Trametes versicolor", "optimal_aios": [0, 8], "permissive_aios": [3, 9, 14], "optimal_bulk": [24, 25], "permissive_bulk": [26, 31], "spawn_subs": [16, 17, 21, 23]},
|
||||
{"id": 68, "name": "Turkey Tail (Wild)", "sci": "Trametes versicolor", "optimal_aios": [8, 0], "permissive_aios": [9, 14], "optimal_bulk": [25], "permissive_bulk": [24, 31], "spawn_subs": [21, 23]},
|
||||
{"id": 69, "name": "False Turkey Tail", "sci": "Stereum ostrea", "optimal_aios": [8, 12], "permissive_aios": [3, 14], "optimal_bulk": [25, 27], "permissive_bulk": [26, 31], "spawn_subs": [17, 23]},
|
||||
{"id": 70, "name": "Artist's Conk", "sci": "Ganoderma applanatum", "optimal_aios": [8], "permissive_aios": [3, 14], "optimal_bulk": [25], "permissive_bulk": [26, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 71, "name": "Agarikon", "sci": "Laricifomes officinalis", "optimal_aios": [8], "permissive_aios": [14], "optimal_bulk": [25], "permissive_bulk": [31], "spawn_subs": [19, 23]},
|
||||
{"id": 72, "name": "Mesima", "sci": "Phellinus linteus", "optimal_aios": [8], "permissive_aios": [14], "optimal_bulk": [25], "permissive_bulk": [31], "spawn_subs": [19, 23]},
|
||||
{"id": 73, "name": "Birch Polypore", "sci": "Fomitopsis betulina", "optimal_aios": [8], "permissive_aios": [14], "optimal_bulk": [25], "permissive_bulk": [31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 74, "name": "Tinder Polypore", "sci": "Fomitopsis fomentarius", "optimal_aios": [8], "permissive_aios": [14], "optimal_bulk": [25], "permissive_bulk": [31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 75, "name": "False Tinder Poly", "sci": "Phellinus igniarius", "optimal_aios": [8], "permissive_aios": [14], "optimal_bulk": [25], "permissive_bulk": [31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 76, "name": "Hoof Fungus", "sci": "Fomitopsis fomentarius", "optimal_aios": [8], "permissive_aios": [14], "optimal_bulk": [25], "permissive_bulk": [31], "spawn_subs": [19, 23]},
|
||||
{"id": 77, "name": "Amadou Sponge", "sci": "Fomitopsis fomentarius", "optimal_aios": [8], "permissive_aios": [14], "optimal_bulk": [25], "permissive_bulk": [31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 78, "name": "Willow Bracket", "sci": "Phellinus igniarius", "optimal_aios": [8], "permissive_aios": [14], "optimal_bulk": [25], "permissive_bulk": [31], "spawn_subs": [19, 23]},
|
||||
{"id": 79, "name": "Pine Conk", "sci": "Porodaedalea pini", "optimal_aios": [8], "permissive_aios": [14], "optimal_bulk": [25], "permissive_bulk": [31], "spawn_subs": [19, 23]},
|
||||
{"id": 80, "name": "Resinous Polypore", "sci": "Ischnoderma resinosum", "optimal_aios": [8], "permissive_aios": [3, 14], "optimal_bulk": [25], "permissive_bulk": [26, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 81, "name": "Cinnabar Polypore", "sci": "Pycnoporus cinnabarinus", "optimal_aios": [8], "permissive_aios": [3, 14], "optimal_bulk": [25], "permissive_bulk": [26, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 82, "name": "Violet Polypore", "sci": "Trichaptum biforme", "optimal_aios": [8], "permissive_aios": [3, 14], "optimal_bulk": [25], "permissive_bulk": [26, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 83, "name": "Purple-Gilled Poly", "sci": "Trichaptum biforme", "optimal_aios": [8], "permissive_aios": [3, 14], "optimal_bulk": [25], "permissive_bulk": [26, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 84, "name": "Bitter Oyster", "sci": "Panellus stipticus", "optimal_aios": [12], "permissive_aios": [8, 14], "optimal_bulk": [27], "permissive_bulk": [25, 31], "spawn_subs": [17, 23]},
|
||||
# IDs 85-104: Experimental & Commercial Strains
|
||||
{"id": 85, "name": "Cordyceps", "sci": "Cordyceps militaris", "optimal_aios": [14], "permissive_aios": [], "optimal_bulk": [], "permissive_bulk": [31], "spawn_subs": [22, 23]},
|
||||
{"id": 86, "name": "Silver Ear", "sci": "Tremella fuciformis", "optimal_aios": [14], "permissive_aios": [], "optimal_bulk": [], "permissive_bulk": [31], "spawn_subs": [22, 23]},
|
||||
{"id": 87, "name": "Split Gill", "sci": "Schizophyllum commune", "optimal_aios": [12], "permissive_aios": [8, 14], "optimal_bulk": [27], "permissive_bulk": [25, 31], "spawn_subs": [17, 21, 23]},
|
||||
{"id": 88, "name": "Diesel Oyster", "sci": "Pleurotus ostreatus", "optimal_aios": [12], "permissive_aios": [14], "optimal_bulk": [27], "permissive_bulk": [31], "spawn_subs": [17, 23]},
|
||||
{"id": 89, "name": "Sugar Cane Oyster", "sci": "Pleurotus djamor var.", "optimal_aios": [12], "permissive_aios": [14], "optimal_bulk": [28], "permissive_bulk": [31], "spawn_subs": [17, 23]},
|
||||
{"id": 90, "name": "Leather Fungus", "sci": "Ganoderma sp.", "optimal_aios": [10, 12], "permissive_aios": [0, 14], "optimal_bulk": [28], "permissive_bulk": [24, 31], "spawn_subs": [16, 17, 23]},
|
||||
{"id": 91, "name": "Packaging Myco", "sci": "Various", "optimal_aios": [12], "permissive_aios": [4, 14], "optimal_bulk": [27], "permissive_bulk": [28, 31], "spawn_subs": [17, 23]},
|
||||
{"id": 92, "name": "Insulation Myco", "sci": "Trametes pubescens", "optimal_aios": [12], "permissive_aios": [8, 14], "optimal_bulk": [27], "permissive_bulk": [25, 31], "spawn_subs": [17, 23]},
|
||||
{"id": 93, "name": "Textile Myco", "sci": "Schizophyllum commune", "optimal_aios": [12], "permissive_aios": [14], "optimal_bulk": [27], "permissive_bulk": [31], "spawn_subs": [17, 21, 23]},
|
||||
{"id": 94, "name": "Paper Myco", "sci": "Polyporus sp.", "optimal_aios": [12], "permissive_aios": [14], "optimal_bulk": [27], "permissive_bulk": [31], "spawn_subs": [17, 21, 23]},
|
||||
{"id": 95, "name": "Shiitake (LE-46)", "sci": "Lentinula edodes", "optimal_aios": [8, 3], "permissive_aios": [2, 14], "optimal_bulk": [25, 26], "permissive_bulk": [24, 31], "spawn_subs": [18, 19, 23]},
|
||||
{"id": 96, "name": "Blue Oyster (3015)", "sci": "Pleurotus ostreatus", "optimal_aios": [0, 1], "permissive_aios": [6, 14], "optimal_bulk": [24], "permissive_bulk": [28, 31], "spawn_subs": [15, 23]},
|
||||
{"id": 97, "name": "Pearl (P-77)", "sci": "Pleurotus ostreatus", "optimal_aios": [6, 7], "permissive_aios": [0, 14], "optimal_bulk": [28], "permissive_bulk": [24, 31], "spawn_subs": [16, 17, 23]},
|
||||
{"id": 98, "name": "Pink (V-22)", "sci": "Pleurotus djamor", "optimal_aios": [11, 6], "permissive_aios": [0, 14], "optimal_bulk": [29, 28], "permissive_bulk": [24, 31], "spawn_subs": [17, 23]},
|
||||
{"id": 99, "name": "Chestnut (CH-2)", "sci": "Pholiota adiposa", "optimal_aios": [11, 0], "permissive_aios": [2, 14], "optimal_bulk": [29, 24], "permissive_bulk": [26, 31], "spawn_subs": [15, 23]},
|
||||
{"id": 100,"name": "Enoki (Comm.)", "sci": "Flammulina velutipes", "optimal_aios": [10], "permissive_aios": [0, 14], "optimal_bulk": [28], "permissive_bulk": [24, 31], "spawn_subs": [18, 23]},
|
||||
{"id": 101,"name": "Black Pearl (Hy-X)", "sci": "Hybrid", "optimal_aios": [11, 0], "permissive_aios": [2, 14], "optimal_bulk": [29, 24], "permissive_bulk": [26, 31], "spawn_subs": [15, 18, 23]},
|
||||
{"id": 102,"name": "Abalone (Taiwan)", "sci": "Pleurotus cystidiosus", "optimal_aios": [11, 4], "permissive_aios": [0, 14], "optimal_bulk": [27], "permissive_bulk": [24, 31], "spawn_subs": [16, 23]},
|
||||
{"id": 103,"name": "Snow (Deep Blue)", "sci": "Pleurotus columbinus", "optimal_aios": [4, 9], "permissive_aios": [0, 14], "optimal_bulk": [27], "permissive_bulk": [24, 31], "spawn_subs": [18, 23]},
|
||||
]
|
||||
+342
@@ -0,0 +1,342 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
BagTag v1 Reference Decoder
|
||||
Grove5 — Open source software, honest hardware
|
||||
https://grove5.com
|
||||
|
||||
Decodes an AprilTag41h12 integer ID into size, substrate, and species.
|
||||
Uses packed enumeration - only valid substrate+species combinations are assigned tag IDs.
|
||||
|
||||
Usage:
|
||||
python decode.py <tag_id>
|
||||
python decode.py 0
|
||||
python decode.py 0 --json
|
||||
python decode.py --tables
|
||||
python decode.py --stats
|
||||
python decode.py --ranges
|
||||
"""
|
||||
|
||||
import sys
|
||||
import json
|
||||
from bagtag_data import (
|
||||
SUBSTRATES as SUBSTRATE_NAMES,
|
||||
SUBSTRATE_DETAILS as SUBSTRATES,
|
||||
SPECIES_MASTER
|
||||
)
|
||||
|
||||
|
||||
# SPECIES_MASTER imported from bagtag_data.py
|
||||
OTHER_SPECIES = {"code": 127, "label": "Other", "common": "Other/prompt", "scientific": None}
|
||||
|
||||
|
||||
def _build_species_tables():
|
||||
"""Build species lookup tables from master data for all 32 substrate slots."""
|
||||
tables = {}
|
||||
for sub_id in range(32):
|
||||
tables[sub_id] = {}
|
||||
for spec in SPECIES_MASTER:
|
||||
# Combine optimal and permissive slots across all categories
|
||||
all_optimal = spec.get("optimal_aios", []) + spec.get("optimal_bulk", []) + spec.get("spawn_subs", [])
|
||||
all_permissive = spec.get("permissive_aios", []) + spec.get("permissive_bulk", [])
|
||||
if sub_id in all_optimal or sub_id in all_permissive:
|
||||
tables[sub_id][spec["id"]] = {"common": spec["name"], "scientific": spec["sci"]}
|
||||
tables[sub_id][127] = OTHER_SPECIES
|
||||
return tables
|
||||
|
||||
|
||||
# ── SPECIES TABLES ───────────────────────────────────────────────────────────
|
||||
# Generated dynamically from SPECIES_MASTER for all 32 substrate slots
|
||||
|
||||
SPECIES = _build_species_tables()
|
||||
|
||||
|
||||
|
||||
# ── TAG ID ASSIGNMENT ───────────────────────────────────────────────────────
|
||||
|
||||
def _build_tag_lookup():
|
||||
"""Build packed enumeration of all valid (size, substrate, species) combinations.
|
||||
|
||||
Tag IDs are assigned sequentially starting from 0:
|
||||
- Each valid substrate+species combo gets 2 consecutive tag IDs (small, then large)
|
||||
- Substrates are processed in order 0-31
|
||||
- Within each substrate, species are sorted by species ID
|
||||
- Max valid tag ID = 1,969 (1,970 valid combos total)
|
||||
- Tag IDs 1,970-2,114 are reserved for future use
|
||||
"""
|
||||
entries = [] # [(tag_id, size, substrate_slot, species_id, species_name, sci_name)]
|
||||
|
||||
for substrate_slot in range(32):
|
||||
if substrate_slot not in SUBSTRATES:
|
||||
continue
|
||||
if substrate_slot not in SPECIES:
|
||||
continue
|
||||
|
||||
substrate = SUBSTRATES[substrate_slot]
|
||||
species_table = SPECIES[substrate_slot]
|
||||
|
||||
# Get all species IDs for this substrate (excluding 63/Other)
|
||||
species_ids = sorted([sid for sid in species_table.keys() if sid != 63])
|
||||
|
||||
for species_id in species_ids:
|
||||
species = species_table[species_id]
|
||||
# Small = 0, Large = 1
|
||||
for size in [0, 1]:
|
||||
entries.append((
|
||||
len(entries), # sequential tag ID
|
||||
size, # 0=small, 1=large
|
||||
substrate_slot,
|
||||
species_id,
|
||||
species["common"],
|
||||
species["scientific"],
|
||||
substrate["label"],
|
||||
substrate["type"]
|
||||
))
|
||||
|
||||
# Build lookup tables
|
||||
decode_table = {} # tag_id -> entry
|
||||
encode_table = {} # (size, substrate_slot, species_id) -> tag_id
|
||||
|
||||
for entry in entries:
|
||||
tag_id = entry[0]
|
||||
size = entry[1]
|
||||
substrate_slot = entry[2]
|
||||
species_id = entry[3]
|
||||
decode_table[tag_id] = entry
|
||||
encode_table[(size, substrate_slot, species_id)] = tag_id
|
||||
|
||||
return decode_table, encode_table, len(entries)
|
||||
|
||||
|
||||
TAG_DECODE_TABLE, TAG_ENCODE_TABLE, MAX_VALID_TAG = _build_tag_lookup()
|
||||
VALID_TAG_COUNT = MAX_VALID_TAG # Excludes reserved 1970-2114
|
||||
|
||||
|
||||
# ── DECODER ──────────────────────────────────────────────────────────────────
|
||||
|
||||
def decode(tag_id: int) -> dict:
|
||||
"""Decode an AprilTag41h12 integer ID into size, substrate, and species.
|
||||
|
||||
Uses packed enumeration - only pre-registered valid combinations decode successfully.
|
||||
Raises ValueError for tag IDs not assigned to valid bags or in reserved range.
|
||||
"""
|
||||
if not (0 <= tag_id <= 2114):
|
||||
raise ValueError(f"Tag ID {tag_id} out of range (0-2114)")
|
||||
|
||||
if tag_id >= MAX_VALID_TAG:
|
||||
raise ValueError(f"Tag ID {tag_id} is reserved (valid range: 0-{MAX_VALID_TAG - 1})")
|
||||
|
||||
if tag_id not in TAG_DECODE_TABLE:
|
||||
raise ValueError(f"Tag ID {tag_id} not assigned to any valid bag configuration")
|
||||
|
||||
entry = TAG_DECODE_TABLE[tag_id]
|
||||
size, substrate_slot, species_id, species_name, sci_name, sub_label, sub_type = entry[1:]
|
||||
|
||||
return {
|
||||
"tag_id": tag_id,
|
||||
"size": "small" if size == 0 else "large",
|
||||
"substrate_slot": substrate_slot,
|
||||
"substrate": {"label": sub_label, "type": sub_type},
|
||||
"species_id": species_id,
|
||||
"species": {"common": species_name, "scientific": sci_name},
|
||||
"valid": True,
|
||||
}
|
||||
|
||||
|
||||
def encode(size: str, substrate_slot: int, species_id: int) -> int:
|
||||
"""Encode a bag configuration to its tag ID.
|
||||
|
||||
Args:
|
||||
size: "small" or "large"
|
||||
substrate_slot: 0-31
|
||||
species_id: species code for that substrate
|
||||
|
||||
Returns:
|
||||
Tag ID (0-1969)
|
||||
|
||||
Raises:
|
||||
ValueError if the combination is not valid/registered
|
||||
"""
|
||||
size_bit = 0 if size == "small" else 1
|
||||
key = (size_bit, substrate_slot, species_id)
|
||||
|
||||
if key not in TAG_ENCODE_TABLE:
|
||||
raise ValueError(
|
||||
f"Invalid bag configuration: {size} bag, substrate {substrate_slot}, "
|
||||
f"species {species_id} is not a valid combination"
|
||||
)
|
||||
|
||||
return TAG_ENCODE_TABLE[key]
|
||||
|
||||
|
||||
def pretty(result: dict) -> str:
|
||||
"""Format decode result as human-readable string."""
|
||||
lines = [
|
||||
f"Tag ID: {result['tag_id']}",
|
||||
f"Size: {result['size']}",
|
||||
f"Substrate: [{result['substrate_slot']:02d}] {result['substrate'].get('label', '?')}",
|
||||
f"Species: [{result['species_id']:02d}] {result['species'].get('common', '?')}",
|
||||
]
|
||||
sci = result["species"].get("scientific")
|
||||
if sci:
|
||||
lines.append(f" ({sci})")
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def print_species_tables():
|
||||
"""Print all species lookup tables with their assigned tag ID ranges."""
|
||||
print(f"# BagTag Species Tables\n")
|
||||
print(f"Total valid combinations: {VALID_TAG_COUNT} (tag IDs 0-{MAX_VALID_TAG - 1})")
|
||||
print(f"Reserved tag IDs: {2115 - MAX_VALID_TAG} (tag IDs {MAX_VALID_TAG}-2114)\n")
|
||||
|
||||
for slot in range(32):
|
||||
sub = SUBSTRATES.get(slot)
|
||||
if sub is None or slot not in SPECIES:
|
||||
continue
|
||||
|
||||
sub_name = sub['label']
|
||||
sub_type = sub['type']
|
||||
table = SPECIES.get(slot, {})
|
||||
species_ids = sorted([sid for sid in table.keys() if sid != 127])
|
||||
|
||||
# Find tag ID range for this substrate
|
||||
tag_ids = []
|
||||
for sid in species_ids:
|
||||
for size in [0, 1]:
|
||||
key = (size, slot, sid)
|
||||
if key in TAG_ENCODE_TABLE:
|
||||
tag_ids.append(TAG_ENCODE_TABLE[key])
|
||||
|
||||
if tag_ids:
|
||||
min_tag, max_tag = min(tag_ids), max(tag_ids)
|
||||
else:
|
||||
min_tag = max_tag = None
|
||||
|
||||
print(f"\n## Slot {slot}: {sub_name}")
|
||||
print(f"Type: {sub_type}")
|
||||
if min_tag is not None:
|
||||
print(f"Tag ID range: {min_tag}-{max_tag}")
|
||||
print()
|
||||
print("| Species ID | Species | Scientific | Small Tag | Large Tag |")
|
||||
print("|------------|---------|------------|-----------|-----------|")
|
||||
|
||||
for sid in species_ids:
|
||||
spec = table[sid]
|
||||
small_tag = TAG_ENCODE_TABLE.get((0, slot, sid), "—")
|
||||
large_tag = TAG_ENCODE_TABLE.get((1, slot, sid), "—")
|
||||
print(f"| {sid:02d} | {spec['common']} | {spec['scientific']} | {small_tag} | {large_tag} |")
|
||||
|
||||
print(f"\nTotal: {len(species_ids)} species ({len(species_ids) * 2} tag IDs)")
|
||||
|
||||
|
||||
def print_ranges():
|
||||
"""Print actual tag ID ranges assigned to each substrate."""
|
||||
print(f"BagTag v1 Tag ID Ranges by Substrate")
|
||||
print(f"=" * 60)
|
||||
print(f"Note: Tag IDs are assigned sequentially across all substrates.")
|
||||
print(f"Each substrate's tag IDs are interleaved, not contiguous.\n")
|
||||
print(f"{'Slot':>4} | {'Substrate':<35} | {'Species':>7} | {'Tag ID Ranges (small + large)':<30}")
|
||||
print(f"{'-'*4}-+-{'-'*35}-+-{'-'*7}-+-{'-'*30}")
|
||||
|
||||
for slot in range(32):
|
||||
if slot not in SUBSTRATES or slot not in SPECIES:
|
||||
continue
|
||||
|
||||
sub = SUBSTRATES[slot]
|
||||
table = SPECIES.get(slot, {})
|
||||
species_ids = sorted([sid for sid in table.keys() if sid != 127])
|
||||
|
||||
if not species_ids:
|
||||
continue
|
||||
|
||||
# Collect all tag IDs for this slot
|
||||
small_tags = []
|
||||
large_tags = []
|
||||
for sid in species_ids:
|
||||
key_small = (0, slot, sid)
|
||||
key_large = (1, slot, sid)
|
||||
if key_small in TAG_ENCODE_TABLE:
|
||||
small_tags.append(TAG_ENCODE_TABLE[key_small])
|
||||
if key_large in TAG_ENCODE_TABLE:
|
||||
large_tags.append(TAG_ENCODE_TABLE[key_large])
|
||||
|
||||
if not small_tags:
|
||||
continue
|
||||
|
||||
# Format ranges
|
||||
small_tags.sort()
|
||||
large_tags.sort()
|
||||
|
||||
def format_ranges(tags):
|
||||
if not tags:
|
||||
return "—"
|
||||
# Compress consecutive ranges
|
||||
ranges = []
|
||||
start = end = tags[0]
|
||||
for t in tags[1:]:
|
||||
if t == end + 1:
|
||||
end = t
|
||||
else:
|
||||
ranges.append(f"{start}" if start == end else f"{start}-{end}")
|
||||
start = end = t
|
||||
ranges.append(f"{start}" if start == end else f"{start}-{end}")
|
||||
return ", ".join(ranges[:3]) # Limit to first 3 ranges
|
||||
|
||||
small_range = format_ranges(small_tags)
|
||||
large_range = format_ranges(large_tags)
|
||||
|
||||
sub_name = sub['label'][:35]
|
||||
print(f"{slot:>4} | {sub_name:<35} | {len(species_ids):>7} | small: {small_range}")
|
||||
print(f" | {' '*35} | {' '*7} | large: {large_range}")
|
||||
|
||||
print(f"\nTotal valid tags: {VALID_TAG_COUNT}")
|
||||
|
||||
|
||||
def print_stats():
|
||||
"""Print namespace statistics."""
|
||||
print(f"BagTag v1 Namespace Statistics")
|
||||
print(f"=" * 40)
|
||||
print(f"AprilTag41h12 total IDs: 2,115")
|
||||
print(f"Valid bag configurations: {VALID_TAG_COUNT:,}")
|
||||
print(f"Reserved for future: {2115 - VALID_TAG_COUNT:,}")
|
||||
print(f"Utilization: {VALID_TAG_COUNT / 2115 * 100:.1f}%")
|
||||
print()
|
||||
print(f"Breakdown by substrate:")
|
||||
for slot in range(32):
|
||||
if slot not in SUBSTRATES or slot not in SPECIES:
|
||||
continue
|
||||
count = len([s for s in SPECIES[slot].keys() if s != 63])
|
||||
if count > 0:
|
||||
print(f" Slot {slot:2d}: {count:2d} species = {count * 2:3d} tag IDs")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) < 2 or sys.argv[1] in ("-h", "--help"):
|
||||
print(__doc__)
|
||||
print(f"\nValid tag IDs: 0-{MAX_VALID_TAG - 1}")
|
||||
print(f"Reserved: {MAX_VALID_TAG}-2114")
|
||||
sys.exit(1)
|
||||
|
||||
if sys.argv[1] == "--tables":
|
||||
print_species_tables()
|
||||
sys.exit(0)
|
||||
|
||||
if sys.argv[1] == "--stats":
|
||||
print_stats()
|
||||
sys.exit(0)
|
||||
|
||||
if sys.argv[1] == "--ranges":
|
||||
print_ranges()
|
||||
sys.exit(0)
|
||||
|
||||
try:
|
||||
tag_id = int(sys.argv[1])
|
||||
result = decode(tag_id)
|
||||
print(pretty(result))
|
||||
|
||||
if "--json" in sys.argv:
|
||||
print()
|
||||
print(json.dumps(result, indent=2))
|
||||
|
||||
except ValueError as e:
|
||||
print(f"Error: {e}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
@@ -0,0 +1,168 @@
|
||||
import os
|
||||
from bagtag_data import SUBSTRATES, SUBSTRATE_DETAILS, SPECIES_MASTER
|
||||
|
||||
# --- 1. Master Data Definitions ---
|
||||
# Imported from bagtag_data.py (single source of truth)
|
||||
|
||||
def generate_tables(output_dir="../tables/species"):
|
||||
if not os.path.exists(output_dir):
|
||||
os.makedirs(output_dir)
|
||||
|
||||
for sub_id, sub_name in SUBSTRATES.items():
|
||||
compatible_species = []
|
||||
|
||||
for spec in SPECIES_MASTER:
|
||||
# Combine optimal and permissive slots across all categories
|
||||
all_optimal = spec.get('optimal_aios', []) + spec.get('optimal_bulk', []) + spec.get('spawn_subs', [])
|
||||
all_permissive = spec.get('permissive_aios', []) + spec.get('permissive_bulk', [])
|
||||
|
||||
# Check if this species is compatible with the current substrate slot
|
||||
if sub_id in all_optimal or sub_id in all_permissive:
|
||||
|
||||
# Determine its affinity for this specific slot
|
||||
affinity = "Optimal" if sub_id in all_optimal else "Permissive"
|
||||
|
||||
# Add it to our list for this table
|
||||
spec_data = spec.copy()
|
||||
spec_data['affinity'] = affinity
|
||||
compatible_species.append(spec_data)
|
||||
|
||||
file_path = os.path.join(output_dir, f"{sub_name}.md")
|
||||
|
||||
with open(file_path, "w") as f:
|
||||
f.write(f"# Species Table: {sub_name.upper()}\n\n")
|
||||
f.write(f"**Substrate Slot:** {sub_id}\n\n")
|
||||
f.write("| Bit Code | Common Name | Scientific Name | Vision Morphology | Affinity |\n")
|
||||
f.write("|:---:|:---|:---|:---|:---|\n")
|
||||
|
||||
# Write the compatible species
|
||||
for spec in compatible_species:
|
||||
# Clean up the morphology string for reading (e.g., "scaly_cap" -> "Scaly Cap")
|
||||
morph = spec.get('morphology', 'unknown').replace('_', ' ').title()
|
||||
|
||||
f.write(f"| {spec['id']} | {spec['name']} | *{spec['sci']}* | {morph} | {spec['affinity']} |\n")
|
||||
|
||||
# Add the Reserved buffer and Other/prompt at the bottom
|
||||
f.write("| 104-126 | Reserved | — | — | Reserved |\n")
|
||||
f.write("| 127 | Other/prompt | — | — | — |\n")
|
||||
|
||||
print(f"Generated: {file_path}")
|
||||
|
||||
|
||||
def generate_substrates_md(output_path="../tables/substrates.md"):
|
||||
"""Generate the substrates.md documentation from SUBSTRATE_DETAILS."""
|
||||
|
||||
# Group by category
|
||||
categories = {}
|
||||
for slot, details in SUBSTRATE_DETAILS.items():
|
||||
cat = details.get('category', 'Other')
|
||||
if cat not in categories:
|
||||
categories[cat] = []
|
||||
categories[cat].append((slot, details))
|
||||
|
||||
# Order categories
|
||||
category_order = ['AIO Standard', 'AIO Advanced', 'Grain Spawn', 'Bulk', 'Other']
|
||||
|
||||
with open(output_path, "w") as f:
|
||||
f.write("# BagTag Substrate Slots\n\n")
|
||||
f.write("**Bits 1–5 · 32 slots · Table version 1.0**\n\n")
|
||||
f.write("The substrate slot is the most consequential field in the encoding. It determines the species lookup table, the Cultivar's baseline grow profile parameters, the biological efficiency baseline, and the workflow type.\n\n")
|
||||
f.write("---\n\n")
|
||||
|
||||
for cat in category_order:
|
||||
if cat not in categories:
|
||||
continue
|
||||
|
||||
# Map category to header slug
|
||||
slug = cat.lower().replace(' ', '-')
|
||||
f.write(f"## {cat} (Slots {categories[cat][0][0]}–{categories[cat][-1][0]})\n\n")
|
||||
|
||||
# Check if AIO type (has bulk + grain) or spawn/bulk type
|
||||
is_aio = cat in ['AIO Standard', 'AIO Advanced']
|
||||
|
||||
if is_aio:
|
||||
f.write("| Slot | Bulk Layer | Grain Layer | Character |\n")
|
||||
f.write("|------|-----------|-------------|-----------|\n")
|
||||
else:
|
||||
f.write("| Slot | Type | Character |\n")
|
||||
f.write("|------|------|-----------|\n")
|
||||
|
||||
for slot, details in sorted(categories[cat]):
|
||||
bulk = details.get('bulk', '—')
|
||||
grain = details.get('grain', '—')
|
||||
character = details.get('character', '')
|
||||
label = details.get('label', '')
|
||||
|
||||
if is_aio:
|
||||
f.write(f"| {slot} | {bulk} | {grain} | {character} |\n")
|
||||
else:
|
||||
f.write(f"| {slot} | {label} | {character} |\n")
|
||||
|
||||
f.write("\n---\n\n")
|
||||
|
||||
# Add notes section
|
||||
f.write("## Notes\n\n")
|
||||
f.write("- **AIO (All-In-One)**: Bags contain both sterile grain spawn layer and sterile bulk substrate layer. No mixing required by user.\n")
|
||||
f.write("- **Spawn**: Grain spawn only. User provides their own bulk substrate.\n")
|
||||
f.write("- **Bulk**: Bulk substrate only. User provides their own spawn.\n")
|
||||
f.write("- **Custom slots (14, 23, 31)**: Reserved for user-defined substrates. Species code 127 triggers manual configuration in Cultivar.\n")
|
||||
|
||||
print(f"Generated: {output_path}")
|
||||
|
||||
def generate_master_table(output_path="../BAGTAG_MASTER_TABLE.md"):
|
||||
"""Generate comprehensive master table of all tag IDs and their meanings."""
|
||||
|
||||
# Import decode functions
|
||||
import sys
|
||||
sys.path.insert(0, os.path.dirname(__file__))
|
||||
from decode import TAG_DECODE_TABLE, MAX_VALID_TAG, SUBSTRATES
|
||||
|
||||
with open(output_path, "w") as f:
|
||||
f.write("# BagTag Master Reference Table\n\n")
|
||||
f.write("**Complete listing of all valid BagTag IDs (0–1905)**\n\n")
|
||||
f.write("Generated from `tools/bagtag_data.py` — single source of truth.\n\n")
|
||||
f.write("---\n\n")
|
||||
f.write("## Summary\n\n")
|
||||
f.write(f"- **Valid tag IDs:** 0–{MAX_VALID_TAG - 1}\n")
|
||||
f.write(f"- **Reserved:** {MAX_VALID_TAG}–2114\n")
|
||||
f.write(f"- **Total valid bags:** {len(TAG_DECODE_TABLE)}\n")
|
||||
f.write("- **Encoding:** Packed enumeration (size, substrate, species)\n\n")
|
||||
f.write("---\n\n")
|
||||
f.write("## Tag ID Reference\n\n")
|
||||
f.write("| Tag ID | Size | Substrate Slot | Substrate Name | Species ID | Species Name |\n")
|
||||
f.write("|--------|------|----------------|----------------|------------|--------------|\n")
|
||||
|
||||
for tag_id in range(MAX_VALID_TAG):
|
||||
if tag_id not in TAG_DECODE_TABLE:
|
||||
continue
|
||||
|
||||
entry = TAG_DECODE_TABLE[tag_id]
|
||||
size = "small" if entry[1] == 0 else "large"
|
||||
sub_slot = entry[2]
|
||||
species_id = entry[3]
|
||||
species_name = entry[4]
|
||||
|
||||
sub = SUBSTRATES.get(sub_slot, {})
|
||||
sub_name = sub.get('label', f'Unknown (slot {sub_slot})')
|
||||
|
||||
f.write(f"| {tag_id} | {size} | {sub_slot} | {sub_name} | {species_id} | {species_name} |\n")
|
||||
|
||||
f.write("\n---\n\n")
|
||||
f.write("## Legend\n\n")
|
||||
f.write("- **Size:** `small` = 3lb, `large` = 5lb (configurable in Cultivar firmware)\n")
|
||||
f.write("- **Substrate Slot:** 0–31, selects species lookup table\n")
|
||||
f.write("- **Species ID:** 0–103 = specific species, 127 = Other/prompt (manual entry)\n")
|
||||
f.write("- **Tag ID:** Sequential index into packed enumeration\n\n")
|
||||
f.write("---\n\n")
|
||||
f.write("## Generation\n\n")
|
||||
f.write("```bash\n")
|
||||
f.write("python tools/generate_tables.py\n")
|
||||
f.write("```\n")
|
||||
|
||||
print(f"Generated: {output_path}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
generate_tables()
|
||||
generate_substrates_md()
|
||||
generate_master_table()
|
||||
Executable
+168
@@ -0,0 +1,168 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
BagTag Marker Generator
|
||||
|
||||
Generates PNG images for BagTag AprilTag41h12 markers.
|
||||
Requires: apriltag Python package (pip install apriltag)
|
||||
|
||||
Usage:
|
||||
python generate_tags.py --tag-id 0 --output bagtag_0.png
|
||||
python generate_tags.py --range 0 100 --output-dir ../tags/
|
||||
python generate_tags.py --all --output-dir ../tags/ --scale 10
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
|
||||
try:
|
||||
import numpy as np
|
||||
from PIL import Image
|
||||
except ImportError:
|
||||
print("Error: numpy and Pillow required. Install with: pip install numpy Pillow")
|
||||
sys.exit(1)
|
||||
|
||||
# BagTag valid tag range
|
||||
BAGTAG_MIN = 0
|
||||
BAGTAG_MAX = 1905 # From decode.py MAX_VALID_TAG - 1
|
||||
|
||||
|
||||
def generate_tag_image(tag_id: int, scale: int = 1, border_bits: int = 1) -> Image.Image:
|
||||
"""Generate a BagTag AprilTag41h12 marker image.
|
||||
|
||||
Uses a simple bit pattern generation for the 41h12 family.
|
||||
For production use, this should use the official AprilTag library.
|
||||
"""
|
||||
# AprilTag 41h12 parameters
|
||||
# Total size: 9x9 data bits + 1 bit black border on all sides = 11x11
|
||||
# With the standard 2-bit white quiet zone outside = 13x13 total
|
||||
|
||||
# For now, generate a placeholder that indicates the tag ID
|
||||
# In production, this would encode the actual 41h12 bit pattern
|
||||
|
||||
size = 11 * scale # Base tag size (9 data + 2 border)
|
||||
|
||||
# Create white background
|
||||
img = Image.new('L', (size, size), 255)
|
||||
pixels = img.load()
|
||||
|
||||
# Draw black border (inner border of AprilTag)
|
||||
for x in range(scale, size - scale):
|
||||
for y in range(scale, size - scale):
|
||||
# Simple placeholder pattern - black inner area with tag ID encoded
|
||||
# In real implementation, this would be the actual 41h12 encoding
|
||||
if (x // scale + y // scale) % 2 == 0:
|
||||
pixels[x, y] = 0
|
||||
|
||||
return img
|
||||
|
||||
|
||||
def generate_tag_with_apriltag(tag_id: int, scale: int = 10) -> Image.Image:
|
||||
"""Generate tag using apriltag library if available."""
|
||||
try:
|
||||
from apriltag import apriltag
|
||||
|
||||
# Create detector to get tag pattern (workaround for generation)
|
||||
# For actual generation, we need to use the C library or pre-rendered images
|
||||
# This is a placeholder implementation
|
||||
|
||||
# Generate checkerboard pattern representing the tag
|
||||
size = 11 * scale # 9 data + 2 border
|
||||
img = np.ones((size, size), dtype=np.uint8) * 255
|
||||
|
||||
# Draw black border
|
||||
img[scale:size-scale, scale:size-scale] = 0
|
||||
|
||||
# Encode tag_id in center (simplified)
|
||||
center_start = 4 * scale
|
||||
center_end = 7 * scale
|
||||
for i in range(center_start, center_end):
|
||||
for j in range(center_start, center_end):
|
||||
if (i + j + tag_id) % 2 == 0:
|
||||
img[i, j] = 255
|
||||
else:
|
||||
img[i, j] = 0
|
||||
|
||||
return Image.fromarray(img)
|
||||
|
||||
except ImportError:
|
||||
return generate_tag_image(tag_id, scale)
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Generate BagTag AprilTag41h12 marker images"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--tag-id", type=int,
|
||||
help="Generate specific tag ID (0-1905)"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--range", nargs=2, type=int, metavar=("START", "END"),
|
||||
help="Generate range of tag IDs (inclusive)"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--all", action="store_true",
|
||||
help="Generate all valid BagTag IDs (0-1905)"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--scale", type=int, default=10,
|
||||
help="Scale factor for output image (default: 10)"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--output", "-o", type=str,
|
||||
help="Output filename (for single tag)"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--output-dir", "-d", type=str, default="../tags/",
|
||||
help="Output directory for generated tags"
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
# Validate arguments
|
||||
if sum([bool(args.tag_id is not None), bool(args.range), bool(args.all)]) != 1:
|
||||
parser.error("Specify exactly one of: --tag-id, --range, or --all")
|
||||
|
||||
# Create output directory
|
||||
if args.output_dir:
|
||||
os.makedirs(args.output_dir, exist_ok=True)
|
||||
|
||||
# Determine tag IDs to generate
|
||||
if args.tag_id is not None:
|
||||
if not (BAGTAG_MIN <= args.tag_id <= BAGTAG_MAX):
|
||||
parser.error(f"Tag ID must be between {BAGTAG_MIN} and {BAGTAG_MAX}")
|
||||
tag_ids = [args.tag_id]
|
||||
elif args.range:
|
||||
start, end = args.range
|
||||
if start > end or start < BAGTAG_MIN or end > BAGTAG_MAX:
|
||||
parser.error(f"Invalid range. Must be within {BAGTAG_MIN}-{BAGTAG_MAX}")
|
||||
tag_ids = list(range(start, end + 1))
|
||||
else: # --all
|
||||
tag_ids = list(range(BAGTAG_MIN, BAGTAG_MAX + 1))
|
||||
|
||||
print(f"Generating {len(tag_ids)} BagTag markers (scale={args.scale}x)...")
|
||||
|
||||
for tag_id in tag_ids:
|
||||
img = generate_tag_with_apriltag(tag_id, args.scale)
|
||||
|
||||
if args.output and len(tag_ids) == 1:
|
||||
output_path = args.output
|
||||
else:
|
||||
output_path = os.path.join(
|
||||
args.output_dir,
|
||||
f"bagtag_{tag_id:04d}.png"
|
||||
)
|
||||
|
||||
img.save(output_path)
|
||||
print(f" Generated: {output_path}")
|
||||
|
||||
print(f"\nDone! Generated {len(tag_ids)} tags.")
|
||||
print(f"\nNote: These are placeholder patterns. For production tags,")
|
||||
print(f"use the official AprilTag library or pre-generated 41h12 images.")
|
||||
print(f"See: https://github.com/AprilRobotics/apriltag-imgs")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in new issue
Block a user