Pythonic, CLItastic, MCPerific image generation with the Adobe Firefly API
- Authenticate with Adobe Firefly using client ID and secret
- Automatically handles access token retrieval and refresh
- Generate images from text prompts
- Simple, extensible interface
- CLI for generating images from the command line
- MCP server for use in editors like Cursor
- Python 3.10+
requestslibrary
from firefly import FireflyClient
client = FireflyClient(
client_id="your-firefly-client-id",
client_secret="your-firefly-client-secret"
)
response = client.generate_image(prompt="a realistic illustration of a cat coding")
print("Generated image URL:", response.outputs[0].image.url)
print("Seed:", response.outputs[0].seed)
print("Size:", response.size)
print("Content class:", response.contentClass)-
FireflyClient(client_id, client_secret, timeout=30)- Main entry point. Handles authentication and requests.
-
generate_image(prompt: str, **kwargs) -> FireflyImageResponse- Generate an image from a text prompt. Returns a response object with attributes matching the API response (including outputs, size, contentClass, etc).
- Additional keyword arguments are passed as parameters to the API.
FireflyAuthError: Raised for authentication/token errorsFireflyAPIError: Raised for general API errors or unexpected responses
The firefly CLI allows you to generate images from the command line using the Adobe Firefly API.
export FIREFLY_CLIENT_ID="abc123"
export FIREFLY_CLIENT_SECRET="xyz456"firefly image generate \
--prompt="a realistic illustration of a cat coding" \
--show-images--client-id TEXTYour Adobe Firefly client ID [env var: FIREFLY_CLIENT_ID] [default: None]--client-secret TEXTYour Adobe Firefly client secret [env var: FIREFLY_CLIENT_SECRET] [default: None]--prompt TEXT* Text prompt for image generation [required]--num-variations INTEGERNumber of images to generate (numVariations) [default: None]--style TEXTStyle object as JSON string (presets, imageReference, strength, etc.) [default: None]--structure TEXTStructure object as JSON string (strength, imageReference, etc.) [default: None]--prompt-biasing-locale-code TEXTLocale code for prompt biasing (promptBiasingLocaleCode), e.g., en-US, en-IN, zh-CN [default: None]--negative-prompt TEXTNegative prompt to avoid certain content [default: None]--seed INTEGERSeed for deterministic output [default: None]--aspect-ratio TEXTAspect ratio, e.g. '1:1', '16:9' [default: None]--output-format TEXTOutput format, e.g. 'jpeg', 'png' [default: None]--content-class TEXTContent class: 'photo' or 'art' [default: None]--download/--no-downloadDownload the generated image to a file (filename is taken from the image URL) [default: no-download]--show-images/--no-show-imagesDisplay the image in the terminal after download. [default: no-show-images]--use-mocks/--no-use-mocksMock API responses for testing without a valid client secret. [default: no-use-mocks]--format TEXTOutput format: 'text' (default) or 'json' for pretty-printed JSON response. [default: text]--verbose/--no-verbosePrint status messages to stderr. [default: no-verbose]--helpShow this message and exit
firefly image generate \
--prompt="a futuristic city skyline at sunset" \
--show-imagesThe CLI will print the generated image URL.
You can use this package as an MCP server, for example in editors like Cursor that support MCP servers.
To add the Adobe Firefly MCP server, add the following to the mcpServers or such section of an mcp.json file for your tool of choice:
"adobe_firefly": {
"type": "stdio",
"env": {
"FIREFLY_CLIENT_ID": "13cc...",
"FIREFLY_CLIENT_SECRET": "p8e-CB..."
},
"command": "uvx",
"args": [
"--from",
"git+https://github.com/msabramo/python-firefly[mcp-server]",
"mcp-server"
]
},Replace the FIREFLY_CLIENT_ID and FIREFLY_CLIENT_SECRET values with your own credentials.
This will allow your editor to communicate with the Adobe Firefly API via the MCP server provided by this package.


