https://github.com/useapi/midjourney-api-client
Python client library for Midjourney API by useapi.net
https://github.com/useapi/midjourney-api-client
ai api integration midjourney openapi
Last synced: 9 months ago
JSON representation
Python client library for Midjourney API by useapi.net
- Host: GitHub
- URL: https://github.com/useapi/midjourney-api-client
- Owner: useapi
- Created: 2023-10-14T22:34:44.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-11-03T22:50:54.000Z (about 2 years ago)
- Last Synced: 2025-04-28T14:14:03.929Z (9 months ago)
- Topics: ai, api, integration, midjourney, openapi
- Language: Python
- Homepage: https://useapi.net
- Size: 45.9 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# midjourney-api-client
This package contains Python client library for Midjourney API by [useapi.net](https://useapi.net).
[Useapi.net](https://useapi.net) provides a simple, reliable and affordable way to use [Midjourney](https://midjourney.com/) via standard REST API.
Quick [demo](https://useapi.net/demo).
## Requirements.
Python 3.7+
## Installation & Usage
### pip install
```sh
pip install midjourney-api-client
```
You may need to run `pip` with root permission: `sudo pip install midjourney-api-client`.
Then import the package:
```python
import midjourney_api_client
```
## API Overview
Midjourney [/imagine](https://docs.midjourney.com/docs/quick-start#5-use-the-imagine-command) command available via [jobs/imagine](https://useapi.net/docs/api-v1/jobs-imagine) API endpoint.
Midjourney [upscale or create variations](https://docs.midjourney.com/docs/quick-start#8-upscale-or-create-variations) and [enhance or modify](https://docs.midjourney.com/docs/quick-start#9-enhance-or-modify-your-image) button commands available via [jobs/button](https://useapi.net/docs/api-v1/jobs-button) API endpoint.
Midjourney [/describe](https://docs.midjourney.com/docs/describe) command available via [jobs/describe](https://useapi.net/docs/api-v1/jobs-describe) API endpoint.
Midjourney [/blend](https://docs.midjourney.com/docs/blend) command available via [jobs/blend](https://useapi.net/docs/api-v1/jobs-blend) API endpoint.
Use [jobs/?jobid=jobid](https://useapi.net/docs/api-v1/jobs-jobid) API endpoint to retrieve job results.
Postman [collection](https://www.postman.com/useapinet/workspace/useapi-net).
Swagger OpenAPI [documentation](https://app.swaggerhub.com/apis/useapi/Midjourney_API_v1/1.0) for generating server stubs and client SDKs.
## Usage
You will need to [set up and configure](https://useapi.net/docs/start-here) the Midjourey Discord account as well as subscribe to useapi.net service before you can start using API.
Please follow the [installation procedure](#installation--usage) and then run the following:
```python
import os
import time
from typing import Union
from pprint import pprint
import midjourney_api_client
from midjourney_api_client.api.default_api import DefaultApi
from midjourney_api_client.models.describe_response import DescribeResponse
from midjourney_api_client.models.imagine_response import ImagineResponse
from midjourney_api_client.models.job_response import JobResponse
from midjourney_api_client.models.jobs_blend_post_request import JobsBlendPostRequest
from midjourney_api_client.models.jobs_button_post_request import JobsButtonPostRequest
from midjourney_api_client.models.jobs_describe_post_request import JobsDescribePostRequest
from midjourney_api_client.models.jobs_imagine_post_request import JobsImaginePostRequest
from midjourney_api_client.rest import ApiException
configuration = midjourney_api_client.Configuration(
host = "https://api.useapi.net/v1"
)
# Extract setting from environment
# Suggested shell execution command:
# USEAPI_TOKEN="..." USEAPI_DISCORD="..." USEAPI_SERVER="..." USEAPI_CHANNEL="..." python3 ./test.py
api_token = os.environ["USEAPI_TOKEN"]
discord = os.environ["USEAPI_DISCORD"]
server = os.environ["USEAPI_SERVER"]
channel = os.environ["USEAPI_CHANNEL"]
# Optional callback url
# We recommend using sites like webhook.site to test callback URL functionality.
reply_url = os.environ.get("USEAPI_CALLBACK", "")
# Configure Bearer authorization: apiToken
configuration = midjourney_api_client.Configuration(
access_token = api_token
)
# This function is not not needed if job parameter reply_url (callback) specified
def wait_for_job_to_complete(api_instance: DefaultApi, job: Union[DescribeResponse, ImagineResponse, JobResponse]):
verb = job.verb.upper()
print(f"{verb} : {job.status}", job.jobid)
while job.code == 200 and job.status in ['started', 'progress']:
# Sleep for 20 seconds
time.sleep(20)
job = api_instance.jobs_get(job.jobid)
print(f"{verb} : {job.status}", {"jobid": job.jobid, "content": job.content})
if isinstance(job, JobResponse) and job.attachments:
print(f"{verb} url", job.attachments[0].url)
if isinstance(job, JobResponse) and job.buttons:
print(f"{verb} buttons", ", ".join(job.buttons))
return job
def main():
# Enter a context with an instance of the API client
with midjourney_api_client.ApiClient(configuration) as api_client:
# Create an instance of the API class
api_instance = midjourney_api_client.DefaultApi(api_client)
# Midjourney /describe
try:
jobs_describe_post_request = JobsDescribePostRequest(
describeUrl="https://mymodernmet.com/wp/wp-content/uploads/2017/12/free-images-national-gallery-of-art-9.jpg",
discord=discord,
server=server,
channel=channel,
reply_url=reply_url
)
describe_response = api_instance.jobs_describe_post(jobs_describe_post_request)
pprint(describe_response)
# Not needed if job parameter reply_url (callback) specified
describe_response = wait_for_job_to_complete(api_instance, describe_response)
except ApiException as e:
print("Exception when calling jobs_describe_post_request: %s\n" % e)
# Midjourney /blend
try:
jobs_blend_post_request = JobsBlendPostRequest(
blendUrls = [
"https://mymodernmet.com/wp/wp-content/uploads/2017/12/free-images-national-gallery-of-art-6.jpg",
"https://mymodernmet.com/wp/wp-content/uploads/2017/12/free-images-national-gallery-of-art-2.jpg"
],
discord=discord,
server=server,
channel=channel,
reply_url=reply_url
)
blend_response = api_instance.jobs_blend_post(jobs_blend_post_request)
pprint(blend_response)
# Not needed if job parameter reply_url (callback) specified
blend_response = wait_for_job_to_complete(api_instance, blend_response)
except ApiException as e:
print("Exception when calling jobs_blend_post: %s\n" % e)
# Midjourney /imagine
try:
jobs_imagine_post_request = JobsImaginePostRequest(
prompt="Steampunk cat cycling in San Francisco, vintage photo",
discord=discord,
server=server,
channel=channel,
reply_url=reply_url
)
imagine_response = api_instance.jobs_imagine_post(jobs_imagine_post_request)
pprint(imagine_response)
imagine_response = wait_for_job_to_complete(api_instance, imagine_response)
except ApiException as e:
print("Exception when calling jobs_imagine_post: %s\n" % e)
# Midjourney button commands
try:
jobs_button_post_request = JobsButtonPostRequest(
button="V1",
jobid=imagine_response.jobid,
reply_url=reply_url
)
button_response = api_instance.jobs_button_post(jobs_button_post_request)
pprint(button_response)
# Not needed if job parameter reply_url (callback) specified
button_response = wait_for_job_to_complete(api_instance, button_response)
except ApiException as e:
print("Exception when calling jobs_button_post: %s\n" % e)
main()
```
## Documentation for API Endpoints
All URIs are relative to *https://api.useapi.net/v1*
Method | HTTP request | Description
------------- | ------------- | -------------
[**jobs_imagine_post**](https://github.com/useapi/midjourney-api-client/blob/main/docs/DefaultApi.md#jobs_imagine_post) | **POST** /jobs/imagine | Midjourney /imagine command
[**jobs_blend_post**](https://github.com/useapi/midjourney-api-client/blob/main/docs/DefaultApi.md#jobs_blend_post) | **POST** /jobs/blend | Midjourney /blend command
[**jobs_describe_post**](https://github.com/useapi/midjourney-api-client/blob/main/docs/DefaultApi.md#jobs_describe_post) | **POST** /jobs/describe | Midjourney /describe command
[**jobs_button_post**](https://github.com/useapi/midjourney-api-client/blob/main/docs/DefaultApi.md#jobs_button_post) | **POST** /jobs/button | Midjourney upscale or create variations and enhance or modify buttons
[**jobs_get**](https://github.com/useapi/midjourney-api-client/blob/main/docs/DefaultApi.md#jobs_get) | **GET** /jobs/ | Retrieve job status and results
[**jobs_get_list**](https://github.com/useapi/midjourney-api-client/blob/main/docs/DefaultApi.md#jobs_get_list) | **GET** /jobs | Get list of currently executing jobs
[**jobs_cancel_get**](https://github.com/useapi/midjourney-api-client/blob/main/docs/DefaultApi.md#jobs_cancel_get) | **GET** /jobs/cancel/ | Cancel job
[**account_get**](https://github.com/useapi/midjourney-api-client/blob/main/docs/DefaultApi.md#account_get) | **GET** /account | Retrieve useapi.net account information
## Documentation For Models
- [AccountResponse](https://github.com/useapi/midjourney-api-client/blob/main/docs/AccountResponse.md)
- [BlendResponse](https://github.com/useapi/midjourney-api-client/blob/main/docs/BlendResponse.md)
- [ButtonResponse](https://github.com/useapi/midjourney-api-client/blob/main/docs/ButtonResponse.md)
- [ButtonResponseErrorUpscaled](https://github.com/useapi/midjourney-api-client/blob/main/docs/ButtonResponseErrorUpscaled.md)
- [DescribeResponse](https://github.com/useapi/midjourney-api-client/blob/main/docs/DescribeResponse.md)
- [ImagineResponse](https://github.com/useapi/midjourney-api-client/blob/main/docs/ImagineResponse.md)
- [ImagineResponseModerated](https://github.com/useapi/midjourney-api-client/blob/main/docs/ImagineResponseModerated.md)
- [JobCancelResponse](https://github.com/useapi/midjourney-api-client/blob/main/docs/JobCancelResponse.md)
- [JobResponse](https://github.com/useapi/midjourney-api-client/blob/main/docs/JobResponse.md)
- [JobResponseAttachmentsInner](https://github.com/useapi/midjourney-api-client/blob/main/docs/JobResponseAttachmentsInner.md)
- [JobResponseChildrenInner](https://github.com/useapi/midjourney-api-client/blob/main/docs/JobResponseChildrenInner.md)
- [JobResponseEmbedsInner](https://github.com/useapi/midjourney-api-client/blob/main/docs/JobResponseEmbedsInner.md)
- [JobResponseEmbedsInnerImage](https://github.com/useapi/midjourney-api-client/blob/main/docs/JobResponseEmbedsInnerImage.md)
- [JobsBlendPostRequest](https://github.com/useapi/midjourney-api-client/blob/main/docs/JobsBlendPostRequest.md)
- [JobsButtonPostRequest](https://github.com/useapi/midjourney-api-client/blob/main/docs/JobsButtonPostRequest.md)
- [JobsDescribePostRequest](https://github.com/useapi/midjourney-api-client/blob/main/docs/JobsDescribePostRequest.md)
- [JobsImaginePostRequest](https://github.com/useapi/midjourney-api-client/blob/main/docs/JobsImaginePostRequest.md)
- [ResponseError](https://github.com/useapi/midjourney-api-client/blob/main/docs/ResponseError.md)
- [ResponseMaxJobs](https://github.com/useapi/midjourney-api-client/blob/main/docs/ResponseMaxJobs.md)
## Documentation For Authorization
Authentication schemes defined for the API:
### apiToken
- **Type**: Bearer authentication
## Changelog
Version 1.0.1 | November 3, 2023
Added support for following [jobs/button](https://useapi.net/docs/api-v1/jobs-button) options:
- Upscale (2x)
- Upscale (4x)
- Redo Upscale (2x)
- Redo Upscale (4x)
## Support
Visit our
- [Discord Server](https://discord.gg/w28uK3cnmF) for any additional support and questions.
- [YouTube Channel](https://www.youtube.com/@midjourneyapi) for tutorials and demos.