Skip to main content

Python client for Infinity Media Server - GPU-accelerated image, video, and audio generation

Project description

infinity_ml

Python client for Infinity Media Server - GPU-accelerated image, video, and audio generation.

Designed to mirror the fal_client API for familiarity.

Installation

pip install infinity_ml

Quick Start

Module-level Functions (fal_client style)

from infinity_ml import run, submit, subscribe, status

# Simple blocking call
result = run("black-forest-labs/flux-dev", {"prompt": "A cat astronaut in space"})
print(result["images"][0]["download_url"])

# Submit and poll manually
handle = submit("black-forest-labs/flux-dev", {"prompt": "A cat"})
print(f"Submitted: {handle.request_id}")

# Wait with progress updates
for event in handle.iter_events():
    print(f"Status: {event}")
    
result = handle.get()

# Subscribe with callbacks
def on_update(status):
    print(f"Progress: {status}")

result = subscribe(
    "black-forest-labs/flux-dev",
    {"prompt": "A beautiful sunset"},
    on_queue_update=on_update,
)

Client Class Usage

from infinity_ml import SyncClient, AsyncClient

# Sync client
client = SyncClient()

# Run and wait
result = client.run("black-forest-labs/flux-dev", {"prompt": "A cat"})

# Convenience methods with typed results
image_result = client.image("A futuristic city")
print(image_result.images[0].download_url)

video_result = client.video("Ocean waves at sunset", num_frames=16)
print(video_result.video.download_url)

audio_result = client.audio("Hello from Infinity!")
print(audio_result.audio.download_url)

# Download file
client.download(audio_result.audio.download_url, "output.wav")

Async Usage

import asyncio
from infinity_ml import AsyncClient, run_async, submit_async

async def main():
    # Module-level async functions
    result = await run_async("black-forest-labs/flux-dev", {"prompt": "A cat"})
    
    # Or use AsyncClient
    async with AsyncClient() as client:
        handle = await client.submit("black-forest-labs/flux-dev", {"prompt": "A cat"})
        result = await handle.get()

asyncio.run(main())

API Reference

Module-level Functions

Function Description
run(app, args) Submit and wait for result (blocking)
submit(app, args) Submit job, returns SyncRequestHandle
subscribe(app, args, ...) Submit with status callbacks
status(app, request_id) Get job status
result(app, request_id) Get job result
cancel(app, request_id) Cancel job (if supported)

Async versions: run_async, submit_async, subscribe_async, status_async, result_async, cancel_async

SyncClient / AsyncClient

client = SyncClient(
    base_url="http://192.222.55.191:8000",  # Default demo server
    default_timeout=300.0,                   # Max wait time (seconds)
)

Methods

Method Description
run(app, args) Submit and wait for result
submit(app, args) Submit job, returns handle
subscribe(app, args, ...) Submit with callbacks
status(app, request_id) Get job status
result(app, request_id) Get job result
get_handle(app, request_id) Get handle for existing job
health() Server health check
ready() Server readiness & GPU status
models() List available models

Convenience Methods (typed results)

Method Description
image(prompt, ...) Generate image, returns ImageResult
video(prompt, ...) Generate video, returns VideoResult
audio(text, ...) Generate audio, returns AudioResult
download(url, path) Download generated file

Request Handles

Returned by submit(), provides methods to track job progress:

handle = submit("black-forest-labs/flux-dev", {"prompt": "A cat"})

handle.request_id           # Job ID string
handle.status()             # Returns Status (Queued, InProgress, Completed, Failed)
handle.get()                # Wait and return result (blocking)
handle.iter_events()        # Iterate status updates until complete
handle.cancel()             # Cancel job (if supported)

Status Types

from infinity_ml import Queued, InProgress, Completed, Failed

status = handle.status()

if isinstance(status, Queued):
    print(f"Queue position: {status.position}")
elif isinstance(status, InProgress):
    print("Processing...")
elif isinstance(status, Completed):
    print("Done!")
elif isinstance(status, Failed):
    print(f"Error: {status.error}")

Available Models

Model ID Type Example
black-forest-labs/flux-dev Image {"prompt": "A cat"}
wan-ai/wan2.2-t2v Video (2.2) {"prompt": "Waves", "guidance_scale": 4.0, "guidance_scale_2": 3.0}
wan-ai/wan2.1-1.3b Video (2.1) {"prompt": "Waves", "num_frames": 33}
wan-ai/wan2.1-14b Video (2.1) {"prompt": "Waves", "num_frames": 33}
boson-ai/higgs-audio-v2 Audio {"text": "Hello!"}

See client_model_docs/ for detailed parameter documentation.

Caveats (Demo Version)

⚠️ This is a demo/development version:

  • Hardcoded server IP: The default URL (http://192.222.55.191:8000) points to a Lambda Labs development instance. This will be replaced with a proper domain in production.
  • No authentication: The demo server has no API key requirement.
  • Ephemeral storage: Generated files are stored temporarily and may be cleaned up.

For production use, specify your own server URL:

from infinity_ml import SyncClient

client = SyncClient("https://your-production-server.com")

Or set the INFINITY_SERVER_URL environment variable:

export INFINITY_SERVER_URL=https://your-production-server.com

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

infinity_ml-0.1.0.tar.gz (15.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

infinity_ml-0.1.0-py3-none-any.whl (11.9 kB view details)

Uploaded Python 3

File details

Details for the file infinity_ml-0.1.0.tar.gz.

File metadata

  • Download URL: infinity_ml-0.1.0.tar.gz
  • Upload date:
  • Size: 15.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for infinity_ml-0.1.0.tar.gz
Algorithm Hash digest
SHA256 50ec697cde518992cd047b8b8e6d8c5f263858d47fa9853ec1e33814dc84a56e
MD5 cbb709f58e62f4cf9f75ca56f5210767
BLAKE2b-256 c8ccf9a7034642102f7293bc9fa9f922924a4a060b1ab63ba5b2186909f45e09

See more details on using hashes here.

Provenance

The following attestation bundles were made for infinity_ml-0.1.0.tar.gz:

Publisher: client-publish.yml on Infinity-AI-Institute/video-image-audio-serving

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file infinity_ml-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: infinity_ml-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 11.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for infinity_ml-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 efb0dd49a78ee6ef0f75b2d86af18a6e5409104d59444d300df17509473cc848
MD5 1e9c3d857e44e125d703a5cb4cb90fb7
BLAKE2b-256 d1e9a5abc6bd3611dbc3afeff54f7abb0aeb4389b0697506beaa69c8fbd0089b

See more details on using hashes here.

Provenance

The following attestation bundles were made for infinity_ml-0.1.0-py3-none-any.whl:

Publisher: client-publish.yml on Infinity-AI-Institute/video-image-audio-serving

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page