MODEL IDreve:2@1
live

Reve 2.1

Reve
by Reve

Reve 2.1 is Reve's flagship image model for generation and editing, built around a layout-based intermediate representation that makes image structure directly addressable. It is designed for dense scenes, fine typography, and precise iterative edits at native 4K, with stronger prompt understanding, world knowledge, and foreign-text rendering than Reve 2.0.

Reve 2.1

Reference editing and remixing with Reve 2.1

How to use Reve 2.1 referenceImages with in-prompt frame tags to edit an existing asset or remix a subject into a new scene, from wall colour swaps to multi-product composites.

Introduction

Text-to-image is the right shape when the brief is a fresh idea. It's the wrong shape when the deliverable has to keep a specific asset intact: a product colour that already shipped, or a real-estate scene whose furniture cannot move. A prompt-only workflow starts from a description and drops whatever identity already existed.

Reve 2.1 handles that case with inputs.referenceImages and an in-prompt addressing convention. Up to eight references enter the request, each tagged inline with <frame>N</frame>, and the surrounding prose decides whether the reference is preserved (editing) or reimagined (remixing). Same request, same parameter set. The surrounding sentence is what changes.

Both outputs above came from the reference on the left and the same request schema. The edit kept the packshot geometry and lighting and only swapped the leather colour. The remix kept the bag's identity and rebuilt the shot around it on a Parisian street. Nothing else about the API call differed between the two runs.

Request shape

A Reve 2.1 request needs a positivePrompt. When the deliverable is reference-based, it also takes inputs.referenceImages, and the <frame>N</frame> tag inside the prompt binds a clause to one of those references.

import { createClient } from '@runware/sdk'

const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()

const [result] = await client.run({
  model: 'reve:2@1',
  positivePrompt: 'Edit <frame>0</frame>: repaint the oatmeal-white feature wall behind the sofa in a deep terracotta clay red. Keep the exact sofa, the exact walnut coffee table, the exact arched windows and daylight, and the exact pale oak flooring from the reference.',
  inputs: {
    referenceImages: [
      'https://im.runware.ai/image/os/a14d18/ws/2/ii/f4e3d2c1-b0a9-8765-4321-fedcba098765.jpg'
    ]
  },
  width: 4864,
  height: 3328
})
import asyncio
import os

from runware import Runware


async def main():
    async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
        results = await client.run({
            "model": "reve:2@1",
            "positivePrompt": "Edit <frame>0</frame>: repaint the oatmeal-white feature wall behind the sofa in a deep terracotta clay red. Keep the exact sofa, the exact walnut coffee table, the exact arched windows and daylight, and the exact pale oak flooring from the reference.",
            "inputs": {
                "referenceImages": [
                    "https://im.runware.ai/image/os/a14d18/ws/2/ii/f4e3d2c1-b0a9-8765-4321-fedcba098765.jpg"
                ]
            },
            "width": 4864,
            "height": 3328
        })


asyncio.run(main())
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "imageInference",
      "taskUUID": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "model": "reve:2@1",
      "positivePrompt": "Edit <frame>0</frame>: repaint the oatmeal-white feature wall behind the sofa in a deep terracotta clay red. Keep the exact sofa, the exact walnut coffee table, the exact arched windows and daylight, and the exact pale oak flooring from the reference.",
      "inputs": {
        "referenceImages": [
          "https://im.runware.ai/image/os/a14d18/ws/2/ii/f4e3d2c1-b0a9-8765-4321-fedcba098765.jpg"
        ]
      },
      "width": 4864,
      "height": 3328
    }
  ]'
