---
title: Quality and thinking level — GPT-Image-2.6 Flare | Runware Docs
url: https://runware.ai/docs/models/openai-gpt-image-2-6-flare/guides/quality-and-thinking-level
description: "How to set the two effort controls on GPT-Image-2.6 Flare: settings.thinkingLevel to plan a layout, settings.quality to render it, and when to lower each one."
---
### [Introduction](https://runware.ai/docs/models/openai-gpt-image-2-6-flare/guides/quality-and-thinking-level#introduction)

Flare has two effort controls, and they work on different stages of the same image. `settings.thinkingLevel` sets **how much the model plans the composition** before it renders anything: where each element goes and how the parts relate to each other. `settings.quality` sets **how much rendering effort** goes into drawing that plan.

![A product comparison chart on white with photos of three air purifiers heading three columns labeled AURA 200, AURA 400 and AURA 600, above a five-row table of room size, filter, noise, app control and price, the middle column outlined in teal under a BEST SELLER tab](https://runware.ai/docs/assets/output-hero.PlBbuSv5_mYgqv.jpg)

*thinkingLevel high, quality high*

> **Prompt**: A product comparison chart for an online home appliance store, landscape layout on a clean white background. Three columns, each topped by a photoreal product photo of an air purifier on a soft gray studio backdrop: a compact white cylinder labeled "AURA 200", a mid-size white cylinder with a pale oak base labeled "AURA 400", and a tall charcoal tower labeled "AURA 600". Below the photos, a table with five rows labeled on the left "Room size", "Filter", "Noise", "App control" and "Price". Room size reads "250 sq ft", "450 sq ft" and "800 sq ft". Filter reads "HEPA", "HEPA + carbon" and "HEPA + carbon". Noise reads "24 dB", "22 dB" and "20 dB". App control shows a gray dash, a green check mark and a green check mark. Price reads "$149", "$229" and "$349". The middle column has a thin teal outline and a small teal "BEST SELLER" tab above it. Crisp legible sans-serif typography, thin light gray row dividers, generous spacing, no other text.

The chart needs both. **Planning puts every value in its row and column** and keeps the highlight on the middle product. **Rendering finishes the three product photos** that head the columns.

This guide covers the request, the thinking level on a dense layout, quality on photoreal detail, lowering the thinking level for focused edits, and what each control does to cost and latency.

### [The request](https://runware.ai/docs/models/openai-gpt-image-2-6-flare/guides/quality-and-thinking-level#the-request)

Both controls sit in `settings`, and **each one can be set without the other**.

**TypeScript**:

```typescript
import { createClient } from '@runware/sdk'

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

const [result] = await client.run({
  model: 'openai:gpt-image@2.6-flare',
  positivePrompt: 'A product comparison chart for an online home appliance store, landscape layout on a clean white background. Three columns, each topped by a photoreal product photo of an air purifier on a soft gray studio backdrop: a compact white cylinder labeled "AURA 200", a mid-size white cylinder with a pale oak base labeled "AURA 400", and a tall charcoal tower labeled "AURA 600". Below the photos, a table with five rows labeled on the left "Room size", "Filter", "Noise", "App control" and "Price". Room size reads "250 sq ft", "450 sq ft" and "800 sq ft". Filter reads "HEPA", "HEPA + carbon" and "HEPA + carbon". Noise reads "24 dB", "22 dB" and "20 dB". App control shows a gray dash, a green check mark and a green check mark. Price reads "$149", "$229" and "$349". The middle column has a thin teal outline and a small teal "BEST SELLER" tab above it. Crisp legible sans-serif typography, thin light gray row dividers, generous spacing, no other text.',
  settings: {
    thinkingLevel: 'high',
    quality: 'high'
  },
  width: 1536,
  height: 1024
})
```

**Python**:

```python
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": "openai:gpt-image@2.6-flare",
            "positivePrompt": "A product comparison chart for an online home appliance store, landscape layout on a clean white background. Three columns, each topped by a photoreal product photo of an air purifier on a soft gray studio backdrop: a compact white cylinder labeled \"AURA 200\", a mid-size white cylinder with a pale oak base labeled \"AURA 400\", and a tall charcoal tower labeled \"AURA 600\". Below the photos, a table with five rows labeled on the left \"Room size\", \"Filter\", \"Noise\", \"App control\" and \"Price\". Room size reads \"250 sq ft\", \"450 sq ft\" and \"800 sq ft\". Filter reads \"HEPA\", \"HEPA + carbon\" and \"HEPA + carbon\". Noise reads \"24 dB\", \"22 dB\" and \"20 dB\". App control shows a gray dash, a green check mark and a green check mark. Price reads \"$149\", \"$229\" and \"$349\". The middle column has a thin teal outline and a small teal \"BEST SELLER\" tab above it. Crisp legible sans-serif typography, thin light gray row dividers, generous spacing, no other text.",
            "settings": {
                "thinkingLevel": "high",
                "quality": "high"
            },
            "width": 1536,
            "height": 1024
        })

asyncio.run(main())
```

**cURL**:

```bash
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "imageInference",
      "taskUUID": "7d2e4a91-3c58-4b6f-9e17-a5c08b3d2f64",
      "model": "openai:gpt-image@2.6-flare",
      "positivePrompt": "A product comparison chart for an online home appliance store, landscape layout on a clean white background. Three columns, each topped by a photoreal product photo of an air purifier on a soft gray studio backdrop: a compact white cylinder labeled \"AURA 200\", a mid-size white cylinder with a pale oak base labeled \"AURA 400\", and a tall charcoal tower labeled \"AURA 600\". Below the photos, a table with five rows labeled on the left \"Room size\", \"Filter\", \"Noise\", \"App control\" and \"Price\". Room size reads \"250 sq ft\", \"450 sq ft\" and \"800 sq ft\". Filter reads \"HEPA\", \"HEPA + carbon\" and \"HEPA + carbon\". Noise reads \"24 dB\", \"22 dB\" and \"20 dB\". App control shows a gray dash, a green check mark and a green check mark. Price reads \"$149\", \"$229\" and \"$349\". The middle column has a thin teal outline and a small teal \"BEST SELLER\" tab above it. Crisp legible sans-serif typography, thin light gray row dividers, generous spacing, no other text.",
      "settings": {
        "thinkingLevel": "high",
        "quality": "high"
      },
      "width": 1536,
      "height": 1024
    }
  ]'
```

**CLI**:

```bash
runware run openai:gpt-image@2.6-flare \
  positivePrompt="A product comparison chart for an online home appliance store, landscape layout on a clean white background. Three columns, each topped by a photoreal product photo of an air purifier on a soft gray studio backdrop: a compact white cylinder labeled \"AURA 200\", a mid-size white cylinder with a pale oak base labeled \"AURA 400\", and a tall charcoal tower labeled \"AURA 600\". Below the photos, a table with five rows labeled on the left \"Room size\", \"Filter\", \"Noise\", \"App control\" and \"Price\". Room size reads \"250 sq ft\", \"450 sq ft\" and \"800 sq ft\". Filter reads \"HEPA\", \"HEPA + carbon\" and \"HEPA + carbon\". Noise reads \"24 dB\", \"22 dB\" and \"20 dB\". App control shows a gray dash, a green check mark and a green check mark. Price reads \"\$149\", \"\$229\" and \"\$349\". The middle column has a thin teal outline and a small teal \"BEST SELLER\" tab above it. Crisp legible sans-serif typography, thin light gray row dividers, generous spacing, no other text." \
  settings.thinkingLevel=high \
  settings.quality=high \
  width=1536 \
  height=1024
```

**JSON**:

```json
{
  "taskType": "imageInference",
  "taskUUID": "7d2e4a91-3c58-4b6f-9e17-a5c08b3d2f64",
  "model": "openai:gpt-image@2.6-flare",
  "positivePrompt": "A product comparison chart for an online home appliance store, landscape layout on a clean white background. Three columns, each topped by a photoreal product photo of an air purifier on a soft gray studio backdrop: a compact white cylinder labeled \"AURA 200\", a mid-size white cylinder with a pale oak base labeled \"AURA 400\", and a tall charcoal tower labeled \"AURA 600\". Below the photos, a table with five rows labeled on the left \"Room size\", \"Filter\", \"Noise\", \"App control\" and \"Price\". Room size reads \"250 sq ft\", \"450 sq ft\" and \"800 sq ft\". Filter reads \"HEPA\", \"HEPA + carbon\" and \"HEPA + carbon\". Noise reads \"24 dB\", \"22 dB\" and \"20 dB\". App control shows a gray dash, a green check mark and a green check mark. Price reads \"$149\", \"$229\" and \"$349\". The middle column has a thin teal outline and a small teal \"BEST SELLER\" tab above it. Crisp legible sans-serif typography, thin light gray row dividers, generous spacing, no other text.",
  "settings": {
    "thinkingLevel": "high",
    "quality": "high"
  },
  "width": 1536,
  "height": 1024
}
```

| Setting | Controls | Values | Default |
| --- | --- | --- | --- |
| `settings.thinkingLevel` | Planning before rendering | `low`, `medium`, `high` | `high` |
| `settings.quality` | Rendering effort | `auto`, `low`, `medium`, `high`, `xhigh`, `max` | `auto` |

A request that sends neither runs at **the top thinking level** and leaves quality to the model. OpenAI's own documentation calls the thinking level **complexity**, so that is the name to look for in their material.

`auto` lets the model pick the rendering level, which is fine while you test a prompt. For batch work, **set `quality` explicitly**. Quality drives the output tokens of each image, and `auto` takes that choice out of your hands.

### [Planning a dense layout](https://runware.ai/docs/models/openai-gpt-image-2-6-flare/guides/quality-and-thinking-level#planning-a-dense-layout)

The thinking level matters most where **elements depend on each other**: numbered stops that match a key, values that line up across columns, icons that agree with a legend, labels that point at one part of a diagram. OpenAI recommends the higher levels for dense text, complex layouts and **relationships between objects**.

Both itineraries below were rendered at `quality: "high"`, so the planning is the only setting that differs.

![A flat travel itinerary infographic titled LISBON IN 5 DAYS on a sand background, a stylized river map with five numbered terracotta pins above five matching day cards and a Walk, Tram and Train legend](https://runware.ai/docs/assets/output-thinking-low.H-pqF1Fk_23rAbq.jpg)

*thinkingLevel low*

> **Prompt**: A travel itinerary infographic for a five-day trip to Lisbon, designed as a portrait trip summary screen for a travel app. At the top, the title "LISBON IN 5 DAYS" and below it "May 12 to 16". The upper half is a flat stylized map of the city along the river, with five terracotta circular pins numbered 1 to 5, joined in order by a dotted navy route line. The lower half is a vertical timeline of five day cards. Each card starts with its day number in a terracotta circle like the pins, then a start time, a place name and a small transport icon: card 1 "9:00" "Alfama and the castle" with a walking icon, card 2 "10:00" "Belém and the river" with a tram icon, card 3 "8:30" "Day trip to Sintra" with a train icon, card 4 "18:00" "Bairro Alto food tour" with a walking icon, card 5 "11:00" "Cascais coast" with a train icon. At the bottom, a legend row with the three icons labeled "Walk", "Tram" and "Train". Flat vector style, navy text on a warm sand background, terracotta accents, crisp legible sans-serif typography, no other text.

![The same itinerary brief with five numbered terracotta pins joined by a dotted route along the river, above five day cards numbered to match, each with its time, place and transport icon](https://runware.ai/docs/assets/output-thinking-high.Oxxv7XTK_FB1pa.jpg)

*thinkingLevel high*

> **Prompt**: A travel itinerary infographic for a five-day trip to Lisbon, designed as a portrait trip summary screen for a travel app. At the top, the title "LISBON IN 5 DAYS" and below it "May 12 to 16". The upper half is a flat stylized map of the city along the river, with five terracotta circular pins numbered 1 to 5, joined in order by a dotted navy route line. The lower half is a vertical timeline of five day cards. Each card starts with its day number in a terracotta circle like the pins, then a start time, a place name and a small transport icon: card 1 "9:00" "Alfama and the castle" with a walking icon, card 2 "10:00" "Belém and the river" with a tram icon, card 3 "8:30" "Day trip to Sintra" with a train icon, card 4 "18:00" "Bairro Alto food tour" with a walking icon, card 5 "11:00" "Cascais coast" with a train icon. At the bottom, a legend row with the three icons labeled "Walk", "Tram" and "Train". Flat vector style, navy text on a warm sand background, terracotta accents, crisp legible sans-serif typography, no other text.

Read the cards against the map and the legend. **Both levels kept the links on this brief**: each numbered pin has a day card with the same number, every time and place is the one the prompt quoted, and each transport icon matches the legend.

Flare has **no `seed`**, so every render is a new take on the prompt. Judge a pair like this on structure rather than on where the river landed, and judge a level over a few renders rather than one.

`high` is the default, and it is the level OpenAI recommends for **anything a reader has to follow**: infographics, comparison tables, menus and dashboards. Lowering it can shorten the wait. Before you keep a lower level in production, **check the links between elements** across a few renders of your own brief.

### [Rendering detail](https://runware.ai/docs/models/openai-gpt-image-2-6-flare/guides/quality-and-thinking-level#rendering-detail)

`quality` works on **the finish of what was planned**, and it sets the output tokens of every render. OpenAI suggests `low` for quick drafts and comparing the higher levels for final assets, weighing detail against latency and cost.

Both packshots below were planned at `thinkingLevel: "high"` and rendered at `quality: "low"` and `quality: "high"`. The loupe on each sits over the leaves.

![A calathea houseplant with dark green leaves striped in pale pink, two showing purple undersides, in a speckled cream stoneware pot on a warm white backdrop](https://runware.ai/docs/assets/output-quality-low.ChD-Xj4e_Z1K9o3V.jpg)

*quality low*

> **Prompt**: An e-commerce product photograph of a calathea ornata houseplant in a speckled cream stoneware pot, standing on a plain warm white seamless backdrop. Deep green oval leaves marked with fine pale pink pinstripes running from the midrib to the leaf edge, the purple underside visible on two leaves, a top dressing of bark chips over the soil. Soft diffused studio light from the upper left, a gentle shadow to the right of the pot. Straight-on shot at pot height, 85mm lens, the plant centered with plain backdrop on both sides. Photoreal plant shop product photography, natural color, no text.

![The same calathea brief with thin pale pink pinstripes resolved as separate lines across each dark green leaf and distinct flecks in the cream glaze of the pot](https://runware.ai/docs/assets/output-quality-high.BDffI14o_ZwJ8yb.jpg)

*quality high*

> **Prompt**: An e-commerce product photograph of a calathea ornata houseplant in a speckled cream stoneware pot, standing on a plain warm white seamless backdrop. Deep green oval leaves marked with fine pale pink pinstripes running from the midrib to the leaf edge, the purple underside visible on two leaves, a top dressing of bark chips over the soil. Soft diffused studio light from the upper left, a gentle shadow to the right of the pot. Straight-on shot at pot height, 85mm lens, the plant centered with plain backdrop on both sides. Photoreal plant shop product photography, natural color, no text.

On this packshot **`low` already resolves the fine texture**. The pink pinstripes are separate thin lines from the midrib to the edge of each leaf in both renders, and the glaze carries the same individual flecks. A single product on a plain backdrop leaves the extra effort little to work on, so **compare a `low` render with a higher level** on your own subject before you pay for the higher one.

A higher level **does not improve the framing or the styling**, which come from the prompt. Fix those first, then raise the level.

### [Focused edits](https://runware.ai/docs/models/openai-gpt-image-2-6-flare/guides/quality-and-thinking-level#focused-edits)

An edit turns the guidance around. OpenAI recommends **a lower thinking level for focused edits**, such as changing a background or a sign, and notes that a higher level can **introduce changes you did not ask for**. The source already holds the composition, so a change to one element has little for planning to add.

The source below was generated with Flare. The edit changes only the poster in the left window, at `thinkingLevel: "low"`.

**Source**:

![A dark green bicycle shop front with gold CITY CYCLES lettering, bicycles on stands in two display windows and a white poster in the left window reading SPRING TUNE-UP over $49 in red](https://runware.ai/docs/assets/source-edit.COIV4gmU_2pNvvI.jpg)

> **Prompt**: A street-level photograph of a neighborhood bicycle shop on a sunny morning. A dark green painted shop front with gold lettering on the fascia reading "CITY CYCLES", a glass door in the center and two large display windows with bicycles on stands inside. Taped inside the left window, a printed white poster with bold black text reading "SPRING TUNE-UP" and below it "$49" in red. Soft reflections on the glass, a clean concrete sidewalk in front and a bike rack by the curb. Straight-on shot at eye level, 35mm lens, the whole shop front in frame. Photoreal small-business photography, natural color.

**Edited**:

![The same bicycle shop front with the poster in the left window now reading SUMMER SALE over 20% OFF in red, the fascia, bicycles and reflections unchanged](https://runware.ai/docs/assets/output-edit.DpEo0L19_ZrofJb.jpg)

> **Prompt**: Change only the poster in the left window so it reads "SUMMER SALE" in bold black text with "20% OFF" below it in red, printed on the same white paper at the same size and position. Keep everything else exactly as it is: the green shop front, the "CITY CYCLES" lettering, the glass door, the bicycles in the windows, the reflections on the glass, the sidewalk, the bike rack, the lighting and the framing.

Drag the handle across the window. The poster now reads "SUMMER SALE" over "20% OFF", and **the rest of the shop front is unchanged**: the fascia lettering, the bicycles, the reflections on the glass and the bike rack at the curb.

**TypeScript**:

```typescript
import { createClient } from '@runware/sdk'

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

const [result] = await client.run({
  model: 'openai:gpt-image@2.6-flare',
  positivePrompt: 'Change only the poster in the left window so it reads "SUMMER SALE" in bold black text with "20% OFF" below it in red, printed on the same white paper at the same size and position. Keep everything else exactly as it is: the green shop front, the "CITY CYCLES" lettering, the glass door, the bicycles in the windows, the reflections on the glass, the sidewalk, the bike rack, the lighting and the framing.',
  inputs: {
    referenceImages: [
      'https://assets.runware.ai/guides/openai-gpt-image-2-6-flare/quality-and-thinking-level/source-edit.jpg'
    ]
  },
  settings: {
    thinkingLevel: 'low',
    quality: 'high'
  },
  width: 1536,
  height: 1024
})
```

**Python**:

```python
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": "openai:gpt-image@2.6-flare",
            "positivePrompt": "Change only the poster in the left window so it reads \"SUMMER SALE\" in bold black text with \"20% OFF\" below it in red, printed on the same white paper at the same size and position. Keep everything else exactly as it is: the green shop front, the \"CITY CYCLES\" lettering, the glass door, the bicycles in the windows, the reflections on the glass, the sidewalk, the bike rack, the lighting and the framing.",
            "inputs": {
                "referenceImages": [
                    "https://assets.runware.ai/guides/openai-gpt-image-2-6-flare/quality-and-thinking-level/source-edit.jpg"
                ]
            },
            "settings": {
                "thinkingLevel": "low",
                "quality": "high"
            },
            "width": 1536,
            "height": 1024
        })

asyncio.run(main())
```

**cURL**:

```bash
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "imageInference",
      "taskUUID": "2a9f5c3e-81d4-4e7b-b6a2-0f4c8d1e9b73",
      "model": "openai:gpt-image@2.6-flare",
      "positivePrompt": "Change only the poster in the left window so it reads \"SUMMER SALE\" in bold black text with \"20% OFF\" below it in red, printed on the same white paper at the same size and position. Keep everything else exactly as it is: the green shop front, the \"CITY CYCLES\" lettering, the glass door, the bicycles in the windows, the reflections on the glass, the sidewalk, the bike rack, the lighting and the framing.",
      "inputs": {
        "referenceImages": [
          "https://assets.runware.ai/guides/openai-gpt-image-2-6-flare/quality-and-thinking-level/source-edit.jpg"
        ]
      },
      "settings": {
        "thinkingLevel": "low",
        "quality": "high"
      },
      "width": 1536,
      "height": 1024
    }
  ]'
```

**CLI**:

```bash
runware run openai:gpt-image@2.6-flare \
  positivePrompt="Change only the poster in the left window so it reads \"SUMMER SALE\" in bold black text with \"20% OFF\" below it in red, printed on the same white paper at the same size and position. Keep everything else exactly as it is: the green shop front, the \"CITY CYCLES\" lettering, the glass door, the bicycles in the windows, the reflections on the glass, the sidewalk, the bike rack, the lighting and the framing." \
  inputs.referenceImages.0=https://assets.runware.ai/guides/openai-gpt-image-2-6-flare/quality-and-thinking-level/source-edit.jpg \
  settings.thinkingLevel=low \
  settings.quality=high \
  width=1536 \
  height=1024
```

**JSON**:

```json
{
  "taskType": "imageInference",
  "taskUUID": "2a9f5c3e-81d4-4e7b-b6a2-0f4c8d1e9b73",
  "model": "openai:gpt-image@2.6-flare",
  "positivePrompt": "Change only the poster in the left window so it reads \"SUMMER SALE\" in bold black text with \"20% OFF\" below it in red, printed on the same white paper at the same size and position. Keep everything else exactly as it is: the green shop front, the \"CITY CYCLES\" lettering, the glass door, the bicycles in the windows, the reflections on the glass, the sidewalk, the bike rack, the lighting and the framing.",
  "inputs": {
    "referenceImages": [
      "https://assets.runware.ai/guides/openai-gpt-image-2-6-flare/quality-and-thinking-level/source-edit.jpg"
    ]
  },
  "settings": {
    "thinkingLevel": "low",
    "quality": "high"
  },
  "width": 1536,
  "height": 1024
}
```

**Keep `quality` at the source's level.** The edit returns a whole new image, so the quality setting applies to every part of it and not only to the poster. Writing the instruction itself is covered in [editing images](https://runware.ai/docs/models/openai-gpt-image-2-6-flare/guides/editing-images).

### [Cost and latency](https://runware.ai/docs/models/openai-gpt-image-2-6-flare/guides/quality-and-thinking-level#cost-and-latency)

Flare bills **per token**, with separate rates for text input, image input and image output, listed on the [model page](https://runware.ai/docs/models/openai-gpt-image-2-6-flare). **Quality and size set the output tokens** of a render, so a higher level or a larger frame costs more for the same prompt. An edit also pays for its source as image input.

**The thinking level has no separate fee**, according to OpenAI. What a higher level can add is latency.

Token counts depend on the prompt and the image, so **measure before you budget**: run a few requests at the level and size you plan to use and read what each one cost.

### [Choosing the levels](https://runware.ai/docs/models/openai-gpt-image-2-6-flare/guides/quality-and-thinking-level#choosing-the-levels)

| Job | Thinking level | Quality |
| --- | --- | --- |
| Infographics, tables, menus, dashboards | `high` | `high` |
| Product shots on a plain backdrop | `high` | `low` first, then compare higher levels |
| Drafts and options | the final's level | `low` |
| Focused edits | `low` | the source's level |

**Draft at `quality: "low"` and keep `thinkingLevel` where the final will run.** The thinking level shapes the layout, so a draft planned at a different level shows you a layout the final will not get. With no `seed`, the final is a new take on the prompt you settled on rather than a sharper copy of the draft, so **the prompt is what carries over** from drafting.

### [Tips](https://runware.ai/docs/models/openai-gpt-image-2-6-flare/guides/quality-and-thinking-level#tips)

1. **Leave `thinkingLevel` at `high` for anything with structure.** Tables and numbered keys depend on planning, and the default is already the top level.
    
2. **Drop it to `low` for edits that change one element.** OpenAI recommends it for focused changes, and a higher level can alter parts of the source you meant to keep.
    
3. **Set `quality` explicitly in production.** `auto` hands the level, and with it the output tokens you pay for, to the model.
    
4. **Compare before you raise quality.** On a product shot against a plain backdrop, `low` held the same fine texture as `high`.
    
5. **Match the source's quality on edits.** The returned image is rendered whole at the level you send.
    
6. **Judge a level over several renders.** There is no `seed`, so a single pair differs for reasons beyond the setting.