Crate wsi_streamer

Crate wsi_streamer 

Source
Expand description

§WSI Streamer

A tile server for Whole Slide Images (WSI) stored in S3-compatible object storage.

This library provides the core functionality for serving tiles from Whole Slide Images stored in cloud object storage using HTTP range requests. It streams tiles directly without downloading entire files, making it ideal for large medical imaging files (1-10GB+).

§Features

  • Range-based streaming: Fetches only the bytes needed for each tile via HTTP range requests
  • Format support: Native parsers for Aperio SVS and pyramidal TIFF formats
  • Multi-level caching: Caches slides, blocks, and encoded tiles for performance
  • Built-in web viewer: Includes OpenSeadragon-based viewer
  • Authentication: Optional HMAC-SHA256 signed URL authentication

§Architecture

The library is organized into several modules:

  • io - I/O layer with S3 range reader and block caching
  • format - TIFF/SVS parsers and JPEG handling
  • slide - Slide abstraction and registry
  • tile - Tile service and encoding
  • server - Axum-based HTTP server and routes
  • config - CLI and configuration types

§Example

use wsi_streamer::Cli;
use clap::Parser;

#[tokio::main]
async fn main() {
    // Parse CLI arguments (e.g., `wsi-streamer s3://my-bucket`)
    let cli = Cli::parse();

    match cli.into_command() {
        wsi_streamer::Command::Serve(config) => {
            // Validate and start the server
            config.validate().expect("Invalid configuration");
            println!("Starting server on {}", config.bind_address());
        }
        wsi_streamer::Command::Sign(config) => {
            // Generate signed URL
        }
        wsi_streamer::Command::Check(config) => {
            // Validate S3 connectivity
        }
    }
}

Re-exports§

pub use config::CheckConfig;
pub use config::Cli;
pub use config::Command;
pub use config::Config;
pub use config::ServeConfig;
pub use config::SignConfig;
pub use config::SignOutputFormat;
pub use error::FormatError;
pub use error::IoError;
pub use error::TiffError;
pub use error::TileError;
pub use format::tiff::check_compression;
pub use format::tiff::check_tile_tags;
pub use format::tiff::check_tiled;
pub use format::tiff::parse_u32_array;
pub use format::tiff::parse_u64_array;
pub use format::tiff::validate_ifd;
pub use format::tiff::validate_ifd_strict;
pub use format::tiff::validate_level;
pub use format::tiff::validate_pyramid;
pub use format::tiff::ByteOrder;
pub use format::tiff::Compression;
pub use format::tiff::FieldType;
pub use format::tiff::Ifd;
pub use format::tiff::IfdEntry;
pub use format::tiff::PyramidLevel;
pub use format::tiff::TiffHeader;
pub use format::tiff::TiffPyramid;
pub use format::tiff::TiffTag;
pub use format::tiff::TileData;
pub use format::tiff::ValidationError;
pub use format::tiff::ValidationResult;
pub use format::tiff::ValueReader;
pub use format::tiff::BIGTIFF_HEADER_SIZE;
pub use format::tiff::TIFF_HEADER_SIZE;
pub use format::detect_format;
pub use format::is_tiff_header;
pub use format::SlideFormat;
pub use format::is_abbreviated_stream;
pub use format::is_complete_stream;
pub use format::merge_jpeg_tables;
pub use format::prepare_tile_jpeg;
pub use format::GenericTiffLevelData;
pub use format::GenericTiffReader;
pub use format::SvsLevelData;
pub use format::SvsMetadata;
pub use format::SvsReader;
pub use io::create_s3_client;
pub use io::BlockCache;
pub use io::RangeReader;
pub use io::S3RangeReader;
pub use server::auth_middleware;
pub use server::create_dev_router;
pub use server::create_production_router;
pub use server::create_router;
pub use server::health_handler;
pub use server::slide_metadata_handler;
pub use server::slides_handler;
pub use server::tile_handler;
pub use server::AppState;
pub use server::AuthError;
pub use server::AuthQueryParams;
pub use server::ErrorResponse;
pub use server::HealthResponse;
pub use server::LevelMetadataResponse;
pub use server::OptionalAuth;
pub use server::RouterConfig;
pub use server::SignedUrlAuth;
pub use server::SlideMetadataResponse;
pub use server::SlidesQueryParams;
pub use server::SlidesResponse;
pub use server::TilePathParams;
pub use server::TileQueryParams;
pub use slide::CachedSlide;
pub use slide::LevelInfo;
pub use slide::S3SlideSource;
pub use slide::SlideListResult;
pub use slide::SlideReader;
pub use slide::SlideRegistry;
pub use slide::SlideSource;
pub use tile::clamp_quality;
pub use tile::is_valid_quality;
pub use tile::JpegTileEncoder;
pub use tile::TileCache;
pub use tile::TileCacheKey;
pub use tile::TileRequest;
pub use tile::TileResponse;
pub use tile::TileService;
pub use tile::DEFAULT_JPEG_QUALITY;
pub use tile::DEFAULT_TILE_CACHE_CAPACITY;
pub use tile::MAX_JPEG_QUALITY;
pub use tile::MIN_JPEG_QUALITY;

Modules§

config
Configuration management for WSI Streamer.
error
format
Format parsers for Whole Slide Image files.
io
server
HTTP server layer for WSI Streamer.
slide
Slide abstraction layer.
tile
Tile service layer.