Back to blog

Getting Started with DreamO: Practical Implementation Guide

BDR
ByteDance Developer Relations
•August 22, 2023•10 min read
Getting Started with DreamO: Practical Implementation Guide

This practical guide will walk you through implementing DreamO in your own projects, from initial setup to advanced configuration. Whether you're a developer looking to integrate DreamO into a product or a researcher exploring its capabilities, this guide will help you get started quickly and effectively.

System Requirements

Before installing DreamO, ensure your system meets these requirements:

  • Python: 3.8 or higher
  • CUDA: 11.7 or higher (for GPU acceleration)
  • RAM: 16GB minimum (32GB recommended)
  • GPU: NVIDIA GPU with 16GB+ VRAM (for full functionality)
  • Storage: 15GB for model weights and dependencies

While DreamO can run on CPUs, GPU acceleration is strongly recommended for reasonable performance.

Installation

From PyPI

pip install dreamo-ai

From Source

git clone https://github.com/bytedance/dreamo.git
cd dreamo
pip install -e .

Using Hugging Face

DreamO is also available through Hugging Face's model hub:

from huggingface_hub import snapshot_download

# Download model weights
snapshot_download("bytedance/dreamo", local_dir="./dreamo-model")

Basic Usage

Here's a simple example to get started with DreamO:

import dreamo

# Initialize the model
model = dreamo.DreamOModel.from_pretrained("bytedance/dreamo")

# Basic image generation with IP adaptation
output = model.generate(
    prompt="A character in a futuristic city",
    reference_images=["path/to/character.jpg"],
    customization_type="ip_adaptation"
)

# Save the result
output.save("customized_image.png")

Multi-Condition Customization

One of DreamO's key strengths is its ability to handle multiple customization types simultaneously:

# Multi-condition example: ID preservation + Virtual try-on
output = model.generate(
    prompt="A person wearing winter clothes in the snow",
    reference_images=["path/to/person.jpg", "path/to/outfit.jpg"],
    customization_type=["id_preservation", "virtual_tryon"],
    customization_weights=[0.8, 0.7]  # Control influence of each condition
)

Optimization Options

DreamO offers several optimization options to balance quality, speed, and resource utilization:

Memory Optimization

# For systems with limited VRAM
model = dreamo.DreamOModel.from_pretrained(
    "bytedance/dreamo",
    memory_efficient=True,
    precision="float16"  # Options: float32, float16, bfloat16
)

Speed Optimization

# Fast generation with fewer steps
output = model.generate(
    prompt="A character on a beach",
    reference_images=["path/to/character.jpg"],
    customization_type="ip_adaptation",
    num_inference_steps=12,  # Default is 30
    turbo_mode=True  # Enables faster sampling scheduler
)

Advanced Configuration

Fine-tuning Control Parameters

DreamO provides fine-grained control over the customization process:

output = model.generate(
    prompt="A character in anime style",
    reference_images=["path/to/character.jpg"],
    customization_type="ip_adaptation",
    style_strength=0.8,  # Control style influence (0-1)
    identity_preservation=0.9,  # Control identity preservation (0-1)
    guidance_scale=7.5,  # Control prompt adherence
    negative_prompt="blurry, low quality, distorted features"
)

Batch Processing

For generating multiple variations efficiently:

# Generate multiple variations
outputs = model.generate_batch(
    prompt="A character in different settings",
    reference_images=["path/to/character.jpg"],
    customization_type="ip_adaptation",
    batch_size=4,  # Number of variations
    batch_prompts=[  # Optional different prompts for each variation
        "A character in a forest",
        "A character in a desert",
        "A character in space",
        "A character underwater"
    ]
)

Integration Examples

Web Application

Here's a simple Flask application that demonstrates DreamO integration:

from flask import Flask, request, jsonify
import dreamo
import base64
from io import BytesIO
from PIL import Image

app = Flask(__name__)
model = dreamo.DreamOModel.from_pretrained("bytedance/dreamo")

@app.route('/generate', methods=['POST'])
def generate_image():
    data = request.json
    
    # Process reference image from base64
    ref_image_data = base64.b64decode(data['reference_image'])
    ref_image = Image.open(BytesIO(ref_image_data))
    
    # Generate customized image
    output = model.generate(
        prompt=data['prompt'],
        reference_images=[ref_image],
        customization_type=data['customization_type']
    )
    
    # Convert result to base64
    buffered = BytesIO()
    output.save(buffered, format="PNG")
    img_str = base64.b64encode(buffered.getvalue()).decode()
    
    return jsonify({'image': img_str})

if __name__ == '__main__':
    app.run(debug=True)

Best Practices

To achieve optimal results with DreamO:

  • Reference Images: Use high-quality, clear reference images with good lighting
  • Prompts: Be specific and detailed in your text prompts
  • Balance: Adjust customization weights to find the right balance between different conditions
  • Negative Prompts: Use negative prompts to avoid common artifacts
  • Iterations: For critical applications, generate multiple variations and select the best results

Troubleshooting

Common issues and their solutions:

  • Out of Memory Errors: Enable memory_efficient mode and reduce batch size
  • Poor Identity Preservation: Use clearer reference images and increase identity_preservation parameter
  • Slow Generation: Enable turbo_mode and reduce inference steps
  • Style Inconsistency: Adjust style_strength and use more specific prompts

DreamO's unified framework represents a significant advance in customized image generation. With this guide, you should now have a strong foundation for implementing DreamO in your own projects. For more detailed information, refer to the official documentation and GitHub repository.