# `DecalSpec.image`

> Contract 2.0.0 · package sha256 `a857eca95b35921109faf997094bb4192f12527d9d0fcd4be7e97f06425bad6e` · generated from `configurator-runtime.d.ts` by `services/onsite-scripter/scripts/build-contract-docs.mjs`; edit the source, not this file.

Property of [`DecalSpec`](DecalSpec.md) · labs, `@experimental` · since 2.0.0

```ts
image: TextureInput;
```

The decal's image. Of a [`TextureSpec`](TextureSpec.md) only [`url`](TextureSpec.url.md), [`image`](TextureSpec.image.md), [`optimizedUrl`](TextureSpec.optimizedUrl.md) and [`colorSpace`](TextureSpec.colorSpace.md)
apply: the image spans [`size`](DecalSpec.size.md) once, its top along world +Y, so a placement or sampling field
([`uv`](TextureSpec.uv.md), [`scale`](TextureSpec.scale.md), [`offset`](TextureSpec.offset.md), [`rotationDeg`](TextureSpec.rotationDeg.md), [`sizeM`](TextureSpec.sizeM.md), [`wrap`](TextureSpec.wrap.md), [`sampling`](TextureSpec.sampling.md), [`enabled`](TextureSpec.enabled.md)) rejects
HoloInputError [`'unknown-field'`](../input-errors/unknown-field.md); turn the image itself (draw it on a canvas) to turn the decal.
A failed load rejects HoloAssetError.

## Generic-API test (spec 3.1)

| Rule | Result |
| --- | --- |
| 1. Neutral name | pass: `image` names no product |
| 2. A precedent | pass (through its owner [`DecalSpec`](DecalSpec.md)): [Babylon.js MeshBuilder.CreateDecal](https://github.com/BabylonJS/Babylon.js/blob/master/packages/dev/core/src/Meshes/Builders/decalBuilder.ts) (row `G24`); [Unity Projector](https://docs.unity3d.com/ScriptReference/Projector.html) (row `G24`) |
| 3. Two apps, or labs | labs (`@experimental` at a stable path, reached through `has()` or `supports()`): it graduates when a second app uses it; apps today: app-bcb7ef21da |
| 4. The cheaper fix first | decided per need in Appendix B: rows `G24`, `K52` (through its owner [`DecalSpec`](DecalSpec.md)) at tier labs (a member only where no rule, data, asset or app code serves the need) |