runware run reve:2@1 \
  positivePrompt="Edit <frame>0</frame>: repaint the oatmeal-white feature wall behind the sofa in a deep terracotta clay red. Keep the exact sofa, the exact walnut coffee table, the exact arched windows and daylight, and the exact pale oak flooring from the reference." \
  inputs.referenceImages.0=https://im.runware.ai/image/os/a14d18/ws/2/ii/f4e3d2c1-b0a9-8765-4321-fedcba098765.jpg \
  width=4864 \
  height=3328
{
  "taskType": "imageInference",
  "taskUUID": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "model": "reve:2@1",
  "positivePrompt": "Edit <frame>0</frame>: repaint the oatmeal-white feature wall behind the sofa in a deep terracotta clay red. Keep the exact sofa, the exact walnut coffee table, the exact arched windows and daylight, and the exact pale oak flooring from the reference.",
  "inputs": {
    "referenceImages": [
      "https://im.runware.ai/image/os/a14d18/ws/2/ii/f4e3d2c1-b0a9-8765-4321-fedcba098765.jpg"
    ]
  },
  "width": 4864,
  "height": 3328
}
Response
[
  {
    "taskType": "imageInference",
    "taskUUID": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "imageUUID": "9c1b2d3a-4e5f-6789-abcd-ef0123456789",
    "imageURL": "https://im.runware.ai/image/os/a14d18/ws/2/ii/9c1b2d3a-4e5f-6789-abcd-ef0123456789.jpg"
  }
]

A few things worth knowing beyond the parameter list:

  • <frame>N</frame> inside positivePrompt addresses a reference by its 0-based index in inputs.referenceImages. That tag is what turns the prompt from prose into a directive.
  • inputs.referenceImages accepts up to eight references per request. Editing takes one, remixing takes one or a few, and multi-reference composition scales up to the cap.
  • width and height follow the same closed 17-preset list from the prompting guide. Omit them for reference work and Reve tends to inherit the source's aspect from the prompt.
  • settings.postprocessing runs after the model render for any Reve call, including reference edits and remixes. See the postprocessing guide for the request shape and the removeBackground step.

Full parameter constraints (character limits, reference size caps, allowed dimensions, postprocessing enums) live in the Reve 2.1 model reference.

The <frame>N</frame> addressing convention

The tag is the only way to point a prompt clause at a specific reference:

  • <frame>0</frame> is the first entry in inputs.referenceImages, <frame>1</frame> is the second, and so on. Zero-based, always.
  • Indexing has no cross-request memory. Each generation resolves indices against its own referenceImages array, so rearranging the array between calls shifts every tag with it.
  • The same tag can repeat inside one prompt. Naming a reference in two places is valid when the composition wants the subject twice.
  • The tag's position in the sentence does not decide intent. The verbs and prepositions around it do.

An edit clause keeps the reference intact and mutates one target property. A remix clause keeps the reference's subject and rebuilds the rest of the frame around it. Both open with the same <frame>0</frame> token, and only the language on either side changes.

Editing: preserve the source

An edit lands one target property and leaves the rest of the reference alone, provided the prompt names what to keep. Whether the target is a wall paint colour or a caption at the base of a poster, the request shape is the same. The workflow shows up whenever a signed-off asset needs one controlled change: one asset in, the same asset out with only the named change applied.

The clause structure that works reads: Edit <frame>N</frame>: change X to Y. Keep the exact [A], [B], [C], and [D] from the reference. The opening verb frames intent. The closing pin clause is what stops the model from repainting the whole room when it was only asked to repaint one wall.

A modern living room with a light-grey linen sofa, walnut coffee table, tall arched windows on the right, oak flooring, and a large oatmeal-white unpainted feature wall behind the sofa

A modern living room interior real-estate photograph at mid-morning. A long low light-grey linen sofa with two soft cream cushions sits centred in the frame. A rounded walnut wood coffee table in front of the sofa carries two plain white ceramic cups and a small stack of hardcover design books. Tall arched windows on the right side let in soft natural daylight. A large unpainted oatmeal-white plaster feature wall behind the sofa. A slim brushed brass floor lamp in the left corner and a potted olive tree beside the windows on the right.

ReferenceEdit
Feature wall repainted terracotta, every other element held from the reference

The output kept the sofa, the coffee table, the ceramic cups, the arched windows and their daylight, the oak flooring, the floor lamp, and the potted olive tree identical to the reference. Only the feature wall picked up the terracotta clay red the prompt named, and the ambient bounce across the room warmed slightly to match. Every held element was named explicitly in the pin clause.

For edits, the pin clause needs to cover every element that could plausibly shift under the change, not only the ones adjacent to the target. "Keep the exact sofa" is enough for a sofa the reference clearly shows, but if two objects in the reference could reasonably be affected by a paint change (a wall and a matching curtain, say), name both. Unmentioned elements are where drift creeps in.

