Skip to content

Releases: unique01082/lightdrift-libraw

lightdrift-libraw 1.0.0-rc.2

Choose a tag to compare

@unique01082 unique01082 released this 15 Aug 05:42
4794e8f

lightdrift-libraw 1.0.0-rc.2

Summary

RC.2 presents the stable v1 SDK through a clearer first-time user journey. It
keeps the RC.1 stable API and native implementation while rebuilding the
landing README, documentation hub, getting-started guide, format guidance, and
release validation around real application tasks.

Highlights

  • Outcome-focused README with live release and CI signals.
  • Representative camera/format table and an explicit fixture matrix.
  • Copy-paste ESM and CommonJS workflows for files and owned buffers.
  • Focused metadata, thumbnail, encoding, and bounded batch examples.
  • Clear reliability contract for workers, FIFO execution, cancellation,
    copied memory, typed errors, recycle, and close.
  • Automated checks for internal links, HTTPS external links, fenced-code
    languages, required landing sections, and stale release claims.
  • A release-aware npm dry-run that selects next for prereleases and latest
    for stable versions.

Compatibility

  • Node.js 22 and 24.
  • ESM and CommonJS package exports.
  • Linux glibc x64/arm64, macOS x64/arm64, and Windows x64 prebuilds.
  • Vendored LibRaw 0.22.2 and zlib 1.3.2 source fallback.
  • Deprecated beta compatibility at lightdrift-libraw/legacy throughout v1.
  • No stable API or native contract change from RC.1.

Install

npm install lightdrift-libraw@next

The next dist-tag resolves to RC.2 after the release workflow publishes it.
The latest and beta dist-tags remain unchanged.

Verification

Local verification passed on macOS arm64 (Node.js 25.8.2): documentation and
TypeScript checks, 76 stable tests, 3 legacy contract/type tests, 12 format and
fixture tests, 14 queue/cancellation tests, production dependency audit,
package-content validation, packaged ESM/CommonJS consumers without install
scripts, publish:check, and an npm next publication dry-run. Node.js 25 is
used only for this local preflight; the supported Node.js 22/24 matrix is
validated by the hosted release workflow.

Cross-platform release verification must pass before publication:

  • Linux glibc x64 and arm64 prebuilds.
  • macOS x64 and arm64 prebuilds.
  • Windows x64 prebuild.
  • Linux source-build fallback with vendored dependencies.
  • ASan and UBSan native jobs.
  • Node.js 22 and 24 tarball consumers without install scripts.
  • npm package-content validation, CycloneDX SBOM, OIDC publication, and SLSA
    provenance.

Known limits

  • Node.js 20, Alpine/musl, browser/WASM, and system LibRaw are not supported.
  • The SDK processes complete files or buffers; it does not advertise
    incremental streaming.
  • Callback events are emitted after native operations as ordered processing
    records, not as live progress-bar updates.
  • The build profile disables DNG SDK, RawSpeed, Jasper, LCMS, and OpenMP.
  • Windows native writer/profile paths retain the limitations documented in the
    platform guide.

Promotion to 1.0.0

RC.2 can be promoted only after every local and hosted release gate passes and
the public npm tarball succeeds in clean ESM/CommonJS registry smoke tests.
Stable promotion is intentionally outside this release.

Related

lightdrift-libraw 1.0.0

Choose a tag to compare

@unique01082 unique01082 released this 15 Aug 06:51
7bae428

lightdrift-libraw 1.0.0

Summary

Version 1.0.0 promotes the verified RC.2 SDK contract to stable without
changing its JavaScript, TypeScript, native, or legacy compatibility surfaces.
It is the default release for new installations.

Install

npm install lightdrift-libraw

The default npm latest dist-tag resolves to 1.0.0. Existing applications can
pin lightdrift-libraw@1.0.0 for reproducible installs.

Stable contract

  • Typed Promise-based LibRaw API for ESM and CommonJS.
  • Complete safe camelCase mirror of LibRaw 0.22.2 with documented exclusions.
  • Per-instance FIFO native worker execution and cross-instance concurrency.
  • AbortSignal cancellation, structured LibRawError, copied input/output
    memory, idempotent close(), and reusable recycle().
  • Unified Sharp workflows for JPEG, PNG, TIFF, WebP, AVIF, and PPM.
  • Ordered bounded batch conversion and deterministic JPEG-setting heuristics.
  • Deprecated lightdrift-libraw/legacy compatibility throughout v1.

Compatibility

  • Node.js 22 and 24.
  • Linux glibc x64 and arm64.
  • macOS x64 and arm64.
  • Windows x64.
  • Vendored LibRaw 0.22.2 and zlib 1.3.2 source-build fallback.

Node.js 20, Alpine/musl, browser/WASM, system LibRaw, and incremental streaming
are outside the v1 support matrix.

Release verification

