Working with Images
Query generated images from the Civitai gallery.
Query Examples
By Model:
// Find images generated with a specific model
var imagesByModel = await apiClient.Images
.WhereModelId(123456)
.ExecuteAsync(resultsLimit: 10);
if (imagesByModel is Result<PagedResult<Image>>.Success success)
{
foreach (var image in success.Data.Items)
{
Console.WriteLine($"Image {image.Id}: {image.Width}x{image.Height}");
}
}
By Model Version:
// Find images generated with a specific model version
var imagesByVersion = await apiClient.Images
.WhereModelVersionId(789012)
.ExecuteAsync(resultsLimit: 10);
if (imagesByVersion is Result<PagedResult<Image>>.Success versionSuccess)
{
foreach (var image in versionSuccess.Data.Items)
{
Console.WriteLine($"Image {image.Id} by {image.Username}");
}
}
By Creator:
// Find images posted by a specific user
var imagesByCreator = await apiClient.Images
.WhereUsername("Mewyk")
.OrderBy(ImageSort.MostReactions)
.WherePeriod(TimePeriod.Week)
.ExecuteAsync(resultsLimit: 10);
if (imagesByCreator is Result<PagedResult<Image>>.Success creatorSuccess)
{
foreach (var image in creatorSuccess.Data.Items)
{
var reactions = image.Stats?.LikeCount + image.Stats?.HeartCount;
Console.WriteLine($"Image {image.Id}: {reactions} reactions");
}
}
By Post:
// Find all images in a specific post
var imagesByPost = await apiClient.Images
.WherePostId(12345)
.ExecuteAsync();
if (imagesByPost is Result<PagedResult<Image>>.Success postSuccess)
{
Console.WriteLine($"Found {postSuccess.Data.Items.Count} images in post");
}
Generation Metadata
var imagesWithMeta = await apiClient.Images
.WhereModelId(123456)
.ExecuteAsync(resultsLimit: 1);
if (imagesWithMeta is Result<PagedResult<Image>>.Success metaSuccess && metaSuccess.Data.Items.Count > 0)
{
var image = metaSuccess.Data.Items[0];
if (image.Meta is { } meta)
{
Console.WriteLine($"Prompt: {meta.PositivePrompt}");
Console.WriteLine($"Steps: {meta.Steps}, CFG: {meta.ConfigurationScale}, Seed: {meta.Seed}");
Console.WriteLine($"Sampler: {meta.Sampler}, Model: {meta.ModelName}");
}
}
NSFW Filtering
var safeImages = await apiClient.Images
.WhereNsfwLevel(ImageNsfwLevel.None)
.ExecuteAsync(resultsLimit: 10);
if (safeImages is Result<PagedResult<Image>>.Success safeSuccess)
{
Console.WriteLine($"Found {safeSuccess.Data.Items.Count} safe images");
}
Levels: None, Soft, Mature, Explicit
Accessing Mature and X requires authentication.
Sorting
var mostReacted = await apiClient.Images
.OrderBy(ImageSort.MostReactions)
.WherePeriod(TimePeriod.Week)
.ExecuteAsync(resultsLimit: 20);
if (mostReacted is Result<PagedResult<Image>>.Success reactedSuccess)
{
Console.WriteLine($"Found {reactedSuccess.Data.Items.Count} most reacted images");
}
Options: MostReactions, MostComments, MostCollected, Newest, Oldest, Random
Statistics
var imagesWithStats = await apiClient.Images
.WhereModelId(123456)
.ExecuteAsync(resultsLimit: 1);
if (imagesWithStats is Result<PagedResult<Image>>.Success statsSuccess && statsSuccess.Data.Items.Count > 0)
{
var image = statsSuccess.Data.Items[0];
if (image.Stats is { } stats)
{
Console.WriteLine($"Reactions - Likes: {stats.LikeCount}, Hearts: {stats.HeartCount}");
Console.WriteLine($"Comments: {stats.CommentCount}");
}
}
Downloading
var imageToDownload = await apiClient.Images
.WhereModelId(123456)
.ExecuteAsync(resultsLimit: 1);
if (imageToDownload is Result<PagedResult<Image>>.Success downloadSuccess && downloadSuccess.Data.Items.Count > 0)
{
var image = downloadSuccess.Data.Items[0];
using var httpClient = new HttpClient();
var imageBytes = await httpClient.GetByteArrayAsync(image.Url);
await File.WriteAllBytesAsync($"{image.Id}.png", imageBytes);
Console.WriteLine($"Downloaded image {image.Id}");
}
For production, use CivitaiSharp.Tools for robust downloads with progress tracking.