UNPKG

sd-parsers

Version:

A library to read metadata from images created by Stable Diffusion

205 lines (135 loc) 5.11 kB
# SD-Parsers Read structured metadata from images created with stable diffusion. A TypeScript package for extracting prompt information and generation parameters for AI-generated images. You need images that are already embedded with generation data to use this library, it does not "predict" anything. Website & API: https://sd-parsers.vercel.app/ > **Note**: This is a TypeScript port of the original Python sd-parsers library, providing the same functionality with async/await support and TypeScript type safety. ![Example Output](example_output.png) ## Features Prompts as well as some well-known generation parameters are provided as easily accessible properties. Supports reading metadata from images generated with: * Automatic1111's Stable Diffusion web UI ✅ * Fooocus ✅ * ComfyUI ✅ * InvokeAI ✅ * NovelAI ✅ ## Installation ```bash npm install sd-parsers ``` ## Command Line Usage You can use sd-parsers from the command line to quickly extract metadata from images: ```bash npx sd-parsers image1.png image2.jpg ``` This will output the extracted metadata in JSON format for each image. ## Usage ### Basic usage: For a simple query, import `ParserManager` from `sd-parsers` and use its `parse()` method to parse an image. #### Read prompt information from a given filename with `parse()`: ```typescript import { ParserManager } from 'sd-parsers'; const parserManager = new ParserManager(); async function main() { const promptInfo = await parserManager.parse('image.png'); if (promptInfo) { for (const prompt of promptInfo.prompts) { console.log(`Prompt: ${prompt.value}`); } } } ``` #### Read prompt information from a Buffer: ```typescript import { ParserManager } from 'sd-parsers'; import { readFile } from 'fs/promises'; const parserManager = new ParserManager(); async function main() { const imageBuffer = await readFile('image.png'); const promptInfo = await parserManager.parse(imageBuffer); if (promptInfo) { console.log(promptInfo); } } ``` ### Parsing options: #### Configure metadata extraction: ```typescript import { ParserManager, Eagerness } from 'sd-parsers'; const parserManager = new ParserManager({ eagerness: Eagerness.EAGER }); ``` `Eagerness` sets the metadata searching effort: - **FAST**: cut some corners to save some time - **DEFAULT**: try to ensure all metadata is read (default) - **EAGER**: include additional methods to try and retrieve metadata (computationally expensive!) #### Only use specific parser modules: ```typescript import { ParserManager, AUTOMATIC1111Parser } from 'sd-parsers'; const parserManager = new ParserManager({ managedParsers: [AUTOMATIC1111Parser] }); ``` #### Debug mode: ```typescript import { ParserManager } from 'sd-parsers'; const parserManager = new ParserManager({ debug: true }); ``` ### Output The parser returns a `PromptInfo` object with the following structure: ```typescript interface PromptInfo { generator: Generators; samplers: Sampler[]; metadata: Record<string, any>; rawParameters: Record<string, any>; } ``` Access parsed data using helper functions: ```typescript import { getFullPrompt, getFullNegativePrompt, getModels } from 'sd-parsers'; const prompt = getFullPrompt(promptInfo); const negativePrompt = getFullNegativePrompt(promptInfo); const models = getModels(promptInfo); ``` ## API Reference ### Classes - `ParserManager`: Main class for parsing images - `AUTOMATIC1111Parser`: Parser for AUTOMATIC1111 webui images ✅ - `FooocusParser`: Parser for Fooocus images ✅ - `ComfyUIParser`: Parser for ComfyUI images ✅ - `InvokeAIParser`: Parser for InvokeAI images ✅ - `NovelAIParser`: Parser for NovelAI images ✅ ### Types - `PromptInfo`: Contains structured image generation parameters - `Sampler`: Represents a sampler used during image generation - `Model`: Represents a checkpoint model - `Prompt`: Represents an image generation prompt ### Enums - `Generators`: Supported image generators - `Eagerness`: Metadata extraction effort levels ## Development ### Building ```bash npm run build ``` ### Testing ```bash npm test ``` ### Watch mode ```bash npm run dev ``` ## Differences from Python Version This TypeScript port has some differences from the original Python version: 1. **Image Processing**: Uses Sharp instead of PIL for image processing 2. **Async/Await**: All parsing operations are asynchronous 3. **Type Safety**: Full TypeScript type definitions 4. **Limited Extractors**: Some advanced metadata extraction features are not yet implemented (PNG text chunks, advanced EXIF) 5. **Module System**: Uses ES modules/CommonJS instead of Python imports ## Contributing Contributions are welcome! This is a port of the Python sd-parsers library. If you find issues or want to add support for additional image generators, please open an issue or pull request. ## License MIT License - same as the original Python version. ## Credits - Original Python library: [sd-parsers](https://github.com/d3x-at/sd-parsers) - Image processing: [Sharp](https://sharp.pixelplumbing.com/)