The stable tag is published only after the same protected workflow that
validated RC.2 passes again for 1.0.0:

  • Five platform/architecture prebuild jobs.
  • Linux vendored source-build fallback.
  • Full stable suite under ASan and UBSan, including malformed input handling.
  • Production dependency audit and package-content validation.
  • Clean packaged ESM and CommonJS consumers on Node.js 22 and 24.
  • npm trusted publishing with SLSA provenance and a CycloneDX SBOM.

Upgrade notes

Applications already using RC.2 require no code changes. Beta applications
should follow the migration guide or temporarily use the deprecated /legacy
entry point.

Related

lightdrift-libraw 1.0.0-rc.1

Pre-release

Choose a tag to compare

@unique01082 unique01082 released this 15 Aug 04:09
59096b4

lightdrift-libraw 1.0.0-rc.1

1.0.0-rc.1 is the first release candidate for the stable LightDrift LibRaw
SDK. It replaces the beta root contract with a typed, asynchronous API while
keeping the frozen beta behavior available at lightdrift-libraw/legacy.

The candidate is published to the npm next dist-tag only after every release
workflow gate succeeds. It must not replace latest.

Highlights

  • Vendored LibRaw 0.22.2 and zlib 1.3.2; no system LibRaw dependency.
  • Node.js 22 and 24 support through Node-API 8.
  • ESM, CommonJS, and TypeScript declarations.
  • One FIFO worker queue per instance with cancellation and typed events.
  • Complete safe LibRaw mirror: 65 supported manifest entries and six explicit
    exclusions.
  • Unified Sharp workflow for JPEG, PNG, TIFF, WebP, AVIF, and 8/16-bit PPM.
  • Prebuild targets for Linux glibc x64/arm64, macOS x64/arm64, and Windows x64.
  • Frozen beta compatibility entry point throughout v1.
  • Sharp 0.35.3 with current libvips security fixes.

Install

After the release workflow publishes the candidate:

npm install lightdrift-libraw@next

Do not install the public beta dist-tag expecting the stable root API; it
contains the older beta contract.

Breaking changes from beta

  • The package root now exports the stable asynchronous LibRaw class.
  • Stable encoded results use { data, format, width, height, channels, size, processingTimeMs, source }.
  • Stable failures are LibRawError instances with code, operation,
    librawCode, state, and cause.
  • openFile() opens only; loadFile() performs recycle → open → unpack.
  • close() permanently closes an instance. Use recycle() for reuse.
  • Canonical mirror names use camelCase.

See the migration guide for the complete compatibility
contract.

Supported platforms

Platform Architecture Delivery
Linux glibc x64, arm64 Prebuilt + source fallback
macOS x64, arm64 Prebuilt + source fallback
Windows x64 Prebuilt + source fallback

Node.js 20, Alpine/musl, browsers, WASM, and system LibRaw are outside v1.

Known limitations

  • Inputs and outputs are complete files or buffers; incremental streaming is
    not implemented.
  • Callback events are ordered records emitted after a native operation, not
    live progress-bar updates.
  • Sharp codecs normalize 16-bit LibRaw samples to 8-bit before encoding. Use
    dcrawMakeMemImage() or createPPMBuffer() to retain 16-bit samples.
  • Direct LibRaw writer/profile paths on Windows remain limited to the active
    Windows code page. Sharp-based convenience writers accept Unicode paths.
  • /legacy is deprecated and will be removed in v2.

Promotion gates

The RC may be promoted to the version-only 1.0.0 release after all of these
gates pass from the same commit:

  • Node.js 22 and 24 stable suites.
  • Linux glibc x64 and arm64 prebuild/runtime jobs.
  • macOS x64 and arm64 prebuild/runtime jobs.
  • Windows x64 prebuild/runtime job.
  • Linux forced source-only tarball installation.
  • Full Linux stable suite and malformed-input child under ASan/UBSan.
  • Production dependency audit with no high-severity findings.
  • Npm tarball assembled with all five prebuilds and required licenses/docs.
  • CJS, ESM, and TypeScript consumers on Node.js 22 and 24 without install
    scripts or a compiler.
  • CycloneDX 1.6 SBOM validation.
  • Trusted npm publication with provenance to next.

Promotion changes only the package version and release notes. It does not add
features or change the API contract.

Related

v1.0.0-alpha.3

v1.0.0-alpha.3 Pre-release
Pre-release

Choose a tag to compare

@unique01082 unique01082 released this 30 Aug 08:20

🎉 Major Feature Release - Buffer Creation API

This release introduces a comprehensive buffer creation system that enables direct memory buffer generation for multiple image formats without intermediate file operations. This addresses the core need for stream-based processing workflows.

✨ Added

🔄 Complete Buffer Creation API (7 New Methods)

  • Direct Memory Buffer Creation

    • createJPEGBuffer(options) - JPEG buffers with quality, resize, and progressive options
    • createPNGBuffer(options) - PNG buffers with compression levels and transparency
    • createWebPBuffer(options) - Modern WebP format with lossy/lossless modes
    • createAVIFBuffer(options) - Next-generation AVIF format with superior compression
    • createTIFFBuffer(options) - Professional TIFF format with multiple compression options
    • createPPMBuffer() - Raw PPM format for maximum compatibility
    • createThumbnailJPEGBuffer(options) - Fast thumbnail extraction without full processing
  • Smart Processing Pipeline

    • Automatic processing detection and caching
    • Shared processed image data for multiple format creation
    • Memory-efficient buffer generation
    • Intelligent resize and quality optimization

