> For the complete documentation index, see [llms.txt](https://plugin-everything.gitbook.io/plugin-everything-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://plugin-everything.gitbook.io/plugin-everything-docs/controls/width-modes/width-control-modes/curve-graph.md).

# Curve Graph

`Curve Graph` gives direct Bezier control over the stroke's width profile. Use it when slider-based width modes are not detailed enough.

{% hint style="info" %}
The X-axis represents position along the path. The Y-axis represents width multiplier, from zero width at the bottom to full `Stroke Width` at the top.
{% endhint %}

The default graph contains 5 evenly spaced control points at full width (a flat line at the top), producing constant width identical to `Width Control Mode: None (Constant Width)`.

## Controls

<details>

<summary>Graph Areas</summary>

#### Graph Areas

The widget is divided into three areas:

| Area                   | Purpose                   |
| ---------------------- | ------------------------- |
| Main graph area        | Bezier curve canvas       |
| Right tangent buttons  | Per-point editing tools   |
| Bottom utility buttons | Whole-graph editing tools |

</details>

<details>

<summary>Adding Points</summary>

#### Adding Points

Click directly on the curve line to insert a new point at that position. The point insertion cursor appears as a visual guide.

The point is inserted using Bezier subdivision, so the original curve shape is preserved. Up to 128 points are supported.

</details>

<details>

<summary>Selecting Points</summary>

#### Selecting Points

Click a square control point to select it. The selected point is highlighted and drawn above the other points.

The tangent buttons in the right column are disabled until a point is selected.

</details>

<details>

<summary>Moving Points</summary>

#### Moving Points

Drag a square control point to reposition it. Points are constrained to the 0-1 range on both axes and cannot be moved past adjacent points.

The first and last points cannot be moved horizontally - they are locked to X = 0 and X = 1 respectively.

</details>

<details>

<summary>Deleting Points</summary>

#### Deleting Points

Hold `Alt` and click a square control point to delete it. The point subtraction cursor appears as a visual guide.

The first and last points cannot be deleted.

</details>

<details>

<summary>Bezier Handles</summary>

#### Bezier Handles

Each point has two bezier handles (in and out) that control the curve shape entering and leaving the point. Drag a handle to adjust it. Handles are constrained so they cannot extend past adjacent points horizontally.

By default, handles are unified: moving one handle mirrors the other to maintain a smooth curve. Hold `Alt` and click a handle to toggle between unified and split mode. In split mode, each handle moves independently, allowing sharp transitions.

</details>

<details>

<summary>Tangent Buttons</summary>

#### Tangent Buttons

Four buttons appear in a vertical column to the right of the graph. These operate on the currently selected point. All four buttons are dimmed when no point is selected.

| Button           | Result                                                           |
| ---------------- | ---------------------------------------------------------------- |
| `Mirror`         | Toggles the selected point between unified and split handle mode |
| `Toggle Handles` | Turns handles on or off for the selected point                   |
| `Auto`           | Recalculates natural horizontal handles for the selected point   |
| `Delete`         | Deletes the selected point when it is not an endpoint            |

`Mirror` is disabled for the first and last points because they only have one handle each. `Delete` is disabled for the first and last points because endpoints are required.

</details>

<details>

<summary>Utility Buttons</summary>

#### Utility Buttons

Five buttons appear in a horizontal row below the graph. These operate on the entire graph.

| Button    | Result                                                            |
| --------- | ----------------------------------------------------------------- |
| `Add N`   | Prompts for 1-9 new points and inserts them into the largest gaps |
| `Flip X`  | Mirrors the curve horizontally, reversing the width profile       |
| `Flip Y`  | Inverts the curve vertically, swapping high and low width values  |
| `Distr X` | Distributes all points evenly along the X-axis                    |
| `Distr Y` | Distributes all points evenly along the Y-axis                    |

{% hint style="info" %}
When the graph has keyframes, utility and tangent button operations are applied to every keyframe, not just the current time. `Add N` shows an error if keyframes exist - remove graph keyframes before using it.
{% endhint %}

</details>

<details>

<summary>Point Location</summary>

#### Point Location

When a control point is selected in the `Thiccness Graph`, `Point Location` displays and controls the selected point's X position from 0% to 100%.

Use it for precise numeric placement along the path.

</details>

## Interface Conditionals

<details>

<summary>Point Selection</summary>

| Condition                  | Result                                         |
| -------------------------- | ---------------------------------------------- |
| No graph point is selected | Tangent buttons are disabled                   |
| A graph point is selected  | Tangent buttons become available               |
| An endpoint is selected    | `Mirror` and `Delete` are disabled             |
| A graph point is selected  | `Point Location` shows that point's X position |

</details>

<details>

<summary>Keyframes</summary>

| Condition              | Result                                            |
| ---------------------- | ------------------------------------------------- |
| Graph has no keyframes | `Add N` can insert new graph points               |
| Graph has keyframes    | `Add N` shows an error                            |
| Graph has keyframes    | Utility and tangent edits apply to every keyframe |

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://plugin-everything.gitbook.io/plugin-everything-docs/controls/width-modes/width-control-modes/curve-graph.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
