The browser app is built from the same bundled Shiny source as run_app(). Each hosted build includes the WebAssembly library image produced for the matching OpenSpecy commit and its pinned dependency closure. To keep the download practical, the browser app exposes the medoid and multinomial model libraries; the local app continues to support the full libraries.
Analyze, Process, Identify, and Share Raman and (FT)IR Spectra
Raman and (FT)IR spectral analysis tool for environmental samples with a special focus on microplastics (Cowger et al. 2025, doi: 10.1021/acs.analchem.5c00962). With read_any(), Open Specy provides a single function for reading individual, batch, or map spectral data files like .asp, .csv, .jdx, .spc, .spa, .0, and .zip. process_spec() simplifies processing spectra, including smoothing, baseline correction, range restriction and flattening, intensity conversions, wavenumber alignment, and min-max normalization. Spectra can be identified in batch using an onboard reference library using match_spec(). A bundled Shiny app is available via run_app() or directly on this website.
Community and help
Join the hundreds of researchers around the world who are part of the Open Specy community by analyzing, sharing, processing, and identifying Raman and infrared spectra. Open Specy is free and open source thanks to its community and partners.
- Follow Win Cowger on LinkedIn for project updates.
- Watch OpenSpecy development on GitHub, report an issue, or request a feature.
- Email wincowger@gmail.com to join the Open Specy mailing list.
- Watch the Open Specy introduction, explore the tutorial playlist, or follow the standard operating procedure.
- The classic OpenSpecy app remains available for users who need the earlier interface.
Spectroscopy resources
- siMPle for microplastic FTIR identification.
- GEPARD for particle-based Raman and FTIR microplastic analysis.
- MolView for chemical modeling and spectral queries.
- NIST Chemistry WebBook for chemical and spectroscopy reference data.
- Thermo Fisher molecular spectroscopy learning center.
- Florida State University optical microscopy primer.
- Spectragryph for desktop spectral analysis and reference-database links.
Partner with us
Help us make open spectroscopy tools and data more useful and accessible.
- Donate to Open Specy.
- Buy Open Specy merchandise.
- Review the community contribution guidelines to volunteer time or expertise.
- Contribute spectra through the Community Data Warehouse. Shared community data use the Creative Commons Attribution 4.0 license.
Partners and contributors
We gratefully recognize the organizations and people whose financial or in-kind support has sustained Open Specy.
Monetary partners
- Thriving ($10,000–$100,000): Moore Institute for Plastic Pollution Research; Helmholtz Information & Data Science Academy; National Renewable Energy Laboratory; McPZ Foundation.
- Maintaining ($1,000–$10,000): University of California, Riverside; National Science Foundation; Alfred Wegener Institute; Hawai’i Pacific University; National Institute of Standards and Technology; University of Toronto; University of Koblenz-Landau; Thermo Fisher Scientific.
- Supporting ($100–$1,000): Jennifer Gadd.
- Saving (under $100): Anne Jefferson; Heather Szafranski; Gwendolyn Lattin; Collin Weber; Gregory Gearhart; Anika Ballent; Shelly Moore; Susanne Brander (Oregon State University); Jeremy Conkle (Texas A&M University–Corpus Christi).
In-kind partners
- Thriving ($10,000–$100,000): Win Cowger; Zacharias Steinmetz.
- Maintaining ($1,000–$10,000): Garth Covernton; Jamie Leonard; Shelly Moore; Rachel Kozloski; Katherine Lasdin; Aleksandra Karapetrova; Laura Markley; Walter Yu; Walter Waldman; Vesna Teofilovic; Monica Arienzo; Mary Fey Long Norris; Cristiane Vidal; Scott Coffin; Charles Moore; Aline Carvalho; Shreyas Patankar; Andrea Faltynkova; Sebastian Primpke; Andrew Gray; Chelsea Rochman; Orestis Herodotu; Hannah De Frond; Keenan Munno; Hannah Hapich; Jennifer Lynch.
- Supporting ($100–$1,000): Alexandre Dehaut; Gabriel Erni Cassola.
Contract services
Our experienced spectroscopists are available for contract work including:
- adding new OpenSpecy features;
- creating spectroscopy software;
- microplastic sample analysis;
- spectral identification;
- study design; and
- related custom spectroscopy projects.
Email wincowger@gmail.com to discuss a project.
Installation
OpenSpecy is available from CRAN and GitHub.
Install from CRAN (stable version)
You can install the latest release of OpenSpecy from CRAN with:
install.packages("OpenSpecy")Install from GitHub (development version)
To install the development version of this package, paste the following code into your R console (requires devtools):
if (!require(devtools)) install.packages("devtools")
devtools::install_github("wincowgerDEV/OpenSpecy-package")Simple workflow for single spectral identification
See package vignette for a detailed standard operating procedure.
# Fetch current spectral library from https://osf.io/x7dpz/
get_lib("derivative")
# Load library into global environment
spec_lib <- load_lib("derivative")
# Read sample spectrum
raman_hdpe <- read_extdata("raman_hdpe.csv") |>
read_any()
# Look at the spectrum
plotly_spec(raman_hdpe)
# Process the spectra and conform it to the library format
raman_proc <- raman_hdpe |>
process_spec(conform_spec_args = list(range = spec_lib$wavenumbers),
smooth_intens = T, make_rel = T)
# Compare raw and processed spectra
plotly_spec(raman_hdpe, raman_proc)
top_matches <- match_spec(raman_proc, library = spec_lib, na.rm = T, top_n = 5,
add_library_metadata = "sample_name",
add_object_metadata = "col_id")
# Print the top 5 results with relevant metadata
top_matches[, c("object_id", "library_id", "match_val", "SpectrumType",
"SpectrumIdentity")]
# Get all metadata for the matches
get_metadata(spec_lib, logic = top_matches$library_id)Compressed Specs workflow
as_Specs() can compress map or library spectra for fast approximate matching. The default workflow fits PCA and then Hilbert-encodes the PCA scores into exact high/low 64-bit code rows.
model <- fit_specs_pca(spec_lib, n_components = 16)
library_specs <- as_Specs(spec_lib, model)
query_specs <- as_Specs(raman_proc, model,
limits = attr(library_specs, "hilbert_model"))
match_spec(query_specs, library_specs, top_n = 5)
decompress_spec(query_specs, index = 1)Related Packages
Open Specy on Python
Kris Heath created a Open Specy python package! https://pypi.org/project/openspi/
Citations
Cowger W, Steinmetz Z, Gray A, Munno K, Lynch J, Hapich H, Primpke S, De Frond H, Rochman C, Herodotou O (2021). “Microplastic Spectral Classification Needs an Open Source Community: Open Specy to the Rescue!†Analytical Chemistry, 93(21), 7543–7548. doi: 10.1021/acs.analchem.1c00123.
Cowger W, Steinmetz Z, Leong N, Faltynkova A, Sherrod H (2024). “OpenSpecy: Analyze, Process, Identify, and Share Raman and (FT)IR Spectra.†R package, 1.0.8. https://github.com/wincowgerDEV/OpenSpecy-package.