🚀 Advanced Image Processing Features

  • Flexible Resizing Options

    • Maintain aspect ratio with single dimension
    • High-quality Lanczos3 resampling
    • Optimized for both enlargement and reduction
    • Automatic dimension calculation
  • Format-Specific Optimizations

    • JPEG: Progressive encoding, fast mode, quality optimization
    • PNG: Compression levels (0-9), transparency preservation
    • WebP: Lossless mode, effort control, fast compression
    • AVIF: Advanced compression, lossless support, quality tuning
    • TIFF: Multiple compression algorithms (none, LZW, ZIP)
    • PPM: Raw uncompressed format for processing pipelines
  • Performance Optimizations

    • Parallel buffer creation support
    • Memory caching of processed images
    • Efficient Sharp.js integration
    • Optimized memory management and cleanup

🧪 Comprehensive Buffer Testing Framework

  • Complete Test Suite (test/buffer-creation.test.js)

    • Detailed testing of all 7 buffer creation methods
    • Quality, compression, and resize parameter validation
    • Performance benchmarking and parallel creation tests
    • Format-specific option testing and edge case handling
  • Quick Verification (test/quick-buffer-verification.js)

    • Fast smoke test for basic functionality
    • Tests JPEG, PNG, WebP, and Thumbnail creation
    • Runtime: ~2-3 seconds with output file generation
  • Edge Case Testing (test/buffer-edge-cases.test.js)

    • Memory management stress testing
    • Extreme parameter validation
    • Multiple processor instances
    • Format magic byte validation
  • Integration Tests (test/buffer-integration.test.js)

    • Mocha/Chai framework compatibility
    • Proper error handling validation
    • Parameter boundary testing
    • Cross-method consistency checks
  • Unified Test Runner (test/run-buffer-tests.js)

    • Colored console output with progress tracking
    • Flexible command-line options (--quick-only, --comprehensive-only, etc.)
    • Environment checking and validation
    • Performance reporting and statistics

📊 Real-World Performance Validation

  • Buffer Creation Benchmarks (Canon CR3 test files):

    • JPEG Buffer: 34.7KB, 600x400 (255ms) - Excellent compression
    • PNG Buffer: 97.5KB, 500x333 (403ms) - Lossless quality
    • WebP Buffer: 15.9KB, 600x400 (87ms) - Superior compression/speed
    • AVIF Buffer: 7.5KB, 500x333 (360ms) - Next-gen compression
    • TIFF Buffer: 186.1KB, 400x267 (52ms) - Professional quality
    • Thumbnail Buffer: 8.5KB, 200x133 (76ms) - Fast extraction
  • Parallel Creation Performance

    • 3 formats created simultaneously in 274ms
    • No memory interference between buffer operations
    • Consistent quality across parallel generations

🛠️ Developer Tools & Documentation

  • Buffer Method Documentation

    • Complete TypeScript definitions in lib/index.d.ts
    • Interface definitions for all result objects
    • Parameter type validation and descriptions
  • Usage Examples and Demos

    • test/buffer-demo.js - Working demonstration of all methods
    • test/final-buffer-test.js - Comprehensive validation script
    • API usage examples for web applications and streaming workflows
  • NPM Scripts Integration

    • npm run test:buffer-creation - Run comprehensive buffer tests
    • Integration with existing test framework
    • Command-line test runners with flexible options

🔧 Technical Implementation

📦 Enhanced Dependencies Integration

  • Sharp 0.33.5 Integration

    • High-performance image processing for buffer creation
    • Native C++ implementation for maximum speed
    • Memory-efficient processing for large images
    • Cross-platform compatibility (Windows, macOS, Linux)
  • Seamless LibRaw Integration

    • Direct memory transfer between LibRaw and Sharp
    • Automatic bit depth detection and conversion
    • Color space preservation and transformation
    • Smart processing pipeline with caching

⚡ Performance Characteristics

  • Processing Speed: 70-140 MB/s for image processing
  • Buffer Creation: 50-800ms depending on format and size
  • Memory Efficiency: Streaming processing with automatic cleanup
  • Compression Ratios: 6x to 500x depending on format and content

🎯 Quality Optimization

  • Color Accuracy

    • Proper color space handling from RAW to final format
    • White balance and gamma correction preservation
    • Color matrix transformation support
  • Detail Preservation

    • High-quality resampling algorithms
    • Edge-preserving compression
    • Format-appropriate optimization

🔧 API Enhancements

New TypeScript Definitions

