Table of Contents

Working with Models

Query AI models: checkpoints, LoRAs, embeddings, VAEs, ControlNets, and more.

Model Types

Checkpoint, Lora, TextualInversion, Controlnet, Hypernetwork, AestheticGradient, Vae, Poses, Wildcards, MotionModule, Upscaler, Workflows

Query Examples

By Type:

// Query LoRA models only
var loraResult = await apiClient.Models
    .WhereType(ModelType.Lora)
    .ExecuteAsync(resultsLimit: 10);

if (loraResult is Result<PagedResult<Model>>.Success success)
{
    foreach (var model in success.Data.Items)
    {
        Console.WriteLine($"{model.Name} - {model.Type}");
    }
}

By Tag:

// Query models with a specific tag
var animeResult = await apiClient.Models
    .WhereTag("anime")
    .WhereType(ModelType.Lora)
    .ExecuteAsync(resultsLimit: 10);

if (animeResult is Result<PagedResult<Model>>.Success animeSuccess)
{
    Console.WriteLine($"Found {animeSuccess.Data.Items.Count} anime LoRAs");
}

By Creator:

// Query models by a specific creator
var creatorResult = await apiClient.Models
    .WhereUsername("CreatorName")
    .ExecuteAsync(resultsLimit: 10);

if (creatorResult is Result<PagedResult<Model>>.Success creatorSuccess)
{
    Console.WriteLine($"Found {creatorSuccess.Data.Items.Count} models by CreatorName");
}

By Name:

// Search models by name
var searchResult = await apiClient.Models
    .WhereName("realistic")
    .WhereType(ModelType.Checkpoint)
    .ExecuteAsync(resultsLimit: 10);

if (searchResult is Result<PagedResult<Model>>.Success searchSuccess)
{
    Console.WriteLine($"Found {searchSuccess.Data.Items.Count} realistic checkpoints");
}

By ID:

// Get a specific model by its ID
var modelResult = await apiClient.Models.GetByIdAsync(123456);

if (modelResult is Result<Model>.Success modelSuccess)
{
    var model = modelSuccess.Data;
    Console.WriteLine($"Name: {model.Name}");
    Console.WriteLine($"Type: {model.Type}");
    Console.WriteLine($"Creator: {model.Creator?.Username}");
    Console.WriteLine($"Downloads: {model.Stats?.DownloadCount}");
    Console.WriteLine($"Versions: {model.ModelVersions?.Count}");
}
else if (modelResult is Result<Model>.Failure failure)
{
    Console.WriteLine($"Model not found: {failure.Error.Message}");
}

By Version ID:

// Get a specific model version by its version ID
var versionResult = await apiClient.Models.GetByVersionIdAsync(130072);

if (versionResult is Result<ModelVersion>.Success versionSuccess)
{
    var version = versionSuccess.Data;
    Console.WriteLine($"Version: {version.Name}");
    Console.WriteLine($"Base Model: {version.BaseModel}");
    Console.WriteLine($"AIR: {version.AirIdentifier}");
    Console.WriteLine($"Parent Model: {version.Model?.Name}");
    Console.WriteLine($"Downloads: {version.Stats?.DownloadCount}");
}
else if (versionResult is Result<ModelVersion>.Failure versionFailure)
{
    Console.WriteLine($"Version not found: {versionFailure.Error.Message}");
}

By Hash:

// Get a model version by one of its file hashes (SHA256, AutoV2, CRC32, etc.)
var hashResult = await apiClient.Models.GetByVersionHashAsync("ABC123DEF456");

if (hashResult is Result<ModelVersion>.Success hashSuccess)
{
    var version = hashSuccess.Data;
    Console.WriteLine($"Found: {version.Model?.Name} - {version.Name}");
    Console.WriteLine($"AIR: {version.AirIdentifier}");
    Console.WriteLine($"Base Model: {version.BaseModel}");

    // Access file information
    foreach (var file in version.Files ?? [])
    {
        Console.WriteLine($"  File: {file.Name}");
        if (file.Hashes is { } hashes)
        {
            Console.WriteLine($"    SHA256: {hashes.Sha256}");
            Console.WriteLine($"    AutoV2: {hashes.AutoV2}");
        }
    }
}
else if (hashResult is Result<ModelVersion>.Failure hashFailure)
{
    Console.WriteLine($"Hash not found: {hashFailure.Error.Message}");
}

Model Versions

Access version metadata:

var modelForVersionInfo = await apiClient.Models.GetByIdAsync(123456);

if (modelForVersionInfo is Result<Model>.Success successVersionInfo)
{
    var version = successVersionInfo.Data.ModelVersions?.FirstOrDefault();
    if (version is not null)
    {
        Console.WriteLine($"Version: {version.Name}");
        Console.WriteLine($"AIR: {version.AirIdentifier}");
        Console.WriteLine($"Base Model: {version.BaseModel}");
        Console.WriteLine($"Downloads: {version.Stats?.DownloadCount}");
        
        if (version.TrainedWords is { } words && words.Count > 0)
        {
            Console.WriteLine($"Trigger Words: {string.Join(", ", words)}");
        }
    }
}

Filtering

Permissions:

var commercialFriendly = await apiClient.Models
    .WhereType(ModelType.Lora)
    .WhereAllowNoCredit(true)
    .WhereAllowDerivatives(true)
    .WhereAllowDifferentLicenses(true)
    .WhereCommercialUse(CommercialUsePermission.Sell)
    .ExecuteAsync(resultsLimit: 10);

if (commercialFriendly is Result<PagedResult<Model>>.Success permSuccess)
{
    Console.WriteLine($"Found {permSuccess.Data.Items.Count} commercially-friendly LoRAs");
}

Favorites (requires auth):

// Query favorited models (requires API key)
var favorites = await apiClient.Models
    .WhereFavorites()
    .ExecuteAsync();

if (favorites is Result<PagedResult<Model>>.Success favSuccess)
{
    Console.WriteLine($"You have {favSuccess.Data.Items.Count} favorited models");
    foreach (var model in favSuccess.Data.Items)
    {
        Console.WriteLine($"  - {model.Name}");
    }
}

Hidden (requires auth):

// Query hidden models (requires API key)
var hidden = await apiClient.Models
    .WhereHidden()
    .ExecuteAsync();

if (hidden is Result<PagedResult<Model>>.Success hiddenSuccess)
{
    Console.WriteLine($"You have hidden {hiddenSuccess.Data.Items.Count} models");
    foreach (var model in hiddenSuccess.Data.Items)
    {
        Console.WriteLine($"  - {model.Name}");
    }
}

Sorting

var topRated = await apiClient.Models
    .OrderBy(ModelSort.HighestRated)
    .WherePeriod(TimePeriod.Month)
    .ExecuteAsync(resultsLimit: 10);

if (topRated is Result<PagedResult<Model>>.Success topSuccess)
{
    Console.WriteLine($"Found {topSuccess.Data.Items.Count} top-rated models");
}

Options: HighestRated, MostDownloaded, Newest

Periods: Day, Week, Month, Year, AllTime

Next Steps