---
title: "Common Element Properties"
canonical_url: https://docs.zvid.io/docs/structure/common-properties/
source: docs/structure/common-properties.md
content_revision: 6338386a1dd87e4a
---

# Common Element Properties

Every visual element (`TEXT`, `IMAGE`, `VIDEO`, `GIF`, and the deprecated `SVG`)
shares the same placement, timing, and layering fields. This page is the
canonical reference for those shared properties — element pages document only
what is specific to their type and link back here.

Visual elements belong in `payload.visuals` or `payload.scenes[n].visuals`.
Timing and animation fields below are for video projects; image projects use
always-visible static elements and [reject timing fields](https://docs.zvid.io/docs/rendering-images/#converting-a-video-composition).

## Placement & Transform

| Property          | Type             | Default                                     | Notes                                                                                              |
| ----------------- | ---------------- | ------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| `x`, `y`          | `number`         | `0`                                         | Pixel position. Ignored when a `position` preset is used.                                          |
| `width`, `height` | `number`         | auto (source / computed)                    | Element size in pixels. Limited by plan input resolution for media.                                |
| `position`        | `PositionPreset` | `custom`                                    | 9-grid preset placement such as `center-center`. See [`PositionPreset`](https://docs.zvid.io/docs/structure/properties/position/). |
| `anchor`          | `Anchor`         | derived from `position` when preset is used | Transform origin for placement and rotation. See [`Anchor`](https://docs.zvid.io/docs/structure/properties/anchor/).               |
| `opacity`         | `number`         | `1`                                         | `0` (invisible) to `1` (opaque).                                                                   |
| `angle`           | `number`         | `0`                                         | Rotation in degrees, `-360` to `360`, around the `anchor`.                                         |
| `flipV`, `flipH`  | `boolean`        | `false`                                     | Vertical / horizontal mirroring.                                                                   |

With custom coordinates, omitted `anchor` uses `top-left`. All sizes and
positions are pixels on the output canvas, not CSS percentages. A preset
overrides explicit `x`/`y`; for an inset or margin, use custom coordinates.
See [Layout](https://docs.zvid.io/docs/concepts/layout/) for worked positioning examples.

## Timing

All times are seconds on the element's timeline — the project timeline, or the
**scene-local** timeline when the element lives inside a [scene](https://docs.zvid.io/docs/structure/scenes/).
Inside a scene, duration-based defaults refer to that scene's resolved length.
For source trimming and automatic duration, see [Timing](https://docs.zvid.io/docs/concepts/timing/).

| Property     | Default            | Notes                        |
| ------------ | ------------------ | ---------------------------- |
| `enterBegin` | `0`                | Element starts appearing.    |
| `enterEnd`   | `0`                | Element is fully visible.    |
| `exitBegin`  | `project.duration` | Element starts disappearing. |
| `exitEnd`    | `project.duration` | Element is fully gone.       |

The element is invisible before `enterBegin`, animates in until `enterEnd`,
stays visible until `exitBegin`, and animates out until `exitEnd`. The
enter/exit _windows_ only have an effect when paired with an
[`enterAnimation` / `exitAnimation`](https://docs.zvid.io/docs/structure/animations/); with no animation the
element simply cuts in at `enterBegin` and out at `exitEnd`.

## Layering

| Property | Default | Notes                                                                                                                                       |
| -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `track`  | `0`     | Z-order: higher tracks render above lower tracks. Inside scenes, scene elements always render below project-level (global overlay) visuals. |

## Animations

| Property         | Default | Notes                                                                      |
| ---------------- | ------- | -------------------------------------------------------------------------- |
| `enterAnimation` | `null`  | Xfade effect name for the enter window. See [Animations](https://docs.zvid.io/docs/structure/animations/). |
| `exitAnimation`  | `null`  | Xfade effect name for the exit window.                                     |

Supported effect names are listed in [`XFadeEffect`](https://docs.zvid.io/docs/structure/properties/xfade-effects/).

## Media-Only Properties

Media elements add resizing and effect options. Support by type:

| Property                                               | IMAGE | VIDEO | GIF | TEXT | SVG (deprecated) |
| ------------------------------------------------------ | :---: | :---: | :-: | :--: | :--------------: |
| [`resize`](https://docs.zvid.io/docs/structure/properties/resize/) (`contain`/`cover`) |  ✅   |  ✅   | ✅  |  —   |        —         |
| [`zoom`](https://docs.zvid.io/docs/structure/properties/zoom/) (Ken Burns)             |  ✅   |  ✅   | ✅  |  —   |        —         |
| [`filter`](https://docs.zvid.io/docs/structure/properties/filter-options/)             |  ✅   |  ✅   | ✅  |  —   |        ✅        |
| [`cropParams`](https://docs.zvid.io/docs/structure/properties/crop-params/)            |  ✅   |  ✅   | ✅  |  —   |        —         |
| [`chromaKey`](https://docs.zvid.io/docs/structure/properties/chroma-key/)              |  ✅   |  ✅   | ✅  |  —   |        ✅        |
| [`radius`](https://docs.zvid.io/docs/structure/properties/border-radius/)              |  ✅   |  ✅   | ✅  |  —   |        —         |

`TEXT` elements style themselves with `style` and [`customCode`](https://docs.zvid.io/docs/structure/text-elements/#native-css--javascript-customcode)
instead — rounded corners, shadows, and filters are all regular CSS there.

## Audio Timing Is Different

[Audio items](https://docs.zvid.io/docs/structure/audio-elements/) are not visual elements: they use `enter` /
`exit` for timeline placement and `audioBegin` / `audioEnd` for source trimming,
and have no transform, layering, or animation fields.

## Related Pages

- [JSON Structure Overview](https://docs.zvid.io/docs/structure/)
- [Animations](https://docs.zvid.io/docs/structure/animations/)
- [Scenes](https://docs.zvid.io/docs/structure/scenes/)
- [Property Reference](https://docs.zvid.io/docs/structure/properties/position/)