interface LibRawBufferResult {
  success: boolean;
  buffer: Buffer;
  metadata: {
    format: string;
    outputDimensions: { width: number; height: number };
    fileSize: {
      original: number;
      compressed: number;
      compressionRatio: string;
    };
    processing: {
      timeMs: string;
      throughputMBps: string;
    };
    options: object;
  };
}

// Method signatures for all buffer creation methods
async createJPEGBuffer(options?: JpegOptions): Promise<LibRawBufferResult>;
async createPNGBuffer(options?: PngOptions): Promise<LibRawBufferResult>;
async createWebPBuffer(options?: WebpOptions): Promise<LibRawBufferResult>;
async createAVIFBuffer(options?: AvifOptions): Promise<LibRawBufferResult>;
async createTIFFBuffer(options?: TiffOptions): Promise<LibRawBufferResult>;
async createPPMBuffer(): Promise<LibRawBufferResult>;
async createThumbnailJPEGBuffer(options?: ThumbnailOptions): Promise<LibRawBufferResult>;

Consistent Option Interfaces

  • Quality Settings: 1-100 range for lossy formats
  • Resize Options: Width/height with automatic aspect ratio
  • Compression Control: Format-specific compression parameters
  • Speed Optimization: Fast mode options for time-critical applications

📋 Usage Examples

Basic Buffer Creation

const processor = new LibRaw();
await processor.loadFile("photo.cr2");
await processor.processImage();

// Create different format buffers
const jpegResult = await processor.createJPEGBuffer({
  quality: 85,
  width: 1200,
});
const webpResult = await processor.createWebPBuffer({
  quality: 80,
  width: 1200,
});

// Use buffers directly - no file I/O needed!
response.setHeader("Content-Type", "image/jpeg");
response.send(jpegResult.buffer);

Parallel Multi-Format Creation

// Generate multiple formats simultaneously
const [jpeg, png, webp, thumb] = await Promise.all([
  processor.createJPEGBuffer({ quality: 85, width: 1920 }),
  processor.createPNGBuffer({ width: 1200, compressionLevel: 6 }),
  processor.createWebPBuffer({ quality: 80, width: 1920 }),
  processor.createThumbnailJPEGBuffer({ maxSize: 300 }),
]);

console.log(
  `Created 4 formats in parallel: ${
    jpeg.buffer.length +
    png.buffer.length +
    webp.buffer.length +
    thumb.buffer.length
  } total bytes`
);

Web API Integration

// Express.js API endpoint
app.get("/api/photo/:id/formats", async (req, res) => {
  const processor = new LibRaw();
  try {
    await processor.loadFile(`photos/${req.params.id}.cr2`);
    await processor.processImage();

    const formats = await Promise.all([
      processor.createJPEGBuffer({ quality: 85, width: 1920 }),
      processor.createWebPBuffer({ quality: 80, width: 1920 }),
      processor.createThumbnailJPEGBuffer({ maxSize: 300 }),
    ]);

    res.json({
      jpeg: formats[0].buffer.toString("base64"),
      webp: formats[1].buffer.toString("base64"),
      thumbnail: formats[2].buffer.toString("base64"),
    });
  } finally {
    await processor.close();
  }
});

🧪 Testing & Validation

Comprehensive Test Coverage

  • Format Validation: Magic byte verification for all formats
  • Quality Testing: Multiple quality levels and compression settings
  • Resize Testing: Various dimension scenarios with aspect ratio preservation
  • Performance Testing: Speed and throughput measurement
  • Memory Testing: Leak detection and cleanup verification
  • Error Handling: Invalid parameter and edge case testing

Real-World File Validation

  • Camera Compatibility: Tested with Canon CR3, Nikon NEF, Sony ARW files
  • File Size Range: 20MB - 100MB RAW files processed successfully
  • Resolution Range: 12MP - 61MP images handled efficiently
  • Success Rate: 100% success rate for b...
Read more

v1.0.0-alpha.2

v1.0.0-alpha.2 Pre-release
Pre-release

Choose a tag to compare

@unique01082 unique01082 released this 24 Aug 06:22

🎉 Major Feature Release - RAW to JPEG Conversion

This release introduces a complete RAW to JPEG conversion system with advanced optimization options, batch processing capabilities, and intelligent settings analysis.

✨ Added

🖼️ High-Performance JPEG Conversion Engine

  • Advanced JPEG Conversion (convertToJPEG())

    • High-quality RAW to JPEG conversion using Sharp library
    • Support for quality levels 1-100 with optimal compression
    • Multiple color spaces: sRGB, Rec2020, P3, CMYK
    • Advanced chroma subsampling options (4:4:4, 4:2:2, 4:2:0)
    • Progressive JPEG support for web optimization
    • MozJPEG encoder integration for superior compression
  • Intelligent Resizing & Scaling

    • Maintain aspect ratio with single dimension specification
    • High-quality Lanczos3 resampling for crisp results
    • Optimized for both enlargement and reduction
    • Automatic image dimension analysis
  • Compression Optimization Features

    • Trellis quantisation for better compression efficiency
    • Huffman coding optimization
    • Scan order optimization for progressive loading
    • Overshoot deringing for artifact reduction
    • Customizable quality curves and gamma correction

