AiImageMetadataReader 1.0.1
dotnet add package AiImageMetadataReader --version 1.0.1
NuGet\Install-Package AiImageMetadataReader -Version 1.0.1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="AiImageMetadataReader" Version="1.0.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="AiImageMetadataReader" Version="1.0.1" />
<PackageReference Include="AiImageMetadataReader" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add AiImageMetadataReader --version 1.0.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: AiImageMetadataReader, 1.0.1"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package AiImageMetadataReader@1.0.1
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=AiImageMetadataReader&version=1.0.1
#tool nuget:?package=AiImageMetadataReader&version=1.0.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
AiImageMetadataReader
A lightweight async library for reading AI-generated image metadata from PNG and JPEG files.
Supported Tools
| Tool | Format | Prompt | Negative Prompt | Parameters |
|---|---|---|---|---|
| Stable Diffusion (AUTOMATIC1111 / WebUI) | PNG / JPEG | ✅ | ✅ | ✅ |
| NovelAI | PNG | ✅ | ✅ | ✅ (typed) |
| ComfyUI | PNG | - | - | ✅ (workflow JSON) |
| ChatGPT / DALL-E | PNG | - | - | ✅ (C2PA) |
Installation
dotnet add package AiImageMetadataReader
Usage
Auto-detect format (PNG / JPEG)
using AiImageMetadataReader;
var metadata = await AiMetadataReader.ReadAsync("image.png");
if (!metadata.IsSuccess)
{
Console.WriteLine(metadata.Error);
return;
}
Console.WriteLine(metadata.Software); // StableDiffusionWebUi
Console.WriteLine(metadata.Prompt); // masterpiece, best quality ...
Console.WriteLine(metadata.NegativePrompt); // lowres, bad anatomy ...
Console.WriteLine(metadata.Parameters); // Steps: 20, CFG scale: 7 ...
Read PNG directly
var metadata = await AiImageMetadataReader.ReadAsync("image.png");
Read JPEG directly
var metadata = await JpegAiMetadataReader.ReadAsync("image.jpg");
Non-seekable stream (with format hint)
await using var stream = response.Content.ReadAsStreamAsync();
var metadata = await AiMetadataReader.ReadAsync(stream, hint: ".png");
Batch processing
await foreach (var (file, metadata) in AiMetadataReader.ReadDirectoryAsync("C:/images"))
{
Console.WriteLine($"{Path.GetFileName(file)}: {metadata.Prompt}");
}
// Including subdirectories
await foreach (var (file, metadata) in AiMetadataReader.ReadDirectoryAsync(
"C:/images", SearchOption.AllDirectories))
{
// ...
}
Stable Diffusion typed parameters
var metadata = await AiMetadataReader.ReadAsync("sd.png");
var sd = metadata.StableDiffusionParameters;
Console.WriteLine(sd?.Steps); // 30
Console.WriteLine(sd?.Sampler); // "Euler a"
Console.WriteLine(sd?.ScheduleType); // "Automatic"
Console.WriteLine(sd?.CfgScale); // 5.0
Console.WriteLine(sd?.Seed); // 1704679121
Console.WriteLine(sd?.Model); // "songmix_v30"
Console.WriteLine(sd?.ModelHash); // "49da1f19c3"
Console.WriteLine(sd?.ClipSkip); // 2
Console.WriteLine(sd?.Emphasis); // "No norm"
Console.WriteLine(sd?.Version); // "f1.0.0v2-..."
NovelAI typed comment
var metadata = await AiMetadataReader.ReadAsync("novelai.png");
Console.WriteLine(metadata.NovelAiComment?.Sampler); // "k_euler_ancestral"
Console.WriteLine(metadata.NovelAiComment?.Steps); // 28
Console.WriteLine(metadata.NovelAiComment?.CfgScale); // 7.0
Console.WriteLine(metadata.NovelAiComment?.Seed); // 1234567890
Console.WriteLine(metadata.NovelAiComment?.Model); // "nai-diffusion-3"
Console.WriteLine(metadata.NovelAiComment?.Width); // 832
Console.WriteLine(metadata.NovelAiComment?.Height); // 1216
ChatGPT / DALL-E (C2PA)
var metadata = await AiMetadataReader.ReadAsync("chatgpt.png");
Console.WriteLine(metadata.C2pa?.GeneratorName); // "gpt-image"
Console.WriteLine(metadata.C2pa?.GeneratedAt); // 2026-06-03 00:00:00 +00:00
Console.WriteLine(metadata.C2pa?.IsAiGenerated); // True
Console.WriteLine(metadata.C2pa?.ClaimGenerator); // "OpenAI Media Service API"
Raw entries
foreach (var (key, value) in metadata.RawEntries)
{
Console.WriteLine($"{key}: {value}");
}
AiImageMetadata
| Property | Type | Description |
|---|---|---|
Software |
AiSoftware |
Detected tool (StableDiffusionWebUi, NovelAi, ComfyUi, C2paCompatible, Unknown) |
Prompt |
string? |
Positive prompt |
NegativePrompt |
string? |
Negative prompt |
Parameters |
string? |
Raw parameter string or JSON |
StableDiffusionParameters |
StableDiffusionParameters? |
Typed SD parameters (Stable Diffusion only) |
NovelAiComment |
NovelAiComment? |
Typed NovelAI comment (NovelAI only) |
C2pa |
C2paMetadata? |
C2PA provenance data (ChatGPT etc.) |
RawEntries |
IReadOnlyDictionary<string, string> |
All text chunk entries |
IsSuccess |
bool |
Whether reading succeeded |
Error |
string? |
Error message if reading failed |
Requirements
- .NET 10
License
MIT
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net10.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.