https://github.com/dedinc/bingart
bingart is an unofficial API wrapper for Bing Image & Video Creator. It allows you to programmatically generate AI-powered images using Bing's image creation tool.
https://github.com/dedinc/bingart
ai-art ai-art-generator ai-generated-images ai-generation ai-video-generator bing-api bingart dall-e dall-e-3 dalle-3 dalle3 video-generation
Last synced: 4 months ago
JSON representation
bingart is an unofficial API wrapper for Bing Image & Video Creator. It allows you to programmatically generate AI-powered images using Bing's image creation tool.
- Host: GitHub
- URL: https://github.com/dedinc/bingart
- Owner: DedInc
- License: mit
- Created: 2023-12-03T03:40:02.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2026-01-22T06:27:54.000Z (4 months ago)
- Last Synced: 2026-01-22T21:16:31.564Z (4 months ago)
- Topics: ai-art, ai-art-generator, ai-generated-images, ai-generation, ai-video-generator, bing-api, bingart, dall-e, dall-e-3, dalle-3, dalle3, video-generation
- Language: Python
- Homepage: https://pypi.org/project/bingart/
- Size: 18.6 KB
- Stars: 49
- Watchers: 1
- Forks: 11
- Open Issues: 0
-
Metadata Files:
- Readme: README.MD
- License: LICENSE
Awesome Lists containing this project
README
# bingart
bingart is an unofficial async API wrapper for Bing Image & Video Creator. It allows you to programmatically generate AI-powered images and videos using Bing's creation tools with support for multiple models and aspect ratios.
> **Warning:** The `_U` auth cookie should be changed every 2-4 weeks for proper functionality.
## Description
This module uses web scraping and engineering techniques to interface with Bing's internal image and video creation APIs. It is not an official API client.
### Key Features
- **Fully asynchronous** — built on `curl_cffi` `AsyncSession` and `asyncio`
- **Generate images** with multiple AI models (DALL-E, GPT-4O, MAI1)
- **Generate videos** from text prompts
- **Custom aspect ratios** (Square, Landscape, Portrait)
- **Get image URLs** — up to 4 generated images per request
- **Flexible authentication** via cookies or auto-fetched from browsers
- **Enhanced prompts** — get AI-improved versions of your prompts
- **Async context manager** support (`async with`)
- **Custom exceptions** for common error handling
## Installation
```bash
pip install bingart
```
## Usage
### Basic Setup
Import and instantiate the `BingArt` class with a valid `_U` cookie value:
```python
import asyncio
from bingart import BingArt
async def main():
bing_art = BingArt(auth_cookie_U='your_cookie_value_here')
try:
result = await bing_art.generate('sunset over mountains')
print(result)
finally:
await bing_art.close()
asyncio.run(main())
```
### Using Async Context Manager (Recommended)
```python
import asyncio
from bingart import BingArt
async def main():
async with BingArt(auth_cookie_U='your_cookie_value_here') as bing_art:
result = await bing_art.generate('sunset over mountains')
print(result)
asyncio.run(main())
```
### Auto Cookie Detection
Let bingart automatically fetch cookies from your installed browsers:
```python
from bingart import BingArt
# Auto-fetch cookies from Chrome, Edge, Firefox, Brave, Opera, Vivaldi, or Chromium
bing_art = BingArt(auto=True)
```
Supported browsers for auto-detection:
- Chrome
- Edge
- Firefox
- Brave
- Opera
- Vivaldi
- Chromium
### Advanced Usage with Models and Aspect Ratios
```python
import asyncio
from bingart import BingArt, Model, Aspect
async def main():
async with BingArt(auth_cookie_U='your_cookie_value') as bing_art:
# Generate with GPT-4O model in portrait aspect
result = await bing_art.generate(
'a futuristic cityscape',
model=Model.GPT4O,
aspect=Aspect.PORTRAIT
)
print(result)
# Generate with MAI1 model in landscape aspect
result = await bing_art.generate(
'serene mountain landscape',
model=Model.MAI1,
aspect=Aspect.LANDSCAPE
)
print(result)
# Generate with DALL-E (default) in square aspect
result = await bing_art.generate(
'abstract art composition',
model=Model.DALLE,
aspect=Aspect.SQUARE
)
print(result)
asyncio.run(main())
```
### Available Models
```python
from bingart import Model
Model.DALLE # DALL-E 3 (default)
Model.GPT4O # GPT-4O image generation
Model.MAI1 # MAI1 model
```
### Available Aspect Ratios
```python
from bingart import Aspect
Aspect.SQUARE # 1:1 (default)
Aspect.LANDSCAPE # 7:4 (wide)
Aspect.PORTRAIT # 4:7 (tall)
```
### Video Generation
```python
import asyncio
from bingart import BingArt
async def main():
async with BingArt(auth_cookie_U='your_cookie_value') as bing_art:
result = await bing_art.generate(
'a dancing robot in a futuristic city',
content_type='video'
)
print(result)
asyncio.run(main())
```
## Output Format
### Image Generation Response
```json
{
"images": [
{"url": "https://th.bing.com/th/id/OIG.xxx?pid=ImgGn"},
{"url": "https://th.bing.com/th/id/OIG.yyy?pid=ImgGn"},
{"url": "https://th.bing.com/th/id/OIG.zzz?pid=ImgGn"},
{"url": "https://th.bing.com/th/id/OIG.www?pid=ImgGn"}
],
"prompt": "enhanced version of your original prompt",
"model": "GPT4O",
"aspect": "PORTRAIT"
}
```
### Video Generation Response
```json
{
"video": {
"video_url": "https://..."
},
"prompt": "your original prompt"
}
```
## Exception Handling
```python
import asyncio
from bingart import BingArt, AuthCookieError, PromptRejectedError
async def main():
try:
async with BingArt(auth_cookie_U='your_cookie_value') as bing_art:
result = await bing_art.generate('your prompt here')
print(result)
except AuthCookieError:
print("Invalid authentication cookie or session expired")
except PromptRejectedError:
print("Prompt was rejected due to content policy violation")
asyncio.run(main())
```
### Available Exceptions
- `AuthCookieError`: Raised when authentication cookie is invalid or expired
- `PromptRejectedError`: Raised when prompt violates content policy or is rejected as unethical
## Getting Your Cookie
1. Open your browser and go to [Bing Image Creator](https://www.bing.com/images/create)
2. Log in with your Microsoft account
3. Open Developer Tools (F12)
4. Go to Application/Storage → Cookies → `https://www.bing.com`
5. Find the `_U` cookie and copy its value
## Complete Example
```python
import asyncio
from bingart import BingArt, Model, Aspect, AuthCookieError, PromptRejectedError
async def main():
try:
async with BingArt(auto=True) as bing_art:
# Generate multiple images with different settings
prompts = [
{
"query": "cyberpunk cityscape at night",
"model": Model.GPT4O,
"aspect": Aspect.LANDSCAPE
},
{
"query": "portrait of a mystical wizard",
"model": Model.DALLE,
"aspect": Aspect.PORTRAIT
},
{
"query": "abstract geometric patterns",
"model": Model.MAI1,
"aspect": Aspect.SQUARE
}
]
for config in prompts:
print(f"\nGenerating: {config['query']}")
result = await bing_art.generate(
config['query'],
model=config['model'],
aspect=config['aspect']
)
print(f"Model: {result['model']}")
print(f"Aspect: {result['aspect']}")
print(f"Enhanced prompt: {result['prompt']}")
print(f"Generated {len(result['images'])} images")
for idx, img in enumerate(result['images'], 1):
print(f" Image {idx}: {img['url']}")
# Generate a video
print("\nGenerating video...")
video_result = await bing_art.generate(
'a cat playing piano',
content_type='video'
)
print(f"Video URL: {video_result['video']['video_url']}")
except AuthCookieError as e:
print(f"Authentication error: {e}")
except PromptRejectedError as e:
print(f"Prompt rejected: {e}")
asyncio.run(main())
```
## Requirements
- Python >= 3.6
- curl_cffi
- rookiepy
## Contributing
Pull requests are welcome! Please open an issue to discuss major changes before submitting.
## License
MIT License - see LICENSE file for details
## Disclaimer
This is an unofficial API wrapper and is not affiliated with Microsoft or Bing. Use responsibly and in accordance with Bing's terms of service.