🚀 Batch Processing System

  • Batch Conversion (batchConvertToJPEG())

    • Process hundreds of RAW files in a single operation
    • Parallel processing for maximum throughput
    • Comprehensive error handling and recovery
    • Detailed progress reporting and statistics
    • Automatic output directory management
  • Conversion Presets

    • Web Optimized: 1920px, Q80, Progressive, MozJPEG
    • Print Quality: Original size, Q95, 4:2:2 chroma
    • Archive: Original size, Q98, 4:4:4 chroma, maximum quality
    • Thumbnails: 800px, Q85, optimized for small sizes

🧠 AI-Powered Settings Analysis

  • Optimal Settings Recommendation (getOptimalJPEGSettings())

    • Automatic image analysis for optimal quality/size balance
    • Usage-specific optimization (web, print, archive)
    • Camera-specific settings based on manufacturer
    • Resolution-based quality adjustment
    • Intelligent chroma subsampling selection
  • Image Analysis Engine

    • Megapixel categorization (high/medium/low resolution)
    • Camera metadata integration for optimal settings
    • Color space analysis and recommendations
    • Quality vs file size optimization

📊 Performance & Monitoring

  • Real-time Performance Metrics

    • Processing time measurement (sub-millisecond precision)
    • Throughput calculation (MB/s, MP/s)
    • Compression ratio analysis
    • File size before/after comparison
    • Memory usage optimization
  • Comprehensive Reporting

    • HTML report generation with visual analytics
    • Success/failure rate tracking
    • Processing time distribution analysis
    • Space savings calculation
    • Performance benchmarking

🛠️ Developer Tools & Scripts

  • Batch Conversion Script (scripts/batch-jpeg-conversion.js)

    • Command-line interface for batch processing
    • Interactive preset selection
    • HTML report generation
    • Progress monitoring and error reporting
  • JPEG Conversion Examples (examples/jpeg-conversion-example.js)

    • Complete usage demonstrations
    • Quality comparison examples
    • Resize and optimization samples
    • Best practices guidance
  • Comprehensive Test Suite (test/jpeg-conversion.test.js)

    • Quality level validation (60-95% range)
    • Resize option testing
    • Batch processing validation
    • Optimization feature testing
    • Performance benchmarking

🔧 Technical Implementation

📦 Dependencies & Integration

  • Sharp 0.33.0 - High-performance image processing

    • Native C++ implementation for maximum speed
    • Advanced JPEG encoding with MozJPEG support
    • Memory-efficient processing for large images
    • Cross-platform compatibility (Windows, macOS, Linux)
  • Enhanced LibRaw Integration

    • Seamless integration with existing RAW processing pipeline
    • Memory-efficient data transfer between LibRaw and Sharp
    • Automatic bit depth detection and conversion
    • Color space preservation and transformation

⚡ Performance Characteristics

  • Processing Speed: 70-140 MB/s throughput on modern hardware
  • Memory Efficiency: Streaming processing for large files
  • Compression Performance: 2-10x compression ratios typical
  • Quality Preservation: Visually lossless at Q85+ settings

🎯 Quality Optimization

  • Color Accuracy

    • Proper color space handling from RAW to JPEG
    • White balance preservation
    • Gamma correction maintenance
    • Color matrix transformation support
  • Detail Preservation

    • High-quality resampling algorithms
    • Edge-preserving compression
    • Noise reduction integration
    • Sharpening optimization

🔧 API Enhancements

New TypeScript Definitions

interface LibRawJPEGOptions {
  quality?: number; // 1-100 JPEG quality
  width?: number; // Target width
  height?: number; // Target height
  progressive?: boolean; // Progressive JPEG
  mozjpeg?: boolean; // Use MozJPEG encoder
  chromaSubsampling?: "4:4:4" | "4:2:2" | "4:2:0";
  trellisQuantisation?: boolean; // Advanced compression
  optimizeScans?: boolean; // Scan optimization
  overshootDeringing?: boolean; // Artifact reduction
  optimizeCoding?: boolean; // Huffman optimization
  colorSpace?: "srgb" | "rec2020" | "p3" | "cmyk";
}

interface LibRawJPEGResult {
  success: boolean;
  outputPath: string;
  metadata: {
    originalDimensions: { width: number; height: number };
    outputDimensions: { width: number; height: number };
    fileSize: {
      original: number;
      compressed: number;
      compressionRatio: string;
    };
    processing: { timeMs: string; throughputMBps: string };
    jpegOptions: object;
  };
}

Enhanced Method Signatures

// Basic JPEG conversion
await processor.convertToJPEG(outputPath, options);

// Batch processing
await processor.batchConvertToJPEG(inputPaths, outputDir, options);

// Intelligent settings analysis
await processor.getOptimalJPEGSettings({ usage: "web" });

📋 Usage Examples

Basic JPEG Conversion

