The protobuf package voplica.types.ai.common: 0 services, 3 messages and 17 enums, defined in voplica/types/ai/common/caption_conflict_strategy.proto, voplica/types/ai/common/controlnet_type.proto, voplica/types/ai/common/d_type.proto, voplica/types/ai/common/generation_mode.proto, voplica/types/ai/common/inference_mode.proto, voplica/types/ai/common/model_affinity.proto, voplica/types/ai/common/model_family_type.proto, voplica/types/ai/common/model_file_role.proto, voplica/types/ai/common/model_file_structure.proto, voplica/types/ai/common/model_reference.proto, voplica/types/ai/common/model_type.proto, voplica/types/ai/common/quantization_type.proto, voplica/types/ai/common/subject_category.proto, voplica/types/ai/common/training_loss_type.proto, voplica/types/ai/common/training_lr_scheduler.proto, voplica/types/ai/common/training_noise_scheduler.proto, voplica/types/ai/common/training_optimizer.proto, voplica/types/ai/common/training_timestep_sampling.proto.
| Field |
Number |
Type |
Label |
Description |
| label |
1 |
string |
|
|
| possible_outputs |
2 |
voplica.types.base.FileType |
repeated |
|
| lora_compatibility |
3 |
ModelFamily |
repeated |
|
| generation_modes |
4 |
GenerationMode |
repeated |
|
| controlnet |
5 |
bool |
|
|
| differential_diffusion |
6 |
bool |
|
|
| reference_images |
7 |
bool |
|
True when the family consumes reference images (identity/context conditioning). |
| reference_images_on_inpaint |
8 |
bool |
|
|
| hosted |
9 |
bool |
optional |
|
| third_party |
10 |
bool |
|
|
| component_slots |
11 |
string |
repeated |
The diffusers slots a SERVED pipeline of this family needs. Empty for provider-backed families (nothing of ours ever loads their weights). A variant whose imported file set does not cover every slot is still valid: the missing components come from the donor (based_on_model_variant_id) and the verification report names them in donor_components. |
| gguf_single_file |
12 |
bool |
|
|
| video_part_refine |
13 |
bool |
|
|
| inference_modes |
14 |
InferenceMode |
repeated |
|
| Field |
Number |
Type |
Label |
Description |
| allowed_mime_types |
1 |
voplica.types.base.MimeType |
repeated |
If not provided - it means all mime types are allowed |
| Field |
Number |
Type |
Label |
Description |
| model_variant_id |
1 |
string |
|
LoRa / DoRa / fine-tune model id. |
| recommended_base_model_variant_id |
2 |
string |
optional |
Recommended base model to use when applying provided image LoRa model. |
| recommended_weight |
3 |
float |
optional |
Recommended strength/weight when using this model |
| recommended_cfg |
4 |
float |
optional |
Recommended CFG scale |
| concept_subject_text |
5 |
string |
optional |
If specified this subject text may be used when used with the selected LoRA model |
| Name |
Number |
Description |
| CAPTIONING_CONFLICT_STRATEGY_UNSPECIFIED |
0 |
|
| IGNORE |
1 |
Skips files with existing captions |
| OVERWRITE |
2 |
Overwrite existing captions |
| APPEND_NEW_TO_END |
3 |
Append newly generated captions after existing captions |
| APPEND_NEW_TO_BEGINNING |
4 |
Append newly generated captions before existing captions |
| Name |
Number |
Description |
| CONTROLNET_TYPE_UNSPECIFIED |
0 |
|
| DEPTH |
1 |
|
| OPENPOSE |
2 |
|
| CANNY |
3 |
|
| Name |
Number |
Description |
| D_TYPE_UNSPECIFIED |
0 |
|
| FLOAT32 |
1 |
aka FP32 |
| FLOAT16 |
2 |
aka FP16 |
| BFLOAT16 |
3 |
BF16 |
| FLOAT64 |
4 |
FP64 / double |
| UINT8 |
5 |
e.g. image pixels, uint8 activations |
| INT8 |
6 |
common quantized storage |
| INT16 |
7 |
|
| INT32 |
8 |
|
| BOOL |
9 |
|
| FLOAT8 |
10 |
|
| Name |
Number |
Description |
| GENERATION_MODE_UNSPECIFIED |
0 |
|
| T2I |
1 |
|
| I2I_INPAINT |
2 |
|
| I2I_EDIT |
3 |
|
| T2V |
20 |
|
| I2V |
21 |
|
| V2V |
22 |
|
| S2V |
23 |
Speech/audio-driven video generation: supplied audio drives synchronized motion/lip-sync |
| T2A |
40 |
–– Audio output (40-49) –– Text-to-audio: a prompt (plus optional lyrics) renders a music / audio track. The first audio-producing mode on the platform (MiniMax Music 3). |
| Name |
Number |
Description |
| INFERENCE_MODE_UNSPECIFIED |
0 |
|
| AUTO |
1 |
|
| FAST |
2 |
|
| BALANCED |
3 |
|
| ORIGINAL |
4 |
|
| Name |
Number |
Description |
| MODEL_VARIANT_RUNTIME_STATE_UNSPECIFIED |
0 |
|
| MODEL_VARIANT_RUNTIME_STATE_COLD |
1 |
No live worker holds the model at any tier - expect a download AND a load. |
| MODEL_VARIANT_RUNTIME_STATE_IDLE |
2 |
On disk on at least one live worker - expect a load, no download. |
| MODEL_VARIANT_RUNTIME_STATE_ACTIVE |
3 |
In RAM or VRAM on at least one live worker - the fastest start. |
| Name |
Number |
Description |
| MODEL_FAMILY_UNSPECIFIED |
0 |
|
| SDXL |
1 |
|
| FLUX_1_DEV |
2 |
|
| Z_IMAGE_TURBO |
3 |
|
| Z_IMAGE_BASE |
4 |
|
| FLUX_2_KLEIN_9B |
5 |
|
| WAN_2_2_T2V_A14B |
6 |
|
| WAN_2_2_I2V_A14B |
7 |
|
| LTX_2_2 |
8 |
|
| LTX_2_3 |
9 |
|
| WAN_2_2_S2V_14B |
10 |
|
| QWEN_IMAGE_EDIT_2511 |
11 |
|
| KREA_2 |
12 |
Krea 2: image family with reference-image conditioning (identity/context) alongside text-to-image and image editing. differential_diffusion: the platform refine encodes per-region strength as a soft differential change-map; KREA_2 serves it on Krea2InpaintPipeline’s threshold engine (the soft mask drives per-pixel exit steps), with the service normalizing the differential map convention (white = preserve) onto the pipeline’s inpaint convention (white = regenerate) at the boundary. |
| LTX_2_5 |
13 |
LTX 2.5: the next LTX video generation (LTX_2_3’s successor — same two-stage latent-upsampling shape, same distilled/SFT split). Video-only family. |
| MINIMAX_H3 |
14 |
MiniMax H3: video family with reference conditioning. The FIRST family to declare V2V — its references channel takes whole videos (frames + fps + their own soundtrack) as semantic conditioning rather than as a restyle source with bound geometry. |
| MINIMAX_MUSIC_3 |
15 |
MiniMax Music 3: the platform’s FIRST possible_outputs: [AUDIO_FILE] family, and the only consumer of the new T2A mode — a prompt (plus optional lyrics) renders a music track. No LoRA compatibility is declared: nothing trains adapters for this family today, and an absent list is what the resolver reads as “no combinable adapter exists” (WAN_2_2_S2V_14B’s explicit [] says the same thing in one more character). |
| SEEDANCE_2_5 |
16 |
|
| NANO_BANANA_PRO |
17 |
|
| NANO_BANANA_2 |
18 |
|
| QWEN_IMAGE_2512 |
19 |
|
| FLUX_2_KLEIN_BASE_9B |
20 |
|
| QWEN_IMAGE_2_1 |
21 |
|
| WAN_3_0 |
22 |
|
| WAN_3_0_PRIME |
23 |
|
| FLUX_3_KLEIN |
24 |
|
| FLUX_3_KLEIN_BASE |
25 |
|
What ONE file inside a model variant’s asset IS. A variant holds exactly one primary
(ROLE_MODEL_WEIGHTS / ROLE_DIFFUSION_WEIGHTS / ROLE_FULL_CHECKPOINT / ROLE_LORA /
ROLE_CONTROLNET) plus any companions (ROLE_VAE, ROLE_TEXT_ENCODER).
The role is DECLARED at registration by the importer (ConvertParamType.MODEL_GEN_ROLE_ID ->
voplica.types.file.ModelGenInfo.role) and LEARNED again, per file, by the model-files
verification from the tensors themselves. The learned value wins at read time.
Every value carries the ROLE_ prefix on purpose: protobuf scopes enum VALUE names to the
enclosing PACKAGE, and voplica.types.ai.common.ModelType already declares LORA, CONTROLNET,
VAE and UPSCALER (model_type.proto). Bare names would not compile.
| Name |
Number |
Description |
| MODEL_FILE_ROLE_UNSPECIFIED |
0 |
|
| ROLE_MODEL_WEIGHTS |
1 |
The variant’s main weights, kind not yet learned - what the IMPORTER declares before any tensor has been read. Also what a LoRA/ControlNet file declares at import: “the main weights of whatever this model is”. |
| ROLE_DIFFUSION_WEIGHTS |
2 |
Learned: diffusion transformer / unet only. Everything else comes from the donor (based_on_model_variant_id) or from companions in the same asset. |
| ROLE_FULL_CHECKPOINT |
3 |
Learned: several components (transformer + VAE and/or text encoders) in one file. |
| ROLE_VAE |
4 |
|
| ROLE_TEXT_ENCODER |
5 |
component_name says which diffusers slot this encoder fills (“text_encoder”, “text_encoder_2”, …). |
| ROLE_LORA |
6 |
|
| ROLE_CONTROLNET |
7 |
|
| ROLE_UPSCALER |
8 |
|
| ROLE_CONFIG |
9 |
json/yaml. Never imported - kept so a refusal can be honest about what the file was. |
| ROLE_OTHER |
10 |
|
| Name |
Number |
Description |
| MODEL_FILE_STRUCTURE_UNSPECIFIED |
0 |
|
| ZIP |
1 |
Full model inside ZIP archive |
| SAFETENSORS |
2 |
Full model (common for models with small text encoder parts. Rare for models with big text encoder parts) |
| TRANSFORMER_SAFETENSORS |
3 |
Pruned model (only transformer part) |
| TRANSFORMER_ZIP |
4 |
Pruned model inside ZIP archive (only transformer part) (rare) |
| GGUF |
5 |
Full model as GGUF (rare). Declared for correctness: NO loader exists for this structure today - every .gguf the platform resolves is TRANSFORMER_GGUF (see ModelFamilyExtension.gguf_single_file). |
| TRANSFORMER_GGUF |
6 |
Pruned model in gguf format (only transformer part) |
| Name |
Number |
Description |
| MODEL_TYPE_UNSPECIFIED |
0 |
|
| CHECKPOINT |
1 |
|
| LORA |
2 |
|
| CONTROLNET |
3 |
|
| VAE |
4 |
|
| UPSCALER |
5 |
|
| Name |
Number |
Description |
| QUANTIZATION_TYPE_UNSPECIFIED |
0 |
|
| QUANT_NONE |
1 |
no quantization |
| QUANT_INT8 |
2 |
standard 8-bit integer quantization |
| QUANT_INT4 |
3 |
generic 4-bit quantization |
| QUANT_UINT8 |
4 |
unsigned 8-bit |
| QUANT_Q4_0 |
5 |
q4_0 style |
| QUANT_Q4_1 |
6 |
q4_1 style |
| QUANT_Q5_0 |
7 |
|
| QUANT_Q5_1 |
8 |
|
| QUANT_NF4 |
9 |
nf4 / normal float 4 |
| QUANT_Q4F16 |
10 |
q4f16 style (4-bit with f16 scale) |
| QUANT_GPTQ |
11 |
GPTQ family |
| QUANT_AWQ |
12 |
AWQ family |
| QUANT_BNB |
13 |
bitsandbytes formats (bnb) |
| QUANT_FP8 |
14 |
fp8-like quant (emerging) |
| QUANT_FP16 |
15 |
Half-precision formats standard 16-bit floating point |
| QUANT_BF16 |
16 |
bfloat16 (brain floating point) |
| QUANT_Q2_K |
17 |
GGUF k-quants and modern formats (learned by model files verification) |
| QUANT_Q3_K_S |
18 |
|
| QUANT_Q3_K_M |
19 |
|
| QUANT_Q3_K_L |
20 |
|
| QUANT_Q4_K_S |
21 |
|
| QUANT_Q4_K_M |
22 |
|
| QUANT_Q5_K_S |
23 |
|
| QUANT_Q5_K_M |
24 |
|
| QUANT_Q6_K |
25 |
|
| QUANT_Q8_0 |
26 |
|
| QUANT_FP4 |
27 |
4-bit float (e.g. fp4_e2m1) |
| QUANT_SVDQ_INT4 |
28 |
Nunchaku / SVDQuant int4 |
| QUANT_SVDQ_FP4 |
29 |
Nunchaku / SVDQuant fp4 |
| QUANT_FP8_SCALED |
30 |
ComfyUI comfy_quant / legacy scaled-fp8: fp8 weights + per-layer scales |
| QUANT_NVFP4 |
31 |
ComfyUI comfy_quant nvfp4: e2m1 nibble pairs packed into UINT8, fp8 per-block scales (group_size 16) and one f32 global scale. Dequantised to bf16 at load. |
What KIND OF SUBJECT a thing depicts or targets. One taxonomy reused everywhere:
- a
DatasetSubject’s kind (LOCALIZABLE categories only: CHARACTER_GENERIC, OBJECT,
VEHICLE, CLOTHES, … - things that can be detected/cropped in an image);
- a preparation target’s category (adds framings like CHARACTER_FACE - a face-framed
target of a CHARACTER subject; never a subject kind itself);
- whole-image categories (STYLE, BACKGROUND, PLACE, POSE, CONCEPT, GENERIC) - valid for
targets, trainings, models, and datasets, but never for subjects (nothing to localize);
- a training’s / model’s / checkpoint’s category and a dataset’s best-for hint.
| Name |
Number |
Description |
| SUBJECT_CATEGORY_UNSPECIFIED |
0 |
|
| GENERIC |
1 |
Any model. Same as unspecified. |
| STYLE |
2 |
Specific style |
| CONCEPT |
3 |
Concept. for example, photo angle, details amount, type of eyes, zoom, tattoo, etc. |
| POSE |
4 |
|
| CLOTHES |
5 |
|
| VEHICLE |
6 |
|
| OBJECT |
7 |
|
| BACKGROUND |
8 |
|
| PLACE |
9 |
|
| CHARACTER_GENERIC |
100 |
Generic character (for example full body character LoRa) |
| CHARACTER_FACE |
101 |
Character face only (for example LoRa trained to reproduce a specific face only) |
| Name |
Number |
Description |
| TRAINING_LOSS_TYPE_UNSPECIFIED |
0 |
|
| L1 |
1 |
|
| L2 |
2 |
L2 is the default recommended setting for image model training (FLUX, SDXL, etc.) |
| HUBER |
3 |
|
| SMOOTH_L1 |
4 |
|
How the LEARNING RATE evolves over training (kohya --lr_scheduler,
diffusers get_scheduler). This is distinct from the NOISE scheduler that governs the
diffusion noising process (TrainingNoiseScheduler).
COSINE_WITH_RESTARTS is the scheduler that consumes
StandardTrainingParams.lr_scheduler_cycles.
| Name |
Number |
Description |
| TRAINING_LR_SCHEDULER_UNSPECIFIED |
0 |
|
| TRAINING_LR_SCHEDULER_CONSTANT |
1 |
|
| TRAINING_LR_SCHEDULER_CONSTANT_WITH_WARMUP |
2 |
|
| TRAINING_LR_SCHEDULER_COSINE |
3 |
|
| TRAINING_LR_SCHEDULER_COSINE_WITH_RESTARTS |
4 |
|
| TRAINING_LR_SCHEDULER_LINEAR |
5 |
|
| TRAINING_LR_SCHEDULER_POLYNOMIAL |
6 |
|
The diffusion NOISE scheduler used during training - i.e. how noise is added to / removed
from latents while computing the training loss (ai-toolkit train.noise_scheduler).
This is distinct from the LEARNING RATE scheduler (TrainingLrScheduler).
TRAINING_NOISE_SCHEDULER_UNSPECIFIED means “let the trainer pick the canonical scheduler
for the target ModelFamily” (for example FLOWMATCH for FLUX / SD3 / Z-Image flow-matching
families, DDPM for SDXL). Set an explicit value only to override that default.
| Name |
Number |
Description |
| TRAINING_NOISE_SCHEDULER_UNSPECIFIED |
0 |
|
| TRAINING_NOISE_SCHEDULER_FLOWMATCH |
1 |
Rectified-flow / flow-matching objective (FLUX, SD3, Z-Image, WAN, LTX, …). |
| TRAINING_NOISE_SCHEDULER_DDPM |
2 |
Denoising Diffusion Probabilistic Models objective (SDXL / SD1.5 epsilon or v-prediction). |
| TRAINING_NOISE_SCHEDULER_EDM |
3 |
Continuous-time EDM-style noising (Karras et al.). |
| Name |
Number |
Description |
| TRAINING_OPTIMIZER_UNSPECIFIED |
0 |
|
| ADAMW8BIT |
1 |
|
| ADAMW |
2 |
|
| PRODIGY |
3 |
|
| ADA_FACTOR |
4 |
|
How diffusion timesteps are sampled during training. Enum values are package-prefixed to
avoid name collisions in the shared voplica.types.ai.common namespace (proto3 enum
values are scoped to the enclosing package, not the enum).
| Name |
Number |
Description |
| TRAINING_TIMESTEP_SAMPLING_UNSPECIFIED |
0 |
|
| TRAINING_TIMESTEP_SAMPLING_UNIFORM |
1 |
|
| TRAINING_TIMESTEP_SAMPLING_SHIFT |
2 |
|
| TRAINING_TIMESTEP_SAMPLING_FLUX_SHIFT |
3 |
|
| TRAINING_TIMESTEP_SAMPLING_SIGMA |
4 |
|
| TRAINING_TIMESTEP_SAMPLING_SIGMOID |
5 |
|