ifcb_extract_features(), which computes the slim feature set (version 4) and blob masks from raw IFCB data by calling the WHOI ifcb-features Python package. Features (<bin>_features_v4.csv) and blobs (<bin>_blobs_v4.zip) are written to separate, user-specified folders, existing outputs are skipped unless overwrite = TRUE, and bins can be processed in parallel via parallel = TRUE / n_cores. A cli progress bar advances as each bin is processed (for both sequential and parallel runs), and interrupting the function (e.g. ESC / Stop) reliably terminates the parallel worker processes instead of leaving them writing files in the background.features and features_ref arguments to ifcb_py_install() to optionally install the WHOI ifcb-features package (and its dependencies) from GitHub, as required by ifcb_extract_features(). By default the latest published release is installed; features_ref can pin a specific tag or install the development branch. When installing into an existing virtual environment, the install is skipped if ifcb-features already imports successfully (unless features_ref is supplied), avoiding a slow repeated download.dataset_name argument to ifcb_list_dashboard_bins() to optionally restrict the listing to bins from a specific dataset. This argument remains useful for self-hosted dashboard instances that have not yet updated to remove the api/list_bins endpoint.IRFCB_PYTHON_VENV environment variable. When USE_IRFCB_PYTHON = "TRUE", you can now set IRFCB_PYTHON_VENV to either a named virtualenv or a full path to a venv directory to control which Python environment is activated on package load. If unset, the previous behavior of auto-discovering a venv named iRfcb is retained.ifcb_list_dashboard_bins() is deprecated. The upstream IFCB Dashboard removed the api/list_bins endpoint on 2026-03-08 (WHOIGit/ifcbdb@8c5839f1), so the function no longer works against the WHOI dashboard and other deployments tracking upstream. Use ifcb_download_dashboard_metadata() instead, which retrieves the same per-bin information from the still-supported api/export_metadata endpoint.ifcb_py_install() are now installed with a clean dependency resolution (no longer using pip --ignore-installed). Previously, installing packages with pinned, compiled dependencies (such as ifcb-features/pyifcb, which pin exact numpy/scipy/pandas versions) could layer incompatible builds on top of existing ones and corrupt the environment (e.g. ImportError: cannot import name '_spropack').gradio_url for ifcb_classify_images(), ifcb_classify_sample(), ifcb_classify_models(), and ifcb_save_classification() has changed from the Hugging Face example Space (https://irfcb-classify.hf.space) to a more stable instance hosted on SciLifeLab Serve (https://ifcb.serve.scilifelab.se). The default model_name has correspondingly been updated to "SMHI NIVA SYKE SAMS SZN ResNet 50 V6". The Hugging Face Space remains documented as a free alternative for testing and demonstration.stop(), warning(), message()) and utils::txtProgressBar to the cli package. Errors, warnings, and informational messages now use semantic inline markup (file paths, argument names, function names, values) and pluralization. Progress bars are rendered via cli::cli_progress_bar(). cli is now an Imports dependency.adc_get_roi_columns() failing to detect ROI dimension columns for older IFCB instruments (e.g. IFCB110) where HDR files use different column name casing (ROIwidth/ROIheight/start_byte) compared to newer instruments (RoiWidth/RoiHeight/StartByte). Column matching is now case-insensitive and positional fallback uses column indices instead of V-prefixed names (#77).ifcb_classify_images() to classify one or more pre-extracted IFCB PNG images through a CNN model served by a Gradio application, returning a data frame of predicted class names and confidence scores. Per-class thresholds are applied automatically.ifcb_classify_sample() to classify all images in a raw IFCB sample (.roi file) without prior PNG extraction. Internally extracts images to a temporary directory and delegates to ifcb_classify_images().ifcb_save_classification() to classify IFCB samples via Gradio API and save results as HDF5 (.h5), MAT (.mat), or CSV (.csv) files.ifcb_classify_models() to list available CNN models from a Gradio classification server..h5) and CSV (.csv) classification file support to ifcb_extract_biovolumes(), ifcb_extract_classified_images(), ifcb_summarize_class_counts(), ifcb_summarize_biovolumes(), and summarize_TBclass(), in addition to existing .mat support.ifcb_extract_pngs(), ifcb_extract_annotated_images(), and ifcb_extract_classified_images()) now preserve raw pixel values by default (normalize = FALSE), producing images comparable to IFCB Dashboard and other standard IFCB software. Previously, pixel values were stretched to the full 0-255 range using min-max normalization. This change can affect classifier training results. Set normalize = TRUE to restore the previous behavior (#75).ifcb_create_manual_file() now writes class2use_auto as a numeric matrix, matching the format produced by ifcb-analysis (#74).micron_factor in ifcb_psd() and ifcb_extract_biovolumes().skip_class in ifcb_extract_annotated_images().ifcb_run_image_gallery() is deprecated in favor of ClassiPyR::run_app(). See https://europeanifcbgroup.github.io/ClassiPyR/ for more information.old_adc in ifcb_extract_pngs(), ifcb_extract_annotated_images(), and ifcb_extract_classified_images(). ADC format (old IFCB1-6 vs new) is now auto-detected from the HDR file's ADCFileFormat parameter and the ADC column count.mat_files in ifcb_extract_biovolumes() and ifcb_summarize_biovolumes() (replaced by class_files).mat_recursive in ifcb_extract_biovolumes() and ifcb_summarize_biovolumes() (replaced by class_recursive).ifcb_annotate_samples() to create manual classification .mat files compatible with the ifcb-analysis MATLAB repository, using PNG images organized in class named subfolders and a class2use.mat file.ifcb_zip_images_by_class() to zip each PNG subfolder with optional random sampling. Useful for preparing class-specific image archives for submission.diatom_include argument to ifcb_extract_biovolumes() and ifcb_is_diatom() for manually forcing specific taxa to be treated as diatoms (overrides WoRMS classification).timestamp_param argument to ifcb_get_ferrybox_data() allowing the Ferrybox timestamp column to be specified dynamically instead of being hard coded.max_time_diff_min argument to ifcb_get_ferrybox_data() controlling the maximum allowed time difference in minutes when matching Ferrybox data to requested timestamps.biovolume_only argument to ifcb_read_features() to allow reading only biovolume related columns, improving performance for large feature tables.add_trailing_numbers argument to ifcb_extract_annotated_images() to control whether a zero-padded numeric suffix based on the manual class index is appended to class names in the output filenames.include_classes argument to ifcb_prepare_whoi_plankton() to allow explicit selection of classes to include during processing.\donttest{} instead of \dontrun{}.ifcb_get_ferrybox_data() is now more flexible and can fall back to the closest available Ferrybox observation within the specified time window when no exact or rounded match is found.ifcb_summarize_biovolumes() and ifcb_extract_biovolumes() are now more flexible and accept individual .mat files in addition to folders.ifcb_extract_biovolumes() and ifcb_summarize_biovolumes().ifcb_get_ecotaxa_example().ifcb_create_manual_file() and ifcb_create_empty_manual_file() now correctly handles NaN values in the classlist.ifcb_create_empty_manual_file() has been renamed to ifcb_create_manual_file().ifcb_match_taxa_names() is now superseded by SHARK4R::match_worms_taxa().mat_folder in ifcb_summarize_biovolumes() and ifcb_extract_biovolumes() (replaced by mat_files).expected_checksum in ifcb_download_test_data().ifcb_download_dashboard_metadata() and ifcb_list_dashboard_bins().diatom_include parameter to ifcb_extract_biovolumes() and ifcb_summarize_biovolumes() for manually forcing specific taxa to be treated as diatoms (overrides WoRMS classification) (#65).bins parameter to ifcb_psd() for selecting which bins to process.fea_v parameter to ifcb_psd() for selecting feature-file version.use_plot_subfolders parameter to ifcb_psd() to optionally save plots in subdirectories of plot_folder based on flag status.flags parameter to ifcb_psd_plot() to optionally add the quality flag annotation to the plot.ifcb_extract_biovolumes() now support both filename formats _fea_v*.csv and _features_v*.csv, increasing compatibility with legacy and new output formats (#61).ifcb_read_features(), ifcb_summarize_png_metadata(), ifcb_summarize_biovolumes(), and ifcb_extract_biovolumes() now include an optional parameter to select specific feature file versions (e.g., _v2, _v4), allowing finer control over which feature data are read and processed.$data, $fits and $flags data frames returned by ifcb_psd() now use full bin names (<sample>_<ifcb>) as sample names, improving uniqueness and consistency with downstream workflows.$data and $fits data frames returned by ifcb_psd() now preserves the original column names, including names starting with numbers or containing special characters.ifcb_psd() has been replaced by u in $data headers.$flags headers in ifcb_psd() to use sample instead of file, ensuring consistent naming across all outputs.ifcb_psd() when plot_folder is specified, improving processing speed.ifcb_download_test_data() gains checksum validation, keep_zip option, and improved retry logic.ifcb_extract_biovolumes() and ifcb_summarize_biovolumes() gain a drop_zero_volume option to exclude artifacts with zero biovolumeifcb_read_features() and ifcb_extract_biovolumes() now handles single feature_files correctly.ifcb_download_dashboard_data() and ifcb_download_whoi_plankton().NEWS.md to track package changes.ifcb_download_dashboard_data() for fetching data from the WHOI IFCB Dashboard.ifcb_download_whoi_plankton() for downloading WHOI-Plankton PNG datasets.ifcb_prepare_whoi_plankton() to process WHOI data for integration.vignette("whoi-plankton-data-integration").USE_IRFCB_PYTHON environment variable when loading the package.ifcb_extract_pngs()ifcb_extract_classified_images()ifcb_extract_annotated_images()gamma argument to ifcb_extract_annotated_images () and ifcb_extract_classified_images() for gamma correction.ifcb_is_near_land():
plot = TRUE.source.utm_zone, which is now determined automatically from
longitude.ifcb_read_hdr_data() now correctly handles files from IFCB Acquire 1.x.x.x
(#41).ifcb_convert_filenames() is more efficient and now correctly parses
filenames like "IFCB1_2010_309_192918" (#40).ifcb_py_install() has changed to
"~/.virtualenvs/iRfcb"..adc file format (IFCB1-6) by argument old_adc in:
ifcb_extract_pngs()ifcb_extract_classified_images()ifcb_extract_annotated_images()ifcb_read_mat() now returns consistent data structures aligned with
R.matlab::readMat() (#50).ifcb_summarize_png_data() is now defunct (previously deprecated in
version 0.3.11).adc_folder in ifcb_annotate_batch() (replaced by adc_files).unclassified_id in ifcb_create_empty_manual_file() (replaced by
classlist).utm_zone in ifcb_is_near_land() (now determined automatically from
longitude).ifcb_create_empty_manual_file() now accepts a complete class list via
classlist, replacing the older unclassified_id.ifcb_summarize_biovolumes() now handles custom class lists.fs and shinytest.imager (replaced by png) in ifcb_extract_pngs() and base64enc dependencies.gamma argument to ifcb_extract_pngs().verbose argument to functions:
ifcb_download_test_data()ifcb_extract_biovolumes()ifcb_is_diatom()ifcb_read_features() ifcb_summarize_biovolumes()iRfcb:::retrieve_worms_records()) to top-level function: ifcb_match_taxa_names().ifcb_get_ferrybox_data() where multiple close ferrybox timestamps caused duplicate rows. Now returns only the nearest match.ifcb_get_shark_example() and ifcb_get_shark_colnames() for testing and documentation.ifcb_merge_manual() to merge manual .mat datasets.ifcb_adjust_classes() to adjust classes in manual data.ifcb_create_class2use() to generate a class2use file.ifcb_create_empty_manual_file() to create new manual .mat files.ifcb_annotate_batch() to annotate multiple .mat files in a batch based on .png images..mat files to save space using do_compression argument in:
ifcb_correct_annotation()ifcb_replace_mat_values()ifcb_summarize_png_metadata() to summarize EcoTaxa metadata.ifcb_get_ecotaxa_example() to extract EcoTaxa headers and example data.iRfcb:::split_large_zip() in ifcb_zip_pngs().ifcb_summarize_png_data() (replaced by
ifcb_summarize_png_counts()).ifcb_get_svea_position().iRfcb:::handle_missing_positions().manual_folder, feature_folder, and class_folder
in several functions (ifcb_count_mat_annotations(),
ifcb_extract_biovolumes(), ifcb_read_features(),
ifcb_summarize_biovolumes().nrow(taxa_list) == 0 in ifcb_count_mat_annotations().mat_recursive option to ifcb_count_mat_annotations().manual_recursive option to ifcb_extract_annotated_images() and ifcb_zip_matlab().roi_recursive option to ifcb_extract_annotated_images().data_recursive option to ifcb_zip_matlab().feature_recursive option to ifcb_zip_matlab().marine_only to ifcb_is_diatom(), iRfcb:::retrieve_worms_records(), ifcb_summarize_biovolumes() and ifcb_extract_biovolumes().feature_recursive to ifcb_extract_biovolumes() and ifcb_summarize_biovolumes().mat_recursive to ifcb_extract_biovolumes() and ifcb_summarize_biovolumes().hdr_recursive to ifcb_summarize_biovolumes().ifcb_is_diatom().ifcb_summarize_biovolumes().ifcb_is_in_basin().ifcb_get_shark_example() and ifcb_get_shark_colnames().iRfcb:::retrieve_worms_records().ifcb_get_svea_position() (replaced by ifcb_get_ferrybox_data()).ifcb_summarize_biovolumes().sleep_time parameter for ifcb_download_test_data()..mat count edge case.curl for downloads.ifcb_psd() with argument micron_factor.testthat for improved stability.verbose argument to several functions to provide detailed progress messages during execution.ifcb_replace_mat_values() now only handles .mat files in the
manual_folder.ifcb_is_near_land() now returns NA if coordinates passed to the function
contain NA values.ifcb_get_trophic_type() to assign trophic strategy to taxa.ifcb_get_shark_colnames():
WADEP, PDMET, METFP, IFCBNO, TRPHY, ABUND,
and BIOVOL.SAMPLE_TIME, ABUND_UNITS_PER_LITER,
BIOVOL_PER_SAMPLE, BIOVOL_PER_LITER, C_CONC_PER_LITER, and
SEA_BASIN.extract_aphia_id(): Extract AphiaID from WoRMS record.extract_class(): Extract taxonomic class from WoRMS record.handle_missing_positions(): Handle missing positions by rounding
timestamps.ifcb_extract_biovolumes(): Compute biovolumes and carbon from IFCB data.ifcb_get_shark_colnames(): Retrieve column names for SHARK submission.ifcb_get_svea_position(): Extract GPS coordinates from ferrybox data.ifcb_is_diatom(): Identify diatoms in a taxa list.ifcb_is_in_basin(): Check whether points fall inside a sea basin.ifcb_psd_plot(): Create particle size distribution plots from IFCB data.ifcb_read_features(): Read IFCB feature files from a specified folder.ifcb_summarize_biovolumes(): Summarize biovolumes and carbon content.ifcb_summarize_class_counts(): Count TreeBagger classifier outputs.ifcb_which_basin(): Return name of sea basin a point belongs to.summarize_TBclass(): Summarize TreeBagger classifier results.vol2C_lgdiatom(): Convert biovolume to carbon for large diatoms.vol2C_nondiatom(): Convert biovolume to carbon for non-diatom protists.ifcb_read_hdr_data() where gps_only filtering could fail.ifcb_volume_analyzed() when inhibition time == 0
(#2).ifcb_is_near_land() by applying
sf::st_wrap_dateline() only when the CRS is geographic.Initial development release of iRfcb.
ifcb_convert_filenames()ifcb_correct_annotation()ifcb_count_mat_annotations()ifcb_create_manifest()ifcb_download_test_data()ifcb_extract_annotated_images()ifcb_extract_classified_images()ifcb_extract_pngs()ifcb_get_mat_names()ifcb_get_mat_variables()ifcb_get_runtime()ifcb_is_near_land()ifcb_psd()ifcb_py_install()ifcb_read_hdr_data()ifcb_read_summary()ifcb_replace_mat_values()ifcb_run_image_gallery()ifcb_summarize_png_data()ifcb_volume_analyzed_from_adc()ifcb_volume_analyzed()ifcb_zip_matlab()ifcb_zip_pngs()