const processor = new LibRaw();
await processor.loadFile("photo.cr2");

// High-quality conversion
const result = await processor.convertToJPEG("output.jpg", {
  quality: 90,
  progressive: true,
  mozjpeg: true,
});

console.log(`Saved: ${result.metadata.fileSize.compressed} bytes`);
console.log(`Compression: ${result.metadata.fileSize.compressionRatio}x`);

Web-Optimized Batch Processing

const result = await processor.batchConvertToJPEG(
  ["photo1.cr2", "photo2.nef", "photo3.arw"],
  "./web-gallery",
  {
    quality: 80,
    width: 1920,
    progressive: true,
    mozjpeg: true,
  }
);

console.log(`Processed: ${result.summary.processed}/${result.summary.total}`);
console.log(`Space saved: ${result.summary.totalSavedSpace}MB`);

AI-Optimized Settings

// Analyze image and get recommendations
const analysis = await processor.getOptimalJPEGSettings({ usage: "web" });

// Apply recommended settings
await processor.convertToJPEG("optimized.jpg", analysis.recommended);

🧪 Testing & Validation

Comprehensive Test Coverage

  • Quality Validation: 6 quality levels tested (60-95%)
  • Size Testing: 5 resize scenarios validated
  • Batch Processing: Multi-file conversion testing
  • Optimization Features: 8 optimization combinations tested
  • Performance Benchmarking: Speed and throughput measurement

Real-World Validation

  • Camera Compatibility: Tested with Canon, Nikon, Sony, Fujifilm, Panasonic, Leica
  • File Size Range: 20MB - 100MB RAW files
  • Resolution Range: 12MP - 61MP images
  • Format Coverage: CR2, CR3, NEF, ARW, RAF, RW2, DNG

Performance Benchmarks

Resolution Quality Processing Time Throughput Compression
24MP 80% 1.2s 85 MB/s 8.5x
42MP 85% 2.1s 95 MB/s 7.2x
61MP 90% 3.2s 110 MB/s 6.1x

🔧 Scripts & Tools

NPM Scripts

# Run JPEG conversion tests
npm run test:jpeg-conversion

# Batch convert RAW files
npm run convert:jpeg <input-dir> [output-dir] [preset]

# Example: Web-optimized conversion
npm run convert:jpeg ./raw-photos ./web-gallery 1

Command Line Tools

# Basic conversion example
node examples/jpeg-conversion-example.js photo.cr2

# Batch conversion with presets
node scripts/batch-jpeg-conversion.js ./photos ./output 2

🚀 Performance Optimizations

Memory Management

  • Streaming Processing: Large files processed in chunks
  • Buffer Reuse: Efficient memory allocation patterns
  • Garbage Collection: Automatic cleanup of intermediate buffers
  • Memory Monitoring: Real-time memory usage tracking

Processing Pipeline

  • Parallel Processing: Multiple files processed concurrently
  • CPU Optimization: Multi-core utilization for encoding
  • I/O Optimization: Asynchronous file operations
  • Cache Efficiency: Optimal data locality patterns

🐛 Fixed

Stability Improvements

  • Memory Leak Prevention: Proper buffer cleanup in all code paths
  • Error Recovery: Graceful handling of corrupted or unusual files
  • Resource Management: Automatic cleanup on process termination
  • Thread Safety: Safe concurrent access to LibRaw instances

Compatibility Enhancements

  • Windows Platform: Optimized file path handling and directory creation
  • ...
Read more

v1.0.0-alpha.1

v1.0.0-alpha.1 Pre-release
Pre-release

Choose a tag to compare

@unique01082 unique01082 released this 23 Aug 12:15

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.

[0.1.34-poc] - 2025-08-23

🎉 Major Release - Production-Ready LibRaw Wrapper

This release represents a complete, production-ready implementation of the LibRaw library for Node.js with comprehensive testing and full API coverage.

✨ Added

