Bring your own model
Take a model you already have (a LoRA or a full checkpoint, as a hosted safetensors file) and import it into Runware so it becomes a first-class catalog model. You assign it an AIR you own, declare its architecture, and from then on you call it in imageInference exactly like any built-in model. The task type is modelUpload.
Inputs to collect
- The model file as a
downloadURL. A reachable URL to yoursafetensors. Runware downloads it server-side, so it must be publicly fetchable (or signed). category- what kind of weights:lora,checkpoint,lycoris,vae, orembeddings. (Ask if ambiguous, most "my own model" cases areloraorcheckpoint.)architecture- the base family the weights were trained on (a FLUX or SDXL family identifier). This must match a known architecture so inference can pair it correctly.- The AIR to assign under the
runwaresource you control (e.g.runware:<id>@<n>), plus a humannameandversion. - Optional:
positiveTriggerWords(for a LoRA),defaultWeight, and whether to keep itprivate.
Models
- This is not a model-picking task, it is a model-importing task. The "model" is yours.
- Confirm the exact
modelUploadschema (its enums and required fields) viarunware-runbefore calling, the acceptedarchitecturevalues andcategoryenum are the gate. Do not hardcode an architecture string from memory, resolve it live. - To generate after import, route the model choice through
runware-modelsonly to confirm your new AIR is showing as available, then call it like any catalog model.
Workflow
- Resolve the
modelUploadschema (runware-run). Confirm the required set:taskType,category,architecture,format,name,version,downloadURL.formatissafetensors. - Assign your AIR. Pick
runware:<id>@<n>(therunwaresource is for account-owned models). Setnameandversion. This AIR is how you will call the model forever after. - Submit
modelUploadwith the file URL, category, architecture, and AIR. AddpositiveTriggerWords/defaultWeightfor a LoRA if you have them. - Wait pragmatically (see Technique). A LoRA deploys in about 2 minutes, a full checkpoint can be 10s of GB and takes much longer. Poll the model's availability, not the upload task.
- Generate with it. Run
imageInferencewithmodelset to your AIR. For a LoRA, attach it via the inference schema's LoRA field on a compatible base, for a checkpoint, use the AIR directly as themodel.
Technique
- You control the AIR, so name it deliberately. The
airyou pass becomes the model's permanent handle. Re-using the same AIR (plusuniqueIdentifier) makes the upload idempotent, re-submitting the identicalmodelUploaddoes not create a duplicate, it returns the existing deployed model. - Match
architectureto how the weights were trained. A LoRA trained on a FLUX base only composes with FLUX bases at inference time, the same for SDXL. Mismatched architecture is the most common reason a freshly imported model produces garbage. - Trust readiness, not the upload task. There is a known backend issue: the model finishes downloading, deploys, and is genuinely usable (
ready), butgetResponsefor the upload'staskUUIDcan stayprocessingindefinitely and never report a terminal status. Do not block on that poll. Instead, treat readiness pragmatically:- Re-issue the same
modelUpload(idempotent) and read its status, a deployed model comes backready. - Or query the model directly via
runware-modelsand check it lists as available. - Or simply attempt a small
imageInferenceagainst the new AIR, if it runs, it is ready.
- Re-issue the same
- LoRAs are cheap to iterate, checkpoints are not. Because a LoRA lands in ~2 minutes you can import several variants and A/B them, a multi-GB checkpoint is a slower, heavier commit, get the architecture right the first time.
- For ongoing lifecycle, prefer
modelManagement. It is the successor with one task type andoperation: import | update | delete.importis parameter-identical tomodelUpload(the successor for adding a model),updateedits fields,deleteremoves a model by AIR +uniqueIdentifier+categoryand is a quick synchronous op.
Parameters that matter
category-lora|checkpoint|lycoris|vae|embeddings. Drives which extra fields apply (type,defaultWeight,positiveTriggerWordsfor LoRA/LyCORIS,defaultScheduler/defaultSteps/defaultCFGfor checkpoints).architecture- must match a recognized base family (FLUX / SDXL etc.). Confirm the accepted string against the live schema, do not invent it.format-safetensors(the only accepted format).air+uniqueIdentifier- your permanent handle and the idempotency key. Same pair = same model, no duplicate.downloadURL- must be server-fetchable. Local files are not accepted here, host them first.private- defaults totrue, keep it private unless you intend to publish.positiveTriggerWords(LoRA/LyCORIS) anddefaultWeight- carry the trigger phrase and a sensible default strength so inference calls work without re-specifying.
Quality bar
- The import used only schema-valid fields, with
architecturematched to how the weights were trained (verified, not guessed). - Readiness was confirmed by the model actually generating or listing as available, not by waiting on the upload
taskUUIDto report terminal (it may never). - A first real
imageInferenceagainst the assigned AIR produces a coherent result (not architecture-mismatch noise), retry the import with the correctarchitectureif it does not. - The AIR +
uniqueIdentifierare recorded so the user can call, update, or delete the model later.
Related skills
runware-run (resolve the modelUpload schema, then run inference with your AIR), runware-models (confirm the imported model is available), runware-prompting (prompt it well, include any positiveTriggerWords), train-style-model (train a new model on Runware instead of importing one).
