Civitai Generator Python Client
A Python client for Civitai's generator to run Civitai models from your Python code.
Quick Start
To get started with the Civitai Generator Python Client, you can use the following resources:
- Google Colab Notebook: Jump into a pre-configured environment with a live notebook to try out the Civitai SDK. 
- Streamlit Demo: See the Civitai SDK in action with a live Streamlit app demo. View Streamlit Demo 
Installation
pip install civitai-py
Authenticate
Before running any Python scripts that use the API, you need to set your Civitai API token in your environment.
Grab your token from civitai.com/user/account and set it as an environment variable:
export CIVITAI_API_TOKEN=<your token>
Requirements
- Python 3.7+
Usage
Import the Civitai SDK:
import civitai
Create a txt2img job:
input = {
    "model": "urn:air:sd1:checkpoint:civitai:4201@130072",
    "params": {
        "prompt": "RAW photo, face portrait photo of 26 y.o woman, wearing black dress, happy face, hard shadows, cinematic shot, dramatic lighting",
        "negativePrompt": "(deformed iris, deformed pupils, semi-realistic, cgi, 3d, render, sketch, cartoon, drawing, anime, mutated hands and fingers:1.4), (deformed, distorted, disfigured:1.3)",
        "scheduler": "EulerA",
        "steps": 20,
        "cfgScale": 7,
        "width": 512,
        "height": 512,
        "clipSkip": 2
    }
}
Run a model:
response = civitai.image.create(input)
Using Additional Networks
The SDK supports additional networks: LoRA, VAE, Hypernetwork, Textual Inversion, LyCORIS, Checkpoint, and LoCon.
To use any of the networks availabe on Civitai, simply add the additionalNetworks field into the input:
input = {
    "model": "urn:air:sd1:checkpoint:civitai:4384@128713",
    "params": {
        "prompt": "masterpiece, best quality, 1girl, IncrsAhri, multiple tails, fox tail, korean clothes, skirt, braid, arms behind back",
        "negativePrompt": "(worst quality:1.4), (low quality:1.4), simple background, bad anatomy",
        "scheduler": "EulerA",
        "steps": 25,
        "cfgScale": 7,
        "width": 512,
        "height": 768,
        "seed": -1,
        "clipSkip": 2
    },
    "additionalNetworks": {
        "urn:air:sd1:lora:civitai:162141@182559": {
            "type": "Lora",
            "strength": 1.0
        }
    }
}
In the case of Lora and LoCon networks, set the strength of the network; for TextualInversion, set the triggerWord of the network.
civitai.image.create
Run a model with inputs you provide.
response = civitai.image.create(options)
| name | type | description | 
|---|---|---|
| model | string | null | Required. The Civitai model to use for generation. | 
| params.prompt | string | null | Required. The main prompt for the image generation. | 
| params.negativePrompt | string | null | Optional. The negative prompt for the image generation. | 
| params.scheduler | Scheduler | null | Optional. The scheduler algorithm to use. Possible values are: EulerA,Euler,LMS,Heun,DPM2,DPM2A,DPM2SA,DPM2M,DPMSDE,DPMFast,DPMAdaptive,LMSKarras,DPM2Karras,DPM2AKarras,DPM2SAKarras,DPM2MKarras,DPMSDEKarras,DDIM,PLMS,UniPC,Undefined,LCM,DDPM,DEIS. | 
| params.steps | number | null | Optional. The number of steps for the image generation process. | 
| params.cfgScale | number | null | Optional. The CFG scale for the image generation. | 
| params.width | number | Required. The width of the generated image. | 
| params.height | number | Required. The height of the generated image. | 
| params.seed | number | null | Optional. The seed for the image generation process. | 
| params.clipSkip | number | null | Optional. The number of CLIP skips for the image generation. | 
| callbackUrl | string | null | Optional. URL that will be invoked upon completion of this job | 
| additionalNetworks | ImageJobNetworkParams | null | Optional. An associative list of additional networks, keyed by the AIR of the network. Each network is of type AssetType. | 
| controlNets | Array<ImageJobControlNet> | null | Optional. An associative list of additional networks. | 
Additional Networks
| additionalNetworks | Record<string, ImageJobNetworkParams> | Optional. An associative list of additional networks, keyed by the AIR of the network. Each network is described by an ImageJobNetworkParamsobject. | 
|---|---|---|
| type | AssetType | Optional. The type of the asset. Can be one of Lora,Hypernetwork,TextualInversion,Lycoris,Checkpoint,Vae,LoCon. | 
| strength | number | Optional. In case of Lora and LoCon, set the strength of the network. | 
| triggerWord | string | Optional. In case of a TextualInversion, set the trigger word of the network. | 
ControlNets
| controlNets | Array<ImageJobControlNet> | Optional. An array of control networks that can be applied to the image generation process. Each ImageJobControlNetobject in the array can have the following properties: | 
|---|---|---|
| preprocessor | ImageTransformer | null | Optional. Specifies the image transformer to be applied as a preprocessor. Possible values are Canny,DepthZoe,SoftedgePidinet,Rembg. | 
| weight | number | null | Optional. The weight of the control net. | 
| startStep | number | null | Optional. The step at which the control net starts to apply. | 
| endStep | number | null | Optional. The step at which the control net stops applying. | 
| imageUrl | string | null | Optional. The URL of the image associated with the controlnet. | 
civitai.jobs.get
Fetches job details based on a provided token or job ID. If both are provided, the token takes precedence.
job_id = "your_job_id_here"
response = civitai.jobs.get(id=job_id)
# OR
token = "your_token_here"
response = civitai.jobs.get(token=token)
civitai.jobs.query
Retrieve a collection of jobs by querying properties, e.g., userId. You can optionally include a detailed boolean flag to get detailed information about the jobs.
query = {
    "properties": {
        "userId": 4  # Querying by userId
    }
}
detailed = False  # Optional boolean flag to get detailed job definitions. False by default.
response = civitai.jobs.query(detailed=detailed, query_jobs_request=query)
civitai.jobs.cancel
Cancel a job by its jobId.
response = civitai.jobs.cancel(job_id)
This method cancels a job that is currently scheduled or running. It requires the jobId of the job you wish to cancel. On successful cancellation, it returns a response object indicating the cancellation status.
Contributing Your Changes
After making your changes:
- Push your changes to your fork.
- Open a pull request against the main repository.
- Describe your changes and how they improve the project or fix issues.
Your contributions will be reviewed, and if accepted, merged into the project.
Additional Guidelines
- Include unit tests for new features or bug fixes.
- Update the documentation if necessary.
Thank you for contributing to the Civitai Generator Python Client! 🥹🤭