# Repeated footage (/docs/rules/no-repeated-footage)

Reports clips that reuse a source range already used elsewhere in the sequence.



{/* Generated by scripts/generate-docs.ts. Do not edit. */}

| Property         | Value                                                                                               |
| :--------------- | :-------------------------------------------------------------------------------------------------- |
| Id               | `no-repeated-footage`                                                                               |
| Category         | Global consistency                                                                                  |
| Default severity | info                                                                                                |
| Scope            | [`repeated-footage-pairs`](/docs/reference/computed-scopes#repeated-footage-pairs) (computed scope) |

## Options [#options]

| Option             | Type       | Default                         | Description                                                   |
| :----------------- | :--------- | :------------------------------ | :------------------------------------------------------------ |
| `minOverlapFrames` | `number`   | `12`                            | Source overlap shorter than this many frames is not reported. |
| `includeAudio`     | `boolean`  | `false`                         | Also compare audio clips.                                     |
| `kinds`            | `string[]` | `["media","multicam","merged"]` | Source kinds compared.                                        |
| `ignoreExtensions` | `string[]` | see the rule file               | Lower-case file extensions (stills, graphics) never compared. |

## Customize it [#customize-it]

Turn the rule on or off in the panel's Rules settings. To change its options, severity or wording, open it with its cogwheel in the rule editor and save: your copy replaces the built-in rule until you revert it. You can also copy the file below into your rules folder as `no-repeated-footage.rule.json` and edit it. See [Change a built-in rule](/docs/editor/saving#change-a-built-in-rule).

## Rule file [#rule-file]

```json title="no-repeated-footage.rule.json"
{
  "formatVersion": 1,
  "id": "no-repeated-footage",
  "name": {
    "en_US": "Repeated footage",
    "de_DE": "Wiederholtes Material",
    "es_ES": "Metraje repetido",
    "fr_FR": "Métrage répété",
    "it_IT": "Metraggio ripetuto",
    "ja_JP": "繰り返し使用された素材",
    "ko_KR": "반복된 푸티지",
    "pt_BR": "Gravações repetidas",
    "ru_RU": "Повторяющийся материал",
    "zh_CN": "重复素材"
  },
  "description": {
    "en_US": "Reports clips that reuse a source range already used elsewhere in the sequence.",
    "de_DE": "Meldet Clips, die einen Quellbereich verwenden, der bereits an anderer Stelle in der Sequenz verwendet wird.",
    "es_ES": "Detecta clips que reutilizan un intervalo de origen ya usado en otra parte de la secuencia.",
    "fr_FR": "Signale les éléments qui réutilisent une plage de source déjà utilisée ailleurs dans la séquence.",
    "it_IT": "Segnala le clip che riutilizzano un intervallo di sorgente già usato altrove nella sequenza.",
    "ja_JP": "シーケンス内の別の場所で使用済みのソース範囲を再使用しているクリップを報告します。",
    "ko_KR": "시퀀스의 다른 곳에서 이미 사용한 소스 범위를 다시 사용하는 클립을 보고합니다.",
    "pt_BR": "Relata clipes que reutilizam um trecho da origem já usado em outro ponto da sequência.",
    "ru_RU": "Сообщает о клипах, повторно использующих фрагмент источника, уже использованный в другом месте эпизода.",
    "zh_CN": "报告重复使用了序列中其他位置已使用过的源范围的剪辑。"
  },
  "category": "global-consistency",
  "scope": "repeated-footage-pairs",
  "severity": "info",
  "options": {
    "minOverlapFrames": {
      "type": "number",
      "default": 12,
      "description": "Source overlap shorter than this many frames is not reported."
    },
    "includeAudio": {
      "type": "boolean",
      "default": false,
      "description": "Also compare audio clips."
    },
    "kinds": {
      "type": "string[]",
      "default": [
        "media",
        "multicam",
        "merged"
      ],
      "description": "Source kinds compared."
    },
    "ignoreExtensions": {
      "type": "string[]",
      "default": [
        "png",
        "jpg",
        "jpeg",
        "gif",
        "tif",
        "tiff",
        "psd",
        "ai",
        "svg",
        "bmp",
        "webp",
        "heic"
      ],
      "description": "Lower-case file extensions (stills, graphics) never compared."
    }
  },
  "checks": [
    {
      "condition": {
        "all": [
          {
            "field": "reuse.overlapFrames",
            "operator": "greaterThanOrEqual",
            "value": {
              "field": "options.minOverlapFrames"
            }
          },
          {
            "any": [
              {
                "field": "clip.trackType",
                "operator": "equals",
                "value": "video"
              },
              {
                "field": "options.includeAudio",
                "operator": "equals",
                "value": true
              }
            ]
          },
          {
            "field": "clip.source.kind",
            "operator": "in",
            "value": {
              "field": "options.kinds"
            }
          },
          {
            "not": {
              "field": "clip.source.extension",
              "operator": "in",
              "value": {
                "field": "options.ignoreExtensions"
              }
            }
          }
        ]
      },
      "message": {
        "en_US": "Clip \"{clip.name}\" on {clip.track} reuses {labels.duration} of source already used by \"{reuse.earlierName}\" on {reuse.earlierTrack} at {reuse.earlierTimecode}.",
        "de_DE": "Clip „{clip.name}“ auf {clip.track} verwendet erneut {labels.duration} Quellmaterial, das bereits „{reuse.earlierName}“ auf {reuse.earlierTrack} bei {reuse.earlierTimecode} verwendet.",
        "es_ES": "Clip \"{clip.name}\" en {clip.track} reutiliza {labels.duration} de un origen que ya usa \"{reuse.earlierName}\" en {reuse.earlierTrack} en {reuse.earlierTimecode}.",
        "fr_FR": "Élément « {clip.name} » sur {clip.track} réutilise {labels.duration} d'une source déjà utilisée par « {reuse.earlierName} » sur {reuse.earlierTrack} à {reuse.earlierTimecode}.",
        "it_IT": "Clip \"{clip.name}\" su {clip.track} riutilizza {labels.duration} di sorgente già usata da \"{reuse.earlierName}\" su {reuse.earlierTrack} a {reuse.earlierTimecode}.",
        "ja_JP": "クリップ「{clip.name}」（{clip.track}）は、{reuse.earlierTimecode}の「{reuse.earlierName}」（{reuse.earlierTrack}）で使用済みのソースを{labels.duration}分再使用しています。",
        "ko_KR": "{clip.track}의 클립 \"{clip.name}\"이(가) {reuse.earlierTimecode}의 {reuse.earlierTrack}의 \"{reuse.earlierName}\"에서 이미 사용한 소스를 {labels.duration} 분량 다시 사용합니다.",
        "pt_BR": "Clipe \"{clip.name}\" em {clip.track} reutiliza {labels.duration} da origem já usada por \"{reuse.earlierName}\" em {reuse.earlierTrack} em {reuse.earlierTimecode}.",
        "ru_RU": "Клип «{clip.name}» на {clip.track} повторно использует {labels.duration} источника, уже использованного клипом «{reuse.earlierName}» на {reuse.earlierTrack} в позиции {reuse.earlierTimecode}.",
        "zh_CN": "{clip.track} 上的剪辑“{clip.name}” 重复使用了 {labels.duration} 的源素材，该素材已在 {reuse.earlierTimecode} 处被 {reuse.earlierTrack} 上的“{reuse.earlierName}” 使用。"
      }
    }
  ],
  "labels": {
    "duration": {
      "field": "reuse.overlapIsSeconds",
      "values": {
        "true": {
          "en_US": "{reuse.overlapSeconds} s",
          "de_DE": "{reuse.overlapSeconds} s",
          "es_ES": "{reuse.overlapSeconds} s",
          "fr_FR": "{reuse.overlapSeconds} s",
          "it_IT": "{reuse.overlapSeconds} s",
          "ja_JP": "{reuse.overlapSeconds} s",
          "ko_KR": "{reuse.overlapSeconds} s",
          "pt_BR": "{reuse.overlapSeconds} s",
          "ru_RU": "{reuse.overlapSeconds} с",
          "zh_CN": "{reuse.overlapSeconds} s"
        },
        "false": {
          "en_US": {
            "count": "reuse.overlapFramesRounded",
            "one": "{reuse.overlapFramesRounded} frame",
            "other": "{reuse.overlapFramesRounded} frames"
          },
          "de_DE": {
            "count": "reuse.overlapFramesRounded",
            "one": "{reuse.overlapFramesRounded} Frame",
            "other": "{reuse.overlapFramesRounded} Frames"
          },
          "es_ES": {
            "count": "reuse.overlapFramesRounded",
            "one": "{reuse.overlapFramesRounded} fotograma",
            "other": "{reuse.overlapFramesRounded} fotogramas"
          },
          "fr_FR": {
            "count": "reuse.overlapFramesRounded",
            "one": "{reuse.overlapFramesRounded} image",
            "other": "{reuse.overlapFramesRounded} images"
          },
          "it_IT": {
            "count": "reuse.overlapFramesRounded",
            "one": "{reuse.overlapFramesRounded} fotogramma",
            "other": "{reuse.overlapFramesRounded} fotogrammi"
          },
          "ja_JP": "{reuse.overlapFramesRounded}フレーム",
          "ko_KR": "{reuse.overlapFramesRounded}프레임",
          "pt_BR": {
            "count": "reuse.overlapFramesRounded",
            "one": "{reuse.overlapFramesRounded} quadro",
            "other": "{reuse.overlapFramesRounded} quadros"
          },
          "ru_RU": {
            "count": "reuse.overlapFramesRounded",
            "one": "{reuse.overlapFramesRounded} кадр",
            "few": "{reuse.overlapFramesRounded} кадра",
            "many": "{reuse.overlapFramesRounded} кадров",
            "other": "{reuse.overlapFramesRounded} кадра"
          },
          "zh_CN": "{reuse.overlapFramesRounded} 帧"
        }
      }
    }
  },
  "data": {
    "projectItemId": "reuse.projectItemId",
    "overlapTicks": "reuse.overlapTicks",
    "overlapFrames": "reuse.overlapFrames",
    "minOverlapFrames": "options.minOverlapFrames",
    "earlierStart": "reuse.earlierStart"
  }
}
```
