# Reference Strength Slider for I2I Models: Controlling Image Fidelity in Open-Generative-AI

> Control image fidelity in I2I models with the reference strength slider in Open Generative AI. Adjust visual similarity from prompt-only to near-identical preservation.

- Repository: [Anil Chandra Naidu Matcha/Open-Generative-AI](https://github.com/Anil-matcha/Open-Generative-AI)
- Tags: how-to-guide
- Published: 2026-04-24

---

**The reference strength slider is an advanced control that lets users set how much visual fidelity the I2I model preserves from the reference image, ranging from 0% (prompt-only generation) to 100% (near-identical preservation).**

The Open-Generative-AI repository by Anil-matcha provides a React-based **ImageStudio** component that exposes this control exclusively when image-to-image (I2I) models are selected. This parameter bridges user intent and backend diffusion samplers by quantifying exactly how much of the original image's composition, color palette, and fine-grained details should survive the generation process.

## What Is the Reference Strength Slider?

The **reference strength slider** is a UI control that appears in the *Advanced* panel of the ImageStudio interface whenever an I2I-compatible model is active. It produces an integer value between **0** and **100** that maps directly to the `referenceStrength` variable in the application state.

- **0%** instructs the model to ignore the reference image entirely, behaving like a pure text-to-image generation.
- **100%** preserves the reference image almost unchanged, allowing only minimal deviation from the original composition.
- **Default value** is set to **50**, providing a balanced blend between prompt adherence and structural preservation.

This value is ultimately converted to a decimal between 0.0 and 1.0 and passed to the backend as the **strength** parameter in the inference request payload.

## How the Reference Strength Slider Works in ImageStudio

### UI Implementation in ImageStudio.js

The slider element is defined in [`src/components/ImageStudio.js`](https://github.com/Anil-matcha/Open-Generative-AI/blob/main/src/components/ImageStudio.js) within the Advanced panel configuration (lines 51-58). The HTML structure binds a range input to a percentage label:

```javascript
// Located in ImageStudio.js lines 51-58
<div class="flex flex-col gap-2">
  <div class="flex items-center justify-between">
    <label class="text-xs font-bold text-secondary uppercase tracking-wider">Reference Strength</label>
    <span id="reference-strength-value" class="text-xs font-bold text-primary">50%</span>
  </div>
  <input type="range"
         id="reference-strength-slider"
         min="0" max="100" step="5" value="50"
         class="w-full h-2 bg-white/10 rounded-lg appearance-none cursor-pointer accent-primary">
  <p class="text-xs text-muted">How much to preserve the reference image characteristics</p>
</div>

```

The component queries these DOM elements and attaches an `oninput` event handler (lines 662-668) to synchronize the slider's position with both the internal `referenceStrength` variable and the visible percentage label:

```javascript
// Located in ImageStudio.js lines 662-668
const refStrengthSlider = advancedPanel.querySelector('#reference-strength-slider');
const refStrengthValue = advancedPanel.querySelector('#reference-strength-value');

if (refStrengthSlider && refStrengthValue) {
  refStrengthSlider.oninput = (e) => {
    referenceStrength = parseInt(e.target.value);   // store numeric value
    refStrengthValue.textContent = referenceStrength + '%'; // update label
  };
}

```

### Parameter Semantics and Variable Handling

The `referenceStrength` variable defaults to **50** and persists in the component's state until a generation request is triggered. When the user presses **Generate**, the frontend divides this value by 100 to convert it to the decimal range expected by diffusion backends:

```javascript
// Request payload construction (simplified)
const payload = {
  model: selectedModelId,
  prompt: userPrompt,
  seed: seed,
  reference_image: encodedReference,   // base64 or blob
  strength: referenceStrength / 100   // convert to 0-1 for the backend
};
await fetch('/api/generate', { method: 'POST', body: JSON.stringify(payload) });

```

## Backend Integration and Inference Impact

According to the Open-Generative-AI source code, the `strength` parameter received by the server-side endpoint (`app/api/agents/[[...path]]/route.js`) determines the interpolation weight between two latent representations:

1. The latent encoding of the supplied **reference image**.
2. The latent generated from the **text prompt** and random noise.

Diffusion-based I2I backends interpret this weight as follows:

- **High strength values** (closer to 1.0) force the sampler to stay near the reference image's latent space, preserving structural elements, colors, and textures.
- **Low strength values** (closer to 0.0) allow the denoising process to drift further from the reference, giving the prompt dominion over the final composition.

The server forwards this parameter to the model inference service, where it modulates how many denoising steps start from the reference latent versus pure noise.

## Practical Usage Workflow

To effectively use the reference strength slider in the Open-Generative-AI studio:

1. **Load a reference image** into the studio's dropzone or file picker.
2. **Select an I2I-compatible model** (e.g., "Stable Diffusion Img2Img") from the model selector—this triggers the Advanced panel to reveal the slider.
3. **Adjust the Reference Strength slider** to the desired preservation level (0-100%).
4. **Enter your prompt** and press **Generate**—the frontend sends `strength: <value/100>` alongside the encoded reference image.
5. **Review the output**, which blends the reference latent with the noise-guided latent according to your specified strength.

## Code Implementation Details

Thethree critical code locations that implement this functionality are:

- **[`src/components/ImageStudio.js`](https://github.com/Anil-matcha/Open-Generative-AI/blob/main/src/components/ImageStudio.js)**: Defines the slider UI (`#reference-strength-slider`) and the `oninput` handler that updates the `referenceStrength` variable.
- **[`src/lib/models.js`](https://github.com/Anil-matcha/Open-Generative-AI/blob/main/src/lib/models.js)** (or equivalent inference client): Consumes the strength field when assembling the generation request.
- **`app/api/agents/[[...path]]/route.js`**: Receives the payload and forwards the strength parameter to the backend diffusion sampler.

## Summary

- The **reference strength slider** controls fidelity to a reference image during I2I generation in Open-Generative-AI.
- It produces values from **0-100%**, stored in the `referenceStrength` variable, and converts to **0.0-1.0** for the backend.
- The UI lives in [`ImageStudio.js`](https://github.com/Anil-matcha/Open-Generative-AI/blob/main/ImageStudio.js) lines 51-58 (definition) and 662-668 (event handling).
- Higher values preserve more of the original image's composition and style; lower values prioritize the text prompt.
- The parameter is sent to `app/api/agents/[[...path]]/route.js` as `strength`, where it modulates latent space interpolation.

## Frequently Asked Questions

### What happens when reference strength is set to 0%?

Setting the slider to **0%** causes the model to ignore the reference image entirely. The generation behaves like a pure text-to-image process, using only the prompt and random seed to create the output, effectively discarding the visual characteristics of the uploaded reference.

### Why does the slider only appear for certain models?

The reference strength slider is **conditional** on selecting an I2I (image-to-image) model because text-to-image (T2I) architectures lack the machinery to blend reference latents with generated latents. The component logic in [`ImageStudio.js`](https://github.com/Anil-matcha/Open-Generative-AI/blob/main/ImageStudio.js) dynamically renders the slider only when the selected model's configuration indicates I2I compatibility.

### How does the backend interpret the strength parameter?

The backend interprets **strength** as an interpolation coefficient in the diffusion sampler's latent space. According to the Open-Generative-AI source code, the value (ranging 0.0 to 1.0) determines how many denoising steps originate from the reference image's encoding versus random noise, directly controlling the trade-off between prompt adherence and reference preservation.

### Where is the reference strength value stored before sending to the API?

The value is stored in the JavaScript variable **`referenceStrength`** (defaulting to 50) within the ImageStudio component scope. This variable is updated in real-time by the `oninput` handler attached to `#reference-strength-slider`, and is only serialized into the JSON payload (as `strength: referenceStrength / 100`) when the user initiates the generation request.