Edits chain by re-using the output as the next reference. Repaint the wall, then feed that result back as <frame>0</frame> for the next call to swap the sofa on it. Every stage runs at native 4K, so iterative edits keep the same pixel budget from step to step. Each step is a separate $0.20 generation, so plan the chain rather than exploring one target at a time.

Remixing: keep the subject

Where an edit preserves the whole reference, a remix preserves only the subject. The subject identity from <frame>N</frame> carries through, but the composition and everything around the subject are regenerated from the prompt. The workflow shows up in lookbook expansions where a product from a plain packshot lands in a lifestyle shot, or in any campaign brief where the SKU is fixed but the scene is not.

The clause structure reads: The [subject description] from <frame>N</frame> [placed in some new scene, lit some new way]. There is no Keep the exact … list at the end. The reference's role is to lock the subject's geometry and materials. The rest of the frame is regenerated from the prose.

The wristwatch kept the exact case, the exact dial, and the exact strap it had in the reference. Everything around it was regenerated: a cream cashmere sleeve, a warm ceramic coffee cup with a fresh flat white, a small folded linen napkin under a butter croissant, and a soft blurred Parisian street background. The reference held the subject. The prose held the scene.

The remix pattern behaves better when the subject description matches the reference's own vocabulary. "The classic minimalist dress wristwatch from <frame>0</frame>" leans on the reference for identity while giving the model the terms it needs to place the object in the new scene. A prompt that just says "the watch from <frame>0</frame>" works too, but a description helps when the remix scene involves motion or occlusion where the subject might otherwise be pushed off screen.

Multi-reference composition

Everything above used a single reference. Reve 2.1 accepts up to eight. When several are passed, each <frame>N</frame> tag in the prompt addresses one of them by index, and the model composes their subjects into a single coherent frame.

The four packshots below were shot separately on plain off-white backdrops. One Reve call composes them onto a walnut kitchen island in soft morning window light, addressing each product by its own <frame>N</frame> tag.

Each product carries its own identity across from its reference: the warm cream matte glaze on the kettle from <frame>0</frame>, the terracotta glaze on the mug from <frame>1</frame>, the amber honey in the jar from <frame>2</frame>, and the visible linen weave on the towel from <frame>3</frame>. The prompt named the composition and the lighting environment. The references did the identity work.

The composition prose works better when it walks the frame one reference at a time. The prompt above spells out four placement beats, one per <frame>N</frame> tag, and the model reads each beat as a placement directive rather than trying to infer which reference goes where from a general scene description.

Tips

  1. Address by index, not by description. The <frame>N</frame> tag ties one reference to one clause in the prompt. Naming a reference by its content ("the bag from the reference") gets ambiguous once three references share the array, while <frame>0</frame> never does.

  2. The verb decides intent. Openings like Edit <frame>0</frame>: bias the model toward preservation, while The [subject] from <frame>0</frame> in [new scene] biases it toward remix. Pick the opening verb before writing the rest of the sentence.

  3. Pin every element that must not change. For edits, close the sentence with Keep the exact [A], [B], [C], and [D] from the reference. Unmentioned elements are where drift creeps in, and the pin clause reads verbose on purpose.

  4. Plan for one successful call. Reve bills at $0.20 per 4K image, so iteration cost is real. Draft the prompt so a single pass does the job: name the change and the pins, then confirm the reference actually shows the identity you're asking the model to hold.

  5. Choose the 4K aspect deliberately. When width and height are set, both must be from the same native 4K preset pair. Omit both dimensions and Reve reads the aspect from the prompt, which often matches an edit's source shape without any extra config.

  6. Match reference treatment across a set. For multi-reference composition, feed the model reference photos with similar visual treatment (all clean packshots, or all lifestyle stills). Mixing a packshot with a busy environmental shot pulls at the identity carry-over on both.

  7. Repeat a tag when the subject appears twice. <frame>0</frame> can appear more than once in a single prompt. A composition that reads "<frame>0</frame> shown open on the left and <frame>0</frame> shown closed on the right" is valid and produces both states of the same subject in one frame.

  8. Use removeBackground for cutout deliverables. For downstream compositing where a hero product will land on a designed page, let the postprocessing step do the alpha cut instead of masking manually. Skip it when the shot ships as a complete image.