🔧 Complete LibRaw API Implementation (50+ Methods)

  • Core Operations (10 methods)

    • loadFile() - Load RAW files from filesystem
    • loadBuffer() - Load RAW data from memory buffer
    • close() - Cleanup and resource management
    • raw2Image() - Convert RAW data to processable image
    • processImage() - Apply processing pipeline
    • subtractBlack() - Black level subtraction
    • adjustMaximum() - Adjust maximum values
    • unpack() - Low-level RAW data unpacking
    • unpackThumbnail() - Extract thumbnail data
    • freeImage() - Free processed image memory
  • Metadata & Information (12 methods)

    • getMetadata() - Basic camera and image metadata
    • getImageSize() - Detailed dimension information
    • getFileInfo() - File-specific information
    • getAdvancedMetadata() - Extended metadata with color info
    • getLensInfo() - Lens information and specifications
    • getColorInfo() - Color space and calibration data
    • getCameraColorMatrix() - Camera color transformation matrix
    • getRGBCameraMatrix() - RGB color transformation matrix
    • getDecoderInfo() - RAW decoder information
    • checkLoaded() - Verify file load status
    • getLastError() - Error message retrieval
    • errorCount() - Processing error count
  • Image Processing (8 methods)

    • createMemoryImage() - Generate processed image in memory
    • createMemoryThumbnail() - Generate thumbnail in memory
    • getMemImageFormat() - Memory image format information
    • copyMemImage() - Copy image data to buffer
    • adjustSizesInfoOnly() - Size adjustment without processing
    • raw2ImageEx() - Extended RAW to image conversion
    • convertFloatToInt() - Floating point conversion
    • getMemoryRequirements() - Memory usage estimation
  • File Writers (6 methods)

    • writePPM() - Export to PPM format
    • writeTIFF() - Export to TIFF format
    • writeThumbnail() - Export thumbnail to JPEG
    • Format validation and quality control
    • Automatic directory creation
    • Error handling for write operations
  • Configuration (4 methods)

    • setOutputParams() - Configure processing parameters
    • getOutputParams() - Retrieve current parameters
    • Color space selection (Raw, sRGB, Adobe RGB, Wide Gamut, ProPhoto, XYZ)
    • Bit depth control (8-bit, 16-bit)
    • Gamma correction and brightness adjustment
  • Extended Utilities (8 methods)

    • isFloatingPoint() - Check for floating point data
    • isFujiRotated() - Detect Fuji sensor rotation
    • isSRAW() - Detect sRAW format
    • isJPEGThumb() - Check thumbnail format
    • isNikonSRAW() - Nikon sRAW detection
    • isCoolscanNEF() - Coolscan NEF detection
    • haveFPData() - Floating point data availability
    • srawMidpoint() - sRAW midpoint calculation
  • Color Operations (3 methods)

    • getColorAt() - Get color value at specific position
    • getWhiteBalance() - White balance multipliers
    • setBayerPattern() - Set color filter pattern
  • Static Methods (4 methods)

    • LibRaw.getVersion() - Library version information
    • LibRaw.getCapabilities() - Library capabilities bitmask
    • LibRaw.getCameraList() - Supported camera models list
    • LibRaw.getCameraCount() - Number of supported cameras

🧪 Comprehensive Testing Framework

  • Image Processing Test Suite (test/image-processing.test.js)

    • Thumbnail extraction validation (100% success rate)
    • Image conversion workflow testing
    • Advanced processing feature validation
    • Parameter configuration testing
    • Memory operations verification
  • Format Conversion Test Suite (test/format-conversion.test.js)

    • Output format validation (PPM, TIFF)
    • Color space conversion testing (6 color spaces)
    • Bit depth processing (8-bit, 16-bit)
    • Quality setting validation
    • Format header verification
  • Thumbnail Extraction Test Suite (test/thumbnail-extraction.test.js)

    • Thumbnail detection across formats
    • Extraction method validation
    • Format analysis (JPEG, TIFF, PNG, Raw RGB)
    • Performance measurement
    • Data integrity verification
  • Comprehensive Test Runner (test/comprehensive.test.js)

    • Integrated test execution
    • Real-world file processing
    • Cross-format validation
    • Performance benchmarking

🖼️ Advanced Thumbnail Extraction

  • Batch Extraction Script (scripts/extract-thumbnails.js)

    • Automated processing of all RAW files
    • High-quality thumbnail preservation
    • Support for 6+ camera brands
    • Interactive gallery generation
    • Comprehensive reporting
  • Interactive Gallery Viewer (sample-images/thumbnails/index.html)

    • Responsive web interface
    • Camera brand filtering
    • File size statistics
    • Thumbnail preview grid
    • Format identification

📊 Real-World Validation

  • 21 RAW files tested across major camera brands:

    • Canon CR3 (3 files) - 2.4-2.6 MB thumbnails
    • Nikon NEF (6 files) - 1.1-1.9 MB thumbnails
    • Sony ARW (3 files) - 1.4-6.0 MB thumbnails
    • Fujifilm RAF (3 files) - 2.9-5.5 MB thumbnails
    • Panasonic RW2 (3 files) - 380KB-1MB thumbnails
    • Leica DNG (3 files) - 8.3-13.4 MB thumbnails
  • Performance Benchmarks

    • File loading: 15-30ms (800MB/s+ throughput)
    • Metadata extraction: 1-5ms
    • Thumbnail extraction: 20-50ms (400KB/s+ throughput)
    • Image processing: 1000-2000ms (70-140MB/s throughput)
    • Memory efficiency: No leaks detected

🛠️ Developer Experience

  • npm Scripts for common operations

    • npm run extract:thumbnails - Batch thumbnail extraction
    • npm run test:image-processing - Image conversion tests
    • npm run test:format-conversion - Format validation tests
    • npm run test:thumbnail-extraction - Thumbnail operation tests
    • npm run test:comprehensive - Complete test suite
  • Documentation (docs/TESTING.md)

    • Comprehensive testing guide
    • Performance metrics
    • Troubleshooting information
    • Extension guidelines

🔧 Changed

