aRboretum is an R package for generating interactive, multilingual audio-enhanced HTML labels for botanical and living plant collections. It extracts species data from taxonomic databases (Flora e Funga do Brasil and the World Checklist of Vascular Plants, the backbone of Plants of the World Online), retrieves conservation status from the IUCN Red List, handles synonym resolution, generates natural language descriptions, and produces standalone HTML files with audio playback capabilities.
Key features
- π΅ Dual audio support β Personal recordings OR text-to-speech
- π Multilingual β Portuguese, English, French, Spanish, plus one flexible custom language slot for community-based accessibility
- πΊοΈ Interactive maps β World and Brazil state-level distribution
- π Searchable index β Real-time filtering of species collection
- π Data mining β Automatic extraction from FFB and WCVP, plus IUCN Red List status
- βοΈ Editable phrases β Generated descriptions are stored in the data and can be edited by hand
- π¨ Customizable branding β Add institutional logos
- π± Responsive design β Works on mobile and desktop
- π Ready to deploy β Complete website in one folder, no build step needed
- πΌοΈ Personal photos β Add species photos and slideshows
- π§Ύ QR-code labels β Generate printable labels linked to species pages
- π Collection dashboard β Summary statistics in the minisite
Designed to expedite label production for arboreta, botanical gardens, herbaria, and living plant collections.
Installation
aRboretum depends on two packages that are not on CRAN, so install them first:
-
rWCVPdata, which provides the World Checklist of Vascular Plants data and is distributed through its own repository; -
floraR, which downloads and parses the Flora e Funga do Brasil dataset used byarboretum_data().
if (!requireNamespace("rWCVPdata", quietly = TRUE)) {
install.packages("rWCVPdata",
repos = c(
"https://matildabrown.github.io/drat",
"https://cloud.r-project.org"
)
)
}
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
# Install the development version of floraR from GitHub,
# together with its required dependencies
BiocManager::install("DBOSlab/floraR", dependencies = TRUE)Then install the development version of aRboretum from GitHub with:
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
# Install the development version of aRboretum from GitHub,
# together with its required dependencies
BiocManager::install("DBOSlab/aRboretum", dependencies = TRUE)Optional: IUCN Red List API token
By default, IUCN Red List categories are retrieved from the IUCN Red List checklist mirrored by GBIF, which requires no registration. To query the official IUCN Red List API instead, install the rredlist package, request a free API token, and store it in your .Renviron file:
install.packages("rredlist")
usethis::edit_r_environ() # add the line: IUCN_REDLIST_KEY=your_tokenUsage
The package provides seven main functions, used in this order:
-
arboretum_data()β retrieves and merges species data from Flora e Funga do Brasil and the World Checklist of Vascular Plants, adds IUCN Red List status, and writes an HTML guide to review and correct the data. -
arboretum_phrases()β once the data have been reviewed, generates the editable multilingual species phrases and an HTML guide to review and edit them. -
arboretum_audios()β creates folders and an HTML recording guide for custom personal audio files, including one optional extra community or local language. -
arboretum_photos()β creates folders for personal species photos. -
arboretum_labels()β generates interactive multilingual, audio-enhanced HTML species labels, with support for one optional extra language supplied directly in the input data. -
arboretum_minisite()β creates a searchable multilingual index page for all generated species labels. -
arboretum_qrcodes()β generates printable QR-code labels linked to species pages or source URLs.
1. arboretum_data: Extracting species data from taxonomic databases
The following code retrieves species information from both Flora e Funga do Brasil (FFB) and the World Checklist of Vascular Plants (WCVP, via the rWCVPdata package), handling synonym resolution and merging data from both sources into a single dataframe. The global IUCN Red List status of each species is then retrieved, as described in Installation.
library(aRboretum)
# Extract data for multiple species
spp_list <- c("Euterpe edulis", "Paubrasilia echinata", "Coffea arabica")
species_data <- arboretum_data(
spp_list = spp_list,
printed_lang = c("pt", "en", "fr", "es"),
verbose = TRUE,
save = TRUE,
format = "xlsx",
filename = "my_species_data",
dir = "extracted_data"
)The resulting dataframe includes taxonomic information, distribution data, Brazilian states, phytogeographic domains, vegetation types, endemism, establishment means, IUCN Red List status (e.g.Β "Endangered (EN)") when the species has been assessed, genus-level richness summaries, empty annotation columns (plant_uses_*, free_notes_*), and links to FFB and POWO species pages.
Review this file before going further: correct anything you disagree with and fill in the plant uses and notes you want to show on the labels. No phrase is generated at this step.
When save = TRUE, the function also writes __data_reviewing_guide.html to dir. Open it in a browser to review and edit, species by species, the vernacular names, country, endemism in Brazil, botanical countries, introduced range, establishment means, Brazilian states, phytogeographic domains, vegetation types, IUCN status, plant uses and free notes, then save or export the corrected data as CSV or XLSX. Endemism, establishment means and IUCN status are drop-down menus restricted to the values used to build the phrases. printed_lang sets the languages of the guide interface and which plant-use and note fields it shows; the data file always keeps the columns of all four languages. Running arboretum_data() again on a dir that already contains the data file reads that file instead of querying the databases again; delete or move it to retrieve the data again.
Reusing a downloaded Flora e Funga do Brasil dataset
The Flora e Funga do Brasil (FFB) dataset is downloaded with floraR into the folder given by ffb_dir (default "flora_download") and kept there. Later runs always use the most recent version already downloaded in ffb_dir, without contacting the FFB server, so arboretum_data() also works offline. The latest version is only downloaded when ffb_dir holds no version yet; to update it, run floraR::flora_download(dir = ffb_dir). You can also point ffb_dir to one specific version folder to use it as is:
species_data <- arboretum_data(
spp_list = spp_list,
ffb_dir = "~/data/flora_download/dwca_ffb_v393_430_latest"
)
2. arboretum_phrases: Generating editable species phrases
Once you agree with the retrieved data, generate the natural-language species descriptions. The phrases are written into the data file itself, in new columns that are created at this step only: full_phrases_EN, full_phrases_PT, full_phrases_ES, full_phrases_FR, and full_phrases_ADD_LANGUAGE.
arboretum_phrases(
data_path = "extracted_data/my_species_data.xlsx",
printed_lang = c("pt", "en", "fr", "es"),
add_lang = "TUKANO" # optional
)The function also writes __phrase_generating_guide.html next to the data file. Open it in a browser to read the phrases and edit them, together with the vernacular names, plant uses and free notes (and the full text of the extra language set in add_lang), then export the updated data as CSV or XLSX.
You can also edit the phrases directly in the CSV/XLSX file. Your text is then used as is by arboretum_audios() and arboretum_labels(), which only read the stored phrases and never generate them:
- Running
arboretum_phrases()again keeps every stored phrase and only fills empty cells, so clearing a cell makes that phrase be generated again. -
overwrite = TRUEgenerates all phrases again, for example after correcting the data (full_phrases_ADD_LANGUAGEis never overwritten). - Text in
plant_uses_*andfree_notes_*is appended after the phrase on the labels, so there is no need to repeat it there.
3. arboretum_audios: Prepare folders for personal audio recordings
Create folder structure and a recording guide for personal audio recordings. The guide shows the phrases stored by arboretum_phrases(), so your recordings match the label texts:
library(aRboretum)
# Create folders for personal audio recordings
arboretum_audios(
data_path = "extracted_data/my_species_data.xlsx",
printed_lang = c("pt", "en", "fr", "es"),
add_lang = "TUKANO",
verbose = TRUE
)This creates the arboretum_audios/ folder and a searchable HTML guide named:
arboretum_audios/__personal_audio_recording_guide.html
Use this guide to record custom audio files for each species and language. Personal recordings are automatically preferred over browser text-to-speech when available.
The optional add_lang argument is especially useful when collaborating with Indigenous peoples or other local communities. It allows you to prepare one additional language for personal audio recording without requiring translation of the full package interface or minisite.
4. arboretum_photos: Prepare folders for personal photos
library(aRboretum)
arboretum_photos(data_path = "extracted_data/my_species_data.xlsx",
verbose = TRUE )This creates the arboretum_photos/ folder with one species-specific folder per taxon. Add JPG, PNG, WebP, SVG, or other supported image files to the corresponding folders. When photos are found, arboretum_labels() can include them as a slideshow.
5. arboretum_labels: Generating audio-enhanced HTML labels
Once your species data and phrases are ready (from arboretum_data() and arboretum_phrases()), you can generate interactive HTML labels with text-to-speech functionality, or automatically use personal recordings when available. The labels only read the stored full_phrases_* columns; if they are missing, arboretum_labels() stops and asks you to run arboretum_phrases() first:
library(aRboretum)
# Generate HTML labels (will use personal recordings if found)
arboretum_labels(
data_path = "extracted_data/my_species_data.csv",
audio_dir = "arboretum_audios", # optional, defaults to this
printed_lang = c("pt", "en", "fr", "es"),
add_lang = "TUKANO",
path_to_logo = "jbrj_logo.png", # optional
logo_url = "https://www.jbrj.gov.br", # optional
verbose = TRUE,
dir = "html_species_labels"
)If add_lang is supplied and your input file contains a column named full_phrases_ADD_LANGUAGE, any non-empty text in that column is added as an extra language option in the generated species labels.
This extra language is intended as a flexible accessibility pathway. It is useful when you want to include species text and associated audio in a community or Indigenous language without translating the entire website or minisite interface. In this case, the custom language text is read directly from full_phrases_ADD_LANGUAGE rather than being generated by the standard translation workflow.
Features of generated HTML labels:
π Interactive maps β Distribution maps at global and Brazil state levels
π€ Dual audio β Plays personal recordings if available, falls back to TTS
π΅ Visual feedback β Button shows βπ΅ Personal Recordingβ when available
π Language selection β Built-in support for Portuguese, English, French, and Spanish, plus one optional custom language
βΉοΈ Stop control β Cancel audio playback at any time
π Text preview β Displays spoken text
π¨ Branding β Optional institutional logo with hyperlink
π± Responsive design β Works on all devices
Working with one additional community language
In some projects, a full translation of the website interface is not necessary, but it is still important to make species information accessible in a local or community language. This can be especially relevant when co-developing interpretive materials with Indigenous peoples.
For this reason, aRboretum provides an intermediate workflow through the add_lang argument in arboretum_phrases(), arboretum_audios() and arboretum_labels().
- In
arboretum_phrases(),add_langadds an editable field to the phrase guide where the full label text in the extra language can be entered. - In
arboretum_audios(),add_langcreates one additional folder per species for personal audio recording. - In
arboretum_labels(),add_langadds one extra text option to the species label when the input data includes non-empty values in the columnfull_phrases_ADD_LANGUAGE. - This extra language bypasses the standard multilingual phrase-generation workflow and is therefore ideal for curated, community-provided text.
A typical workflow is:
- Retrieve and review your species data with
arboretum_data(). - Run
arboretum_phrases(..., add_lang = "TUKANO")and enter the full label text in the extra language, either in the phrase guide or directly in thefull_phrases_ADD_LANGUAGEcolumn. - Run
arboretum_audios(..., add_lang = "TUKANO")to create folders for optional personal recordings. - Add audio files to the corresponding species folders if desired.
- Run
arboretum_labels(..., add_lang = "TUKANO")to include the extra language in the generated labels.
This approach allows the package to support meaningful multilingual accessibility before a full interface translation is implemented.
6. arboretum_minisite: Creating a searchable multilingual minisite index
After generating your species labels, create a beautiful, searchable index page that lists all species with real-time filtering and multilingual interface:
# Create an index page for all your species labels
arboretum_minisite(
labels_dir = "html_species_labels",
site_title = "My Botanical Garden Collection",
printed_lang = c("pt", "en", "fr", "es"),
group_by_family = TRUE,
logo = "garden_logo.png",
logo_url = "https://www.mybotanicalgarden.org",
verbose = TRUE
)This creates a searchable index.html page linking to all species labels. When data_path is supplied, the minisite also includes vernacular names and a dashboard summarizing species, genera, families, origin, Brazilian state distribution, phytogeographic domains, and world distribution:
π Real-time search β Filter species by name or family
π Multilingual interface β Toggle between Portuguese, English, French, Spanish
π Species counter β Shows filtered/total species
π·οΈ Family grouping β Organizes species by family (optional)
π± Responsive design β Works on all devices
π Direct links β Click any card to open its full species label
7. arboretum_qrcodes: Generate printable QR-code labels
Generate print-ready QR code labels arranged on A4 pages and saved as PDF or PNG. Four visual layouts are available: "minimalist" (default), "classic", "modern", and "botanical". Each layout differs in typography, colour palette, and border style.
# Minimalist QR codes (default) using POWO/FFB URLs from the mined data
arboretum_qrcodes(
data_path = "extracted_data/my_species_data.xlsx"
)
# Classic botanical layout linked to a published minisite
arboretum_qrcodes(
data_path = "extracted_data/my_species_data.xlsx",
base_url = "https://myinstitution.org/my-collection",
layout = "classic",
printed_lang = "pt",
path_to_logo = "jbrj_logo.png",
format = "pdf",
verbose = TRUE
)QR codes can point to species pages in a published minisite, to a single shared URL, to POWO or FFB source pages, or to the taxon name when no URL is available.
Complete workflow example
Hereβs a complete example from data extraction to custom audio labels:
# Step 1: Extract species data
my_species <- c(
"Euterpe edulis",
"Paubrasilia echinata",
"Coffea arabica",
"Luetzelburgia bahiensis"
)
species_data <- arboretum_data(
spp_list = my_species,
verbose = TRUE,
save = TRUE,
format = "xlsx",
filename = "my_garden_plants",
dir = "data"
)
# Step 2: Review data/my_garden_plants.xlsx, then generate the phrases.
# Edit them in data/__phrase_generating_guide.html or in the xlsx file
arboretum_phrases(
data_path = "data/my_garden_plants.xlsx",
printed_lang = c("pt", "en")
)
# Step 3: Create folder structure for personal audio
arboretum_audios(
data_path = "data/my_garden_plants.xlsx",
printed_lang = c("pt", "en"),
verbose = TRUE
)
# Step 4: Add your own recordings!
# Place files like:
# arboretum_audios/ARECACEAE_Euterpe_edulis_EN/my_recording.mp3
# arboretum_audios/ARECACEAE_Euterpe_edulis_PT/gravacao_pessoal.wav
# Step 5: Prepare personal photo folders
arboretum_photos(
data_path = "data/my_garden_plants.xlsx",
verbose = TRUE
)
# Step 6: Generate HTML labels (automatically uses your recordings)
arboretum_labels(
data_path = "data/my_garden_plants.xlsx",
printed_lang = c("pt", "en"),
path_to_logo = "my_garden_logo.png",
dir = "labels"
)
# Step 7: Create a multilingual minisite index
arboretum_minisite(
labels_dir = "labels",
site_title = "My Botanical Garden Collection",
printed_lang = c("pt", "en"),
group_by_family = TRUE,
logo = "my_garden_logo.png",
verbose = TRUE
)
# Step 8: Generate QR-code labels linked to the published minisite
arboretum_qrcodes(
data_path = "data/my_garden_plants.xlsx",
base_url = "https://myinstitution.org/my-collection",
layout = "classic",
printed_lang = "pt",
path_to_logo = "my_garden_logo.png",
format = "pdf",
verbose = TRUE
)
# Step 9: Deploy to an internet pages
# Copy the entire 'minisite' folder to your internet page repository
# The index.html file will automatically show all species!
# Labels are now available in the 'labels' directory
# Open in any modern browser to see distribution maps and hear your recordings!What Happens When You Open index.html?
Landing page loads β Shows all species with search bar and language selector User searches β Real-time filtering without page reload Clicks a species card β Opens individual label with:
- Interactive distribution maps
- Audio playback (personal recording or TTS)
- Language switching
- Species description
Mobile-Friendly & QR Code Ready
The site is fully responsive and works on:
π± Smartphones (iOS, Android)
π» Tablets and laptops
π₯οΈ Desktop computers
For QR codes at your botanical garden:
Point QR codes to individual species URLs: https://your-domain.com/ARECACEAE_Euterpe_edulis_label.html Visitors scan β instantly see the species label with audio!
Important Notes for Deployment
β οΈ CRITICAL: When uploading, ensure you upload:
- index.html (the main page)
- All *_label.html files (individual species pages)
- All *_files/ folders (these contain map dependencies)
- The *_files/ folders are essential for interactive maps to work. Without them, the Leaflet maps will not display!
Input data requirements
The input data for arboretum_labels() must include the following columns (as produced by arboretum_data() and completed by arboretum_phrases()):
| Column | Description |
|---|---|
taxonName |
Accepted scientific name |
family |
Botanical family |
scientificNameAuthorship |
Scientific name authorship |
FFB.vernacularName |
Vernacular names from Flora e Funga do Brasil |
country |
Country-level distribution |
endemism |
Endemism status |
botanical_country |
Native distribution in WCVP botanical countries |
introduced_to |
Introduced range from WCVP |
FFB.establishmentMeans |
Native, cultivated, naturalized, etc. |
FFB.stateProvince |
Brazilian states |
FFB.phytogeographicDomain |
Brazilian phytogeographic domains |
FFB.vegetationType |
Vegetation types |
IUCN.status |
IUCN Red List category (e.g.Β Endangered (EN)), when assessed |
plant_uses_EN/PT/ES/FR |
Plant-use annotation fields (editable via HTML guide) |
free_notes_EN/PT/ES/FR |
Free-text note fields (editable via HTML guide) |
full_phrases_EN/PT/ES/FR |
Species phrases created by arboretum_phrases(); editable, and required for every language in printed_lang
|
full_phrases_ADD_LANGUAGE |
Full phrase for the custom language set in add_lang, created by arboretum_phrases()
|
POWO.url |
POWO species page |
FFB.url |
FFB species page |
Browser requirements
The generated HTML files require a modern web browser with Web Speech API support:
- β Google Chrome (recommended for best voice selection)
- β Microsoft Edge
- β Apple Safari
- β Mozilla Firefox (recent versions)
The speech synthesis feature works offline after the page is initially loaded.
Audio format support
Personal audio recordings support multiple formats:
- MP3 (recommended for best compatibility)
- WAV
- M4A
- OGG
- FLAC
Citation
If you use aRboretum in your work, please cite:
Boucknooghe, M. & Cardoso, D. (2025). aRboretum:
Generate Multilingual Audio-Enhanced Labels for Plant Collections.
R package version 1.0.0.
https://github.com/DBOSlab/aRboretum
Documentation
Full function documentation and articles are available at the aRboretum website.
Authors
-
Martin Boucknooghe β Author, Creator UniversitΓ© de Montpellier
ORCID: 0000-0001-7072-2656 -
Domingos Cardoso β Author, Creator, Copyright holder
Rio de Janeiro Botanical Garden
ORCID: 0000-0001-7072-2656
Acknowledgments
The package uses data from:
- Flora e Funga do Brasil (FFB)
-
World Checklist of Vascular Plants (WCVP), through the
rWCVPdatapackage -
IUCN Red List of Threatened Species, through GBIF or the
rredlistpackage
