# yaml-language-server: $schema=https://promptfoo.dev/config-schema.json
description: Test state-of-the-art image generation models on Replicate

prompts:
  - 'Generate an image: {{imagePrompt}}'

providers:
  # FLUX 1.1 Pro Ultra - Highest quality, up to 4MP images
  - id: replicate:image:black-forest-labs/flux-1.1-pro-ultra
    config:
      width: 1024
      height: 1024
      aspect_ratio: '1:1'
      output_format: 'webp'

  # FLUX 1.1 Pro Ultra - Raw mode for photorealistic results
  - id: replicate:image:black-forest-labs/flux-1.1-pro-ultra
    label: flux-1.1-pro-ultra-raw
    config:
      width: 1024
      height: 1024
      aspect_ratio: '1:1'
      output_format: 'webp'
      raw: true # Enable raw mode for more authentic photography

  # FLUX Dev - Open source version
  - id: replicate:image:black-forest-labs/flux-dev
    config:
      width: 1024
      height: 1024
      num_outputs: 1
      guidance: 3.5
      num_inference_steps: 28

  # FLUX Dev Realism - Specialized for photorealistic images
  - id: replicate:image:xlabs-ai/flux-dev-realism
    config:
      width: 1024
      height: 1024
      num_outputs: 1
      num_inference_steps: 28
      guidance_scale: 3.5

  # Stable Diffusion XL for comparison
  - id: replicate:image:stability-ai/sdxl:7762fd07cf82c948538e41f63f77d685e02b063e37e496e96eefd46c929f9bdc
    label: sdxl
    config:
      width: 1024
      height: 1024
      num_inference_steps: 25
      guidance_scale: 7.5

tests:
  # Photorealistic portrait
  - vars:
      imagePrompt: 'Professional headshot of a confident business woman, natural lighting, shallow depth of field, shot on Canon R5, 85mm lens'
    assert:
      - type: javascript
        value: |
          // Check that the output contains markdown image format
          return output && typeof output === 'string' && output.includes('![') && output.includes('](http');

  # Artistic landscape
  - vars:
      imagePrompt: 'Majestic mountain landscape at golden hour, dramatic clouds, painted in the style of Albert Bierstadt, oil on canvas, highly detailed'
    assert:
      - type: javascript
        value: |
          // Check that the output contains markdown image format
          return output && typeof output === 'string' && output.includes('![') && output.includes('](http');

  # Architectural visualization
  - vars:
      imagePrompt: 'Modern minimalist house with large glass windows, concrete and wood exterior, surrounded by lush greenery, architectural photography, dusk lighting'
    assert:
      - type: javascript
        value: |
          // Check that the output contains markdown image format
          return output && typeof output === 'string' && output.includes('![') && output.includes('](http');

  # Product photography
  - vars:
      imagePrompt: 'Luxury watch floating in air with dramatic lighting, black background, professional product photography, ultra sharp focus, commercial style'
    assert:
      - type: javascript
        value: |
          // Check that the output contains markdown image format
          return output && typeof output === 'string' && output.includes('![') && output.includes('](http');

  # Abstract art
  - vars:
      imagePrompt: 'Abstract expressionist painting with vibrant blues and oranges, dynamic brushstrokes, inspired by Jackson Pollock and Mark Rothko'
    assert:
      - type: javascript
        value: |
          // Check that the output contains markdown image format
          return output && typeof output === 'string' && output.includes('![') && output.includes('](http');

  # Science fiction scene
  - vars:
      imagePrompt: 'Futuristic cyberpunk cityscape at night, neon lights reflecting on wet streets, flying cars, holographic advertisements, blade runner aesthetic'
    assert:
      - type: javascript
        value: |
          // Check that the output contains markdown image format
          return output && typeof output === 'string' && output.includes('![') && output.includes('](http');

  # Food photography
  - vars:
      imagePrompt: 'Gourmet sushi platter, minimalist presentation, soft natural lighting, shallow depth of field, overhead shot, restaurant quality'
    assert:
      - type: javascript
        value: |
          // Check that the output contains markdown image format
          return output && typeof output === 'string' && output.includes('![') && output.includes('](http');

  # Wildlife photography
  - vars:
      imagePrompt: 'Majestic lion in African savanna during sunset, sharp focus on eyes, bokeh background, National Geographic style wildlife photography'
    assert:
      - type: javascript
        value: |
          // Check that the output contains markdown image format
          return output && typeof output === 'string' && output.includes('![') && output.includes('](http');