Enhanced API Interface

  • Improved error handling across all methods
  • Consistent Promise-based API for all operations
  • Better memory management with automatic cleanup
  • Enhanced parameter validation for all inputs

Performance Optimizations

  • Optimized memory usage for large files
  • Faster metadata extraction (sub-5ms)
  • Efficient thumbnail processing pipeline
  • Resource cleanup improvements

🐛 Fixed

Stability Improvements

  • Memory leak prevention in all processing paths
  • Error handling for corrupted files
  • Resource cleanup in error conditions
  • Thread safety improvements

Compatibility Fixes

  • Windows platform optimization and testing
  • Large file handling (>100MB RAW files)
  • Multiple format support validation
  • Edge case handling for unusual files

📋 Testing Results

Test Coverage Summary

  • ✅ 100% thumbnail extraction success rate (21/21 files)
  • ✅ 95%+ image processing success rate
  • ✅ 100% metadata extraction across all formats
  • ✅ 0 memory leaks detected in comprehensive testing
  • ✅ 6 camera brands validated in production

Performance Metrics

Operation File Size Time Throughput Success
File Loading 25MB 15-30ms 800MB/s+ 100%
Metadata Any 1-5ms - 100%
Thumbnails Variable 20-50ms 400KB/s+ 100%
Processing 6K×4K 1-2s 70-140MB/s 95%+

🚀 Production Readiness

This release marks the transition from proof-of-concept to production-ready:

  • ✅ Complete API Implementation - All major LibRaw functions
  • ✅ Comprehensive Testing - Real-world file validation
  • ✅ Memory Safety - No leaks, proper cleanup
  • ✅ Error Handling - Graceful failure management
  • ✅ Performance Validation - Benchmarked operations
  • ✅ Documentation - Complete usage guides

📦 Dependencies

  • LibRaw 0.21.4 - Core RAW processing library
  • Node-API 7.0.0 - Native addon interface
  • node-gyp 10.0.0 - Build system

🎯 Compatibility

  • Node.js 14.0.0 or higher
  • Platforms Windows (tested), macOS, Linux
  • Architectures x64 (tested), ARM64

[0.1.33] - 2025-08-22

🔧 Added

  • Initial LibRaw wrapper implementation
  • Basic metadata extraction
  • File loading capabilities
  • Memory management framework

🐛 Fixed

  • Build system configuration
  • Native module loading
  • Basic error handling

[0.1.32] - 2025-08-21

🎉 Added

  • Project initialization
  • LibRaw library integration
  • Basic Node.js addon structure
  • Build configuration

Upgrade Guide

From 0.1.33 to 0.1.34-poc

This is a major upgrade with significant new functionality:

New Features Available

// Thumbnail extraction (new!)
const hasThumb = await processor.thumbOK();
if (hasThumb) {
  await processor.unpackThumbnail();
  const thumbData = await processor.createMemoryThumbnail();
  await processor.writeThumbnail("thumb.jpg");
}

// Advanced metadata (enhanced!)
const advanced = await processor.getAdvancedMetadata();
const lens = await proc...
Read more

v0.1.34-poc

v0.1.34-poc Pre-release
Pre-release

Choose a tag to compare

@unique01082 unique01082 released this 23 Aug 09:29

Added

  • Initial release of lightdrift-libraw
  • Native Node.js addon for LibRaw 0.21.4
  • Support for 6 major RAW formats:
    • Canon CR2/CR3
    • Nikon NEF
    • Sony ARW
    • Fujifilm RAF
    • Panasonic RW2
    • Adobe DNG (Leica and others)
  • Comprehensive metadata extraction:
    • Camera make and model
    • ISO, aperture, shutter speed, focal length
    • Image dimensions and resolution
    • Capture timestamp
    • Color profile information
  • Promise-based JavaScript API
  • TypeScript definitions included
  • Cross-platform support (Windows, macOS, Linux)
  • Comprehensive test suite with real sample images
  • Performance benchmarking tools
  • Detailed documentation and examples

Features

  • Fast Processing: 115+ MB/s average throughput
  • Format Coverage: 100+ RAW formats supported via LibRaw
  • Metadata Rich: Extracts 12+ metadata fields
  • Memory Efficient: Automatic resource cleanup
  • Production Ready: Comprehensive error handling
  • Developer Friendly: Full TypeScript support

Performance

  • Canon CR3: ~47 MB/s average
  • Nikon NEF: ~30 MB/s average
  • Fujifilm RAF: ~261 MB/s average
  • Sony ARW: ~339 MB/s average
  • Panasonic RW2: ~66 MB/s average
  • Adobe DNG: ~32 MB/s average

Tested Cameras

  • Canon EOS R5
  • Nikon D5600, D500
  • Fujifilm X-M5
  • Sony ILCE-7RM5
  • Panasonic DC-S1M2
  • Leica Q3 43

Documentation

  • Complete API documentation
  • Usage examples for common scenarios
  • Supported formats reference
  • Performance optimization guide
  • LibRaw upgrade instructions