npm package: @polar3d/file-analyzer
Description: Analyze 3D printing files (STL, 3MF, GCODE, GX) to extract metadata like printer compatibility, layers, filament info, and slicer details
Author: Polar3D
Latest version: 1.0.1

# @polar3d/file-analyzer

Analyze 3D printing files to extract metadata like printer compatibility, layer count, filament information, and slicer details.

## Features

- ✅ **Multi-format support**: STL, 3MF, GCODE, GX
- ✅ **Printer detection**: Identifies compatible printers (Bambu Lab, Prusa, Creality, etc.)
- ✅ **Layer counting**: Extracts layer count from sliced files
- ✅ **Filament analysis**: Detects colors (hex codes) and types (PLA, ABS, etc.)
- ✅ **Slicer identification**: Identifies which slicer created the file and version
- ✅ **Multi-color detection**: Determines if file requires multiple filaments
- ✅ **Framework-agnostic**: Works in browser and Node.js
- ✅ **TypeScript**: Full type definitions included

## Installation

```bash
npm install @polar3d/file-analyzer
```

## Usage

### Basic Analysis

```typescript
import { analyzeFile } from '@polar3d/file-analyzer';

const file = document.querySelector('input[type="file"]').files[0];
const result = await analyzeFile(file);

console.log(result);
// {
//   fileType: '3mf',
//   isSliced: true,
//   printerInfo: [
//     { name: 'X1 Carbon', brand: 'Bambu Lab' }
//   ],
//   layerCount: 245,
//   filamentInfo: {
//     isMultiColor: true,
//     filamentCount: 3,
//     colors: ['#FF0000', '#00FF00', '#0000FF'],
//     types: ['PLA', 'PLA', 'PLA']
//   }
// }
```

### Detailed Analysis

```typescript
import { analyzeFileDetailed } from '@polar3d/file-analyzer';

const result = await analyzeFileDetailed(file);

console.log(result);
// Includes all basic info plus:
// {
//   fileSize: 15728640,
//   slicerInfo: {
//     name: 'Bambu Studio',
//     version: '01.09.07.52'
//   },
//   ...
// }
```

### Using the Class

```typescript
import { FileAnalyzer } from '@polar3d/file-analyzer';

const analyzer = new FileAnalyzer();
const result = await analyzer.analyzeFile(file);
```

## Supported Slicers

- **Bambu Studio** - Full support
- **PrusaSlicer** - Full support
- **OrcaSlicer** - Full support
- **SuperSlicer** - Full support
- **Ultimaker Cura** - Full support
- **FlashPrint** (GX files) - Full support
- **Slic3r** - Basic support

## Supported Printer Brands

- Bambu Lab (X1, P1, A1 series)
- Prusa Research (MK3, MK4, MINI, XL)
- Creality (Ender, CR, K1 series)
- Anycubic, Elegoo, FlashForge, Ultimaker, Artillery, and more

## API

### `analyzeFile(file: File): Promise<FileAnalysisResult>`

Analyzes a 3D printing file and returns basic metadata.

**Returns:**
```typescript
{
  fileType: 'stl' | '3mf' | 'gcode' | 'gx' | 'unknown';
  isSliced: boolean;
  printerInfo?: PrinterInfo[];
  layerCount?: number;
  filamentInfo?: FilamentInfo;
}
```

### `analyzeFileDetailed(file: File): Promise<DetailedFileAnalysis>`

Returns detailed analysis including file size and slicer information.

### `FileAnalyzer`

Class for creating a reusable analyzer instance.

```typescript
const analyzer = new FileAnalyzer();
await analyzer.analyzeFile(file);
await analyzer.analyzeFileDetailed(file);
await analyzer.isValidGcodeContent(file);
await analyzer.isValid3mf(file);
```

## License

MIT © Polar3D

## Credits

Built with ❤️ by [Polar3D](https://polar3d.com) for the 3D printing community.

## Links

- [GitHub](https://github.com/Polar3D/file-analyzer)
- [npm](https://www.npmjs.com/package/@polar3d/file-analyzer)
- [Polar3D](https://polar3d.com)