The Swift Package Index logo.Swift Package Index

Build Information

Successful build of Kadr, reference v1.1.0 (eb93a6), with Swift 6.3 for macOS (SPM) on 31 Aug 2026 16:10:37 UTC.

Swift 6 data race errors: 0

Build Command

env DEVELOPER_DIR=/Applications/Xcode-26.5.0.app xcrun swift build --arch arm64

Build Log

========================================
RunAll
========================================
Builder version: 5.0.2
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/SteliyanH/kadr.git
Reference: v1.1.0
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/SteliyanH/kadr
 * tag               v1.1.0     -> FETCH_HEAD
HEAD is now at eb93a6f Merge pull request #198 from SteliyanH/develop
Cloned https://github.com/SteliyanH/kadr.git
Revision (git rev-parse @):
eb93a6fa6a4936b247afa5527753f3987d2f66a1
SPI manifest file found: $PWD/.spi.yml
SUCCESS checkout https://github.com/SteliyanH/kadr.git at v1.1.0
========================================
ResolveProductDependencies
========================================
Resolving dependencies ...
{
  "identity": ".resolve-product-dependencies",
  "name": "resolve-dependencies",
  "url": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
  "version": "unspecified",
  "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
  "traits": [
    "default"
  ],
  "dependencies": [
    {
      "identity": "kadr",
      "name": "Kadr",
      "url": "https://github.com/SteliyanH/kadr.git",
      "version": "unspecified",
      "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/kadr",
      "traits": [
        "default"
      ],
      "dependencies": [
      ]
    }
  ]
}
Fetching https://github.com/SteliyanH/kadr.git
[1/2034] Fetching kadr
Fetched https://github.com/SteliyanH/kadr.git from cache (6.30s)
Creating working copy for https://github.com/SteliyanH/kadr.git
Working copy of https://github.com/SteliyanH/kadr.git resolved at v1.1.0 (eb93a6f)
warning: '.resolve-product-dependencies': dependency 'kadr' is not used by any target
Found 0 product dependencies
========================================
Build
========================================
Selected platform:         macosSpm
Swift version:             6.3
Building package at path:  $PWD
https://github.com/SteliyanH/kadr.git
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-26.5.0.app xcrun swift build --arch arm64
Building for debugging...
[0/8] Write sources
[1/8] Write KadrBenchmarks-entitlement.plist
[1/8] Write sources
[4/8] Write swift-version-69A768CDF2A0BEE1.txt
[6/72] Emitting module Kadr
[7/79] Compiling Kadr TextOverlay.swift
[8/79] Compiling Kadr TextShadow.swift
[9/79] Compiling Kadr TextStroke.swift
[10/79] Compiling Kadr TextStyle.swift
[11/79] Compiling Kadr Watermark.swift
[12/79] Compiling Kadr PlatformTypes.swift
[13/79] Compiling Kadr Timecode.swift
[14/79] Compiling Kadr FilterID.swift
[15/79] Compiling Kadr Frame.swift
[16/79] Compiling Kadr LayerID.swift
[17/79] Compiling Kadr Layout.swift
[18/79] Compiling Kadr Position.swift
[19/79] Compiling Kadr Size.swift
[20/79] Compiling Kadr Transform.swift
[21/79] Compiling Kadr Animatable.swift
[22/79] Compiling Kadr Animation.swift
[23/79] Compiling Kadr TimingFunction.swift
[24/79] Compiling Kadr AudioBuilder.swift
[25/79] Compiling Kadr AudioTimePitchAlgorithm.swift
[26/79] Compiling Kadr AudioTrack.swift
[27/79] Compiling Kadr BackgroundMusic.swift
[28/79] Compiling Kadr ChromaKey.swift
[29/79] Compiling Kadr Filter.swift
[30/79] Compiling Kadr FilterKind.swift
[31/79] Compiling Kadr LUT.swift
[32/79] Compiling Kadr Anchor.swift
[33/79] Compiling Kadr ClipID.swift
[34/79] Compiling Kadr CropRegion.swift
[35/79] Compiling Kadr Caption.swift
[36/79] Compiling Kadr Clip.swift
[37/79] Compiling Kadr ImageClip+Color.swift
[38/79] Compiling Kadr ImageClip.swift
[39/79] Compiling Kadr SampleMedia.swift
[40/79] Compiling Kadr TitleSequence.swift
[41/79] Compiling Kadr Track.swift
[42/79] Compiling Kadr Clip+AnimationClearing.swift
[43/79] Compiling Kadr Clip+FilterID.swift
[44/79] Compiling Kadr Clip+Speed.swift
[45/79] Compiling Kadr ImageOverlay.swift
[46/79] Compiling Kadr Overlay.swift
[47/79] Compiling Kadr StickerOverlay.swift
[48/79] Compiling Kadr TextAnimation.swift
[49/79] Compiling Kadr KadrVideoCompositor.swift
[50/79] Compiling Kadr MaskCompositor.swift
[51/79] Compiling Kadr MultiInputCompositor.swift
[52/79] Compiling Kadr OverlayRenderer.swift
[53/79] Compiling Kadr PlaybackComposer.swift
[54/79] Compiling Kadr ReverseProcessor.swift
[55/79] Compiling Kadr SpeedCurveSampler.swift
[56/79] Compiling Kadr CancellationToken.swift
[57/79] Compiling Kadr CompositionBuilder.swift
[58/79] Compiling Kadr Compositor.swift
[59/79] Compiling Kadr CropCompositor.swift
[60/79] Compiling Kadr ExportEngine.swift
[61/79] Compiling Kadr FilterProcessor.swift
[62/79] Compiling Kadr ImageEncoder.swift
[63/79] Compiling Kadr ThumbnailGenerator.swift
[64/79] Compiling Kadr KadrError+LocalizedError.swift
[65/79] Compiling Kadr KadrError.swift
[66/79] Compiling Kadr ExportProgress.swift
[67/79] Compiling Kadr ExportSettings.swift
[68/79] Compiling Kadr Exporter.swift
[69/79] Compiling Kadr Preset.swift
[70/79] Compiling Kadr Transition.swift
[71/79] Compiling Kadr Video.swift
[72/79] Compiling Kadr VideoBuilder.swift
[73/79] Compiling Kadr VideoClip.swift
[74/79] Compiling Kadr AssetWriterExporter.swift
[75/79] Compiling Kadr AudioWaveform.swift
[76/79] Compiling Kadr AudioWaveformLoader.swift
[77/99] Compiling KadrBenchmarks Harness.swift
[78/99] Emitting module KadrBenchmarks
[79/99] Compiling KadrBenchmarks Fixtures.swift
[80/99] Compiling KadrBenchmarks main.swift
[80/99] Write Objects.LinkFileList
[82/99] Compiling KadrExamples V120Showcase.swift
[83/99] Compiling KadrExamples V090Showcase.swift
[84/99] Compiling KadrExamples V100Showcase.swift
[85/99] Compiling KadrExamples V140Showcase.swift
[86/99] Compiling KadrExamples V110Showcase.swift
[87/100] Compiling KadrExamples V070Showcase.swift
[88/100] Compiling KadrExamples V080Showcase.swift
[89/100] Compiling KadrExamples V040Showcase.swift
[90/100] Compiling KadrExamples V041Showcase.swift
[91/100] Compiling KadrExamples V050Showcase.swift
[92/100] Compiling KadrExamples V060Showcase.swift
[93/100] Compiling KadrExamples V1_0_0Showcase.swift
[94/100] Emitting module KadrExamples
[95/100] Compiling KadrExamples V020Showcase.swift
[96/100] Compiling KadrExamples V030Showcase.swift
[97/100] Compiling KadrExamples APIValidation.swift
[98/100] Compiling KadrExamples ContentView.swift
[98/100] Linking KadrBenchmarks
[99/100] Applying KadrBenchmarks
Build complete! (14.25s)
warning: 'spi-builder-workspace': found 7 file(s) which are unhandled; explicitly declare them as resources or exclude from the target
    /Users/admin/builder/spi-builder-workspace/Examples/SimpleEditor/Resources/sample_audio.mp3
    /Users/admin/builder/spi-builder-workspace/Examples/SimpleEditor/Resources/sample_sunset.png
    /Users/admin/builder/spi-builder-workspace/Examples/SimpleEditor/Resources/sample_forest.png
    /Users/admin/builder/spi-builder-workspace/Examples/SimpleEditor/Resources/sample_ocean.png
    /Users/admin/builder/spi-builder-workspace/Examples/SimpleEditor/Resources/sample_purple.png
    /Users/admin/builder/spi-builder-workspace/Examples/SimpleEditor/Resources/sample_video.mp4
    /Users/admin/builder/spi-builder-workspace/Examples/README.md
Build complete.
{
  "dependencies" : [
  ],
  "manifest_display_name" : "Kadr",
  "name" : "Kadr",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "ios",
      "version" : "17.0"
    },
    {
      "name" : "macos",
      "version" : "14.0"
    },
    {
      "name" : "tvos",
      "version" : "17.0"
    },
    {
      "name" : "visionos",
      "version" : "1.0"
    }
  ],
  "products" : [
    {
      "name" : "Kadr",
      "targets" : [
        "Kadr"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "KadrBenchmarks",
      "targets" : [
        "KadrBenchmarks"
      ],
      "type" : {
        "executable" : null
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "KadrTests",
      "module_type" : "SwiftTarget",
      "name" : "KadrTests",
      "path" : "Tests/KadrTests",
      "resources" : [
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Tests/KadrTests/Resources/sample.mov",
          "rule" : {
            "process" : {
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Tests/KadrTests/Resources/sample.mp3",
          "rule" : {
            "process" : {
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Tests/KadrTests/Resources/sample.png",
          "rule" : {
            "process" : {
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Tests/KadrTests/Resources/sample.wav",
          "rule" : {
            "process" : {
            }
          }
        }
      ],
      "sources" : [
        "APIValidationTests.swift",
        "AnimationClearingModifiersTests.swift",
        "AnimationTests.swift",
        "AssetWriterExportTests.swift",
        "AudioBuilderTests.swift",
        "AudioCrossfadeTests.swift",
        "AudioSpeedTests.swift",
        "AudioTrackTimingTests.swift",
        "AudioVolumeRampTests.swift",
        "AudioWaveformTests.swift",
        "CMTimeAPITests.swift",
        "CancellationTokenTests.swift",
        "CaptionTests.swift",
        "ChromaKeyComponentsTests.swift",
        "ChromaKeyTests.swift",
        "ClipAtTimeTests.swift",
        "ClipCropTests.swift",
        "ClipIDTests.swift",
        "ClipMaskTests.swift",
        "ClipVolumeTests.swift",
        "CompositorTests.swift",
        "CropTests.swift",
        "DSLTests.swift",
        "DuckingTests.swift",
        "EdgeCasesTests.swift",
        "EmptyCompositionTests.swift",
        "ExportQualityTests.swift",
        "ExportTests.swift",
        "FilterIDRestorationTests.swift",
        "FilterIDTests.swift",
        "FilterIntensityAnimationTests.swift",
        "FilterKindTests.swift",
        "FilterPixelTests.swift",
        "FilterPresetsTests.swift",
        "FilterTests.swift",
        "IntrospectionTests.swift",
        "KadrErrorLocalizedTests.swift",
        "KadrVideoCompositorTests.swift",
        "LUTTests.swift",
        "LayoutHelpersTests.swift",
        "LayoutTests.swift",
        "MoveFiltersTests.swift",
        "MultiInputCompositorTests.swift",
        "MultiTrackEngineTests.swift",
        "MultiTrackRecursiveTests.swift",
        "OverlayLayoutAnimationTests.swift",
        "OverlayTests.swift",
        "OverlayVisibilityTests.swift",
        "PreviewAPITests.swift",
        "SampleMediaTests.swift",
        "SpeedCurveTests.swift",
        "SpeedEnumTests.swift",
        "SpeedTests.swift",
        "SugarTests.swift",
        "TestEnvironment.swift",
        "TextAnimationTests.swift",
        "TextEffectsTests.swift",
        "TrackTests.swift",
        "TransformTests.swift",
        "TransitionsTests.swift",
        "V010PolishTests.swift"
      ],
      "target_dependencies" : [
        "Kadr"
      ],
      "type" : "test"
    },
    {
      "c99name" : "KadrExamples",
      "module_type" : "SwiftTarget",
      "name" : "KadrExamples",
      "path" : "Examples",
      "sources" : [
        "APIValidation.swift",
        "SimpleEditor/ContentView.swift",
        "V020Showcase.swift",
        "V030Showcase.swift",
        "V040Showcase.swift",
        "V041Showcase.swift",
        "V050Showcase.swift",
        "V060Showcase.swift",
        "V070Showcase.swift",
        "V080Showcase.swift",
        "V090Showcase.swift",
        "V100Showcase.swift",
        "V110Showcase.swift",
        "V120Showcase.swift",
        "V140Showcase.swift",
        "V1_0_0Showcase.swift"
      ],
      "target_dependencies" : [
        "Kadr"
      ],
      "type" : "library"
    },
    {
      "c99name" : "KadrBenchmarks",
      "module_type" : "SwiftTarget",
      "name" : "KadrBenchmarks",
      "path" : "Benchmarks/KadrBenchmarks",
      "product_memberships" : [
        "KadrBenchmarks"
      ],
      "sources" : [
        "Fixtures.swift",
        "Harness.swift",
        "main.swift"
      ],
      "target_dependencies" : [
        "Kadr"
      ],
      "type" : "executable"
    },
    {
      "c99name" : "Kadr",
      "module_type" : "SwiftTarget",
      "name" : "Kadr",
      "path" : "Sources/Kadr",
      "product_memberships" : [
        "Kadr",
        "KadrBenchmarks"
      ],
      "sources" : [
        "Animation/Animatable.swift",
        "Animation/Animation.swift",
        "Animation/TimingFunction.swift",
        "DSL/AudioBuilder.swift",
        "DSL/AudioTimePitchAlgorithm.swift",
        "DSL/AudioTrack.swift",
        "DSL/BackgroundMusic.swift",
        "DSL/Caption.swift",
        "DSL/Clip.swift",
        "DSL/ImageClip+Color.swift",
        "DSL/ImageClip.swift",
        "DSL/SampleMedia.swift",
        "DSL/TitleSequence.swift",
        "DSL/Track.swift",
        "DSL/Transition.swift",
        "DSL/Video.swift",
        "DSL/VideoBuilder.swift",
        "DSL/VideoClip.swift",
        "Engine/AssetWriterExporter.swift",
        "Engine/AudioWaveform.swift",
        "Engine/AudioWaveformLoader.swift",
        "Engine/CancellationToken.swift",
        "Engine/CompositionBuilder.swift",
        "Engine/Compositor.swift",
        "Engine/CropCompositor.swift",
        "Engine/ExportEngine.swift",
        "Engine/FilterProcessor.swift",
        "Engine/ImageEncoder.swift",
        "Engine/KadrVideoCompositor.swift",
        "Engine/MaskCompositor.swift",
        "Engine/MultiInputCompositor.swift",
        "Engine/OverlayRenderer.swift",
        "Engine/PlaybackComposer.swift",
        "Engine/ReverseProcessor.swift",
        "Engine/SpeedCurveSampler.swift",
        "Engine/ThumbnailGenerator.swift",
        "Errors/KadrError+LocalizedError.swift",
        "Errors/KadrError.swift",
        "Export/ExportProgress.swift",
        "Export/ExportSettings.swift",
        "Export/Exporter.swift",
        "Export/Preset.swift",
        "Filters/ChromaKey.swift",
        "Filters/Filter.swift",
        "Filters/FilterKind.swift",
        "Filters/LUT.swift",
        "Layout/Anchor.swift",
        "Layout/ClipID.swift",
        "Layout/CropRegion.swift",
        "Layout/FilterID.swift",
        "Layout/Frame.swift",
        "Layout/LayerID.swift",
        "Layout/Layout.swift",
        "Layout/Position.swift",
        "Layout/Size.swift",
        "Layout/Transform.swift",
        "Modifiers/Clip+AnimationClearing.swift",
        "Modifiers/Clip+FilterID.swift",
        "Modifiers/Clip+Speed.swift",
        "Overlays/ImageOverlay.swift",
        "Overlays/Overlay.swift",
        "Overlays/StickerOverlay.swift",
        "Overlays/TextAnimation.swift",
        "Overlays/TextOverlay.swift",
        "Overlays/TextShadow.swift",
        "Overlays/TextStroke.swift",
        "Overlays/TextStyle.swift",
        "Overlays/Watermark.swift",
        "Platform/PlatformTypes.swift",
        "Time/Timecode.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "6.0"
}
✅  Doc result (pending) reported
========================================
GenerateDocs
========================================
Generating docs at path:  $PWD/.docs/steliyanh/kadr/v1.1.0
Repository:               SteliyanH/kadr
Swift version used:       6.3
Target:                   Kadr
Extracting symbol information for 'Kadr'...
Finished extracting symbol information for 'Kadr'. (51.75s)
Building documentation for 'Kadr'...
warning: 'fadeIn(_:)' is ambiguous at '/Kadr/AudioTrack'
  --> ../DSL/AudioTrack.swift:29:19-29:29
27 |
28 |     /// Fade-in duration applied at the start of the track. `.zero` if no fade-in.
29 +     /// Set via ``fadeIn(_:)`` (CMTime or TimeInterval).
   |                             ├─suggestion: Insert '-(CMTime)' for 'func fadeIn(_ duration: CMTime) -> AudioTrack'
   |                             ╰─suggestion: Insert '-(TimeInterval)' for 'func fadeIn(_ duration: TimeInterval) -> AudioTrack'
30 |     public let fadeInDuration: CMTime
31 |
warning: 'fadeOut(_:)' is ambiguous at '/Kadr/AudioTrack'
  --> ../DSL/AudioTrack.swift:33:19-33:30
31 |
32 |     /// Fade-out duration applied at the end of the track. `.zero` if no fade-out.
33 +     /// Set via ``fadeOut(_:)`` (CMTime or TimeInterval).
   |                              ├─suggestion: Insert '-(CMTime)' for 'func fadeOut(_ duration: CMTime) -> AudioTrack'
   |                              ╰─suggestion: Insert '-(TimeInterval)' for 'func fadeOut(_ duration: TimeInterval) -> AudioTrack'
34 |     public let fadeOutDuration: CMTime
35 |
warning: 'crossfade(_:)' is ambiguous at '/Kadr/AudioTrack'
  --> ../DSL/AudioTrack.swift:57:63-57:76
55 |     /// fade in on the next — over `min(crossfadeDuration, overlapDuration)`. The
56 |     /// crossfade overrides any explicit `fadeIn` / `fadeOut` at that boundary so
57 +     /// AVFoundation doesn't see overlapping ramps. Set via ``crossfade(_:)``.
   |                                                                            ├─suggestion: Insert '-(CMTime)' for 'func crossfade(_ duration: CMTime) -> AudioTrack'
   |                                                                            ╰─suggestion: Insert '-(TimeInterval)' for 'func crossfade(_ duration: TimeInterval) -> AudioTrack'
58 |     /// Added in v0.8.
59 |     public let crossfadeDuration: CMTime?
warning: 'volumeRamp(start:end:during:)' is ambiguous at '/Kadr/AudioTrack'
  --> ../DSL/AudioTrack.swift:64:15-64:44
62 |     /// (0 = the audio's start in the composition, i.e. ``startTime``). Each ramp
63 |     /// linearly interpolates from `startVolume` to `endVolume` across `range`. Set
64 +     /// via ``volumeRamp(start:end:during:)``. Added in v0.8.3.
   |                                            ├─suggestion: Insert '-(_,_,CMTimeRange)' for 'func volumeRamp(start: Double, end: Double, during range: CMTimeRange) -> AudioTrack'
   |                                            ╰─suggestion: Insert '-(_,_,ClosedRange<TimeInterval>)' for 'func volumeRamp(start: Double, end: Double, during range: ClosedRange<TimeInterval>) -> AudioTrack'
65 |     ///
66 |     /// Engine consumers must avoid overlap between ramps and the implicit fade-in /
warning: '(any)' isn't a disambiguation for 'compositor(_:)' at '/Kadr/Video'
  --> ../DSL/Video.swift:46:63-46:69
44 |     public internal(set) var crop: CropRegion?
45 |
46 +     /// Optional multi-track blender. Set via ``compositor(_:)-(any)`` /
   |                                                               ├─suggestion: Replace '(any)' with '(([CIImage],CompositorContext)->CIImage)' for 'func compositor(_ body: @escaping @Sendable ([CIImage], CompositorContext) -> CIImage) -> Video'
   |                                                               ╰─suggestion: Replace '(any)' with '(MultiInputCompositor)' for 'func compositor(_ compositor: any MultiInputCompositor) -> Video'
47 |     /// ``compositor(_:)-(closure)``. `nil` (default) means the engine will use its
48 |     /// built-in alpha-composite later-over-earlier blender when the composition has
warning: '(closure)' isn't a disambiguation for 'compositor(_:)' at '/Kadr/Video'
  --> ../DSL/Video.swift:47:25-47:35
45 |
46 |     /// Optional multi-track blender. Set via ``compositor(_:)-(any)`` /
47 +     /// ``compositor(_:)-(closure)``. `nil` (default) means the engine will use its
   |                         ├─suggestion: Replace '(closure)' with '(([CIImage],CompositorContext)->CIImage)' for 'func compositor(_ body: @escaping @Sendable ([CIImage], CompositorContext) -> CIImage) -> Video'
   |                         ╰─suggestion: Replace '(closure)' with '(MultiInputCompositor)' for 'func compositor(_ compositor: any MultiInputCompositor) -> Video'
48 |     /// built-in alpha-composite later-over-earlier blender when the composition has
49 |     /// multiple parallel tracks.
warning: '(CMTimeRange)' isn't a disambiguation for 'compositor(_:during:)' at '/Kadr/Video'
  --> ../DSL/Video.swift:56:32-56:46
54 |     /// engine consults each frame's composition time — inside the window the user's
55 |     /// compositor runs; outside it, the default alpha-composite blender runs. Set via
56 +     /// ``compositor(_:during:)-(CMTimeRange)`` / ``compositor(_:during:)-(closedrange)``.
   |                                ├─suggestion: Replace '(CMTimeRange)' with '(_,CMTimeRange)' for 'func compositor(_ compositor: any MultiInputCompositor, during range: CMTimeRange) -> Video'
   |                                ╰─suggestion: Replace '(CMTimeRange)' with '(_,ClosedRange<TimeInterval>)' for 'func compositor(_ compositor: any MultiInputCompositor, during range: ClosedRange<TimeInterval>) -> Video'
57 |     /// Added in v0.7.
58 |     public internal(set) var compositorWindow: CMTimeRange?
warning: '(closedrange)' isn't a disambiguation for 'compositor(_:during:)' at '/Kadr/Video'
  --> ../DSL/Video.swift:56:74-56:88
54 |     /// engine consults each frame's composition time — inside the window the user's
55 |     /// compositor runs; outside it, the default alpha-composite blender runs. Set via
56 +     /// ``compositor(_:during:)-(CMTimeRange)`` / ``compositor(_:during:)-(closedrange)``.
   |                                                                          ├─suggestion: Replace '(closedrange)' with '(_,CMTimeRange)' for 'func compositor(_ compositor: any MultiInputCompositor, during range: CMTimeRange) -> Video'
   |                                                                          ╰─suggestion: Replace '(closedrange)' with '(_,ClosedRange<TimeInterval>)' for 'func compositor(_ compositor: any MultiInputCompositor, during range: ClosedRange<TimeInterval>) -> Video'
57 |     /// Added in v0.7.
58 |     public internal(set) var compositorWindow: CMTimeRange?
warning: '(CMTimeRange)' isn't a disambiguation for 'compositor(_:during:)' at '/Kadr/Video'
   --> ../DSL/Video.swift:287:48-287:62
285 |     }
286 |
287 +     /// Closure form of ``compositor(_:during:)-(CMTimeRange)``. Added in v0.7.
    |                                                ├─suggestion: Replace '(CMTimeRange)' with '(_,CMTimeRange)' for 'func compositor(_ compositor: any MultiInputCompositor, during range: CMTimeRange) -> Video'
    |                                                ╰─suggestion: Replace '(CMTimeRange)' with '(_,ClosedRange<TimeInterval>)' for 'func compositor(_ compositor: any MultiInputCompositor, during range: ClosedRange<TimeInterval>) -> Video'
288 |     public func compositor(during range: CMTimeRange, _ body: @Sendable @escaping ([CIImage], CompositorContext) -> CIImage) -> Video {
289 |         compositor(ClosureMultiInputCompositor(body: body), during: range)
warning: '(closedrange)' isn't a disambiguation for 'compositor(_:during:)' at '/Kadr/Video'
   --> ../DSL/Video.swift:292:48-292:62
290 |     }
291 |
292 +     /// Closure form of ``compositor(_:during:)-(closedrange)``. Added in v0.7.
    |                                                ├─suggestion: Replace '(closedrange)' with '(_,CMTimeRange)' for 'func compositor(_ compositor: any MultiInputCompositor, during range: CMTimeRange) -> Video'
    |                                                ╰─suggestion: Replace '(closedrange)' with '(_,ClosedRange<TimeInterval>)' for 'func compositor(_ compositor: any MultiInputCompositor, during range: ClosedRange<TimeInterval>) -> Video'
293 |     public func compositor(during range: ClosedRange<TimeInterval>, _ body: @Sendable @escaping ([CIImage], CompositorContext) -> CIImage) -> Video {
294 |         compositor(ClosureMultiInputCompositor(body: body), during: range)
warning: 'trimmed(to:)' is ambiguous at '/Kadr/VideoClip'
  --> ../DSL/VideoClip.swift:41:19-41:31
39 |
40 |     /// The active trim range in source-asset time, or `nil` if the full asset is used.
41 +     /// Set via ``trimmed(to:)`` (CMTimeRange or ClosedRange<TimeInterval>).
   |                               ├─suggestion: Insert '-(CMTimeRange)' for 'func trimmed(to range: CMTimeRange) -> VideoClip'
   |                               ╰─suggestion: Insert '-(ClosedRange<TimeInterval>)' for 'func trimmed(to range: ClosedRange<TimeInterval>) -> VideoClip'
42 |     public internal(set) var trimRange: CMTimeRange?
43 |
warning: 'trimmed(to:)' is ambiguous at '/Kadr/VideoClip'
  --> ../DSL/VideoClip.swift:71:11-71:23
69 |     /// 0.5 = half-speed, 2.0 = 2×). The engine integrates the curve into a piecewise-linear
70 |     /// time map and applies via repeated `scaleTimeRange` segments. Composes with
71 +     /// ``trimmed(to:)``: trim is applied first (selects the source range), then the speed
   |                       ├─suggestion: Insert '-(CMTimeRange)' for 'func trimmed(to range: CMTimeRange) -> VideoClip'
   |                       ╰─suggestion: Insert '-(ClosedRange<TimeInterval>)' for 'func trimmed(to range: ClosedRange<TimeInterval>) -> VideoClip'
72 |     /// curve maps that range to the timeline. Set via ``speed(curve:)``. Added in v0.9.
73 |     public internal(set) var speedCurve: Animation<Double>?
warning: 'speed(curve:)' doesn't exist at '/Kadr/VideoClip/speedCurve'
  --> ../DSL/VideoClip.swift:72:58-72:71
70 |     /// time map and applies via repeated `scaleTimeRange` segments. Composes with
71 |     /// ``trimmed(to:)``: trim is applied first (selects the source range), then the speed
72 +     /// curve maps that range to the timeline. Set via ``speed(curve:)``. Added in v0.9.
73 |     public internal(set) var speedCurve: Animation<Double>?
74 |
warning: '(any)' isn't a disambiguation for 'compositor(_:)' at '/Kadr/VideoClip'
   --> ../DSL/VideoClip.swift:102:46-102:52
100 |
101 |     /// User-supplied compositors applied to this clip in declaration order, after
102 +     /// ``filters``. Set via ``compositor(_:)-(any)`` or ``compositor(_:)-(closure)``.
    |                                              ├─suggestion: Replace '(any)' with '((CIImage,CompositorContext)->CIImage)' for 'func compositor(_ body: @escaping @Sendable (CIImage, CompositorContext) -> CIImage) -> VideoClip'
    |                                              ╰─suggestion: Replace '(any)' with '(Compositor)' for 'func compositor(_ compositor: any Compositor) -> VideoClip'
103 |     public internal(set) var compositors: [any Compositor]
104 |
warning: '(closure)' isn't a disambiguation for 'compositor(_:)' at '/Kadr/VideoClip'
   --> ../DSL/VideoClip.swift:102:74-102:84
100 |
101 |     /// User-supplied compositors applied to this clip in declaration order, after
102 +     /// ``filters``. Set via ``compositor(_:)-(any)`` or ``compositor(_:)-(closure)``.
    |                                                                          ├─suggestion: Replace '(closure)' with '((CIImage,CompositorContext)->CIImage)' for 'func compositor(_ body: @escaping @Sendable (CIImage, CompositorContext) -> CIImage) -> VideoClip'
    |                                                                          ╰─suggestion: Replace '(closure)' with '(Compositor)' for 'func compositor(_ compositor: any Compositor) -> VideoClip'
103 |     public internal(set) var compositors: [any Compositor]
104 |
warning: '(closure)' isn't a disambiguation for 'compositor(_:)' at '/Kadr/VideoClip'
  --> ../Engine/Compositor.swift:37:74-37:84
35 | /// ```
36 | ///
37 + /// For ad-hoc use, prefer the closure form on ``VideoClip/compositor(_:)-(closure)``.
   |                                                                          ├─suggestion: Replace '(closure)' with '((CIImage,CompositorContext)->CIImage)' for 'func compositor(_ body: @escaping @Sendable (CIImage, CompositorContext) -> CIImage) -> VideoClip'
   |                                                                          ╰─suggestion: Replace '(closure)' with '(Compositor)' for 'func compositor(_ compositor: any Compositor) -> VideoClip'
38 | ///
39 | /// **Constraints**
warning: 'KadrVideoCompositor' doesn't exist at '/Kadr/ThumbnailGenerator'
  --> ../Engine/ThumbnailGenerator.swift:42:19-42:38
40 | /// > the batch ``thumbnails(at:)`` stream (which drives `images(for:)` from a producer
41 | /// > task) free of actor-isolation friction. Matches the engine's other AVFoundation
42 + /// > wrappers (``KadrVideoCompositor``).
43 | public final class ThumbnailGenerator: @unchecked Sendable {
44 |
warning: 'allCases' doesn't exist at '/Kadr/FilterKind'
  --> ../Filters/FilterKind.swift:10:35-10:43
8  | /// offering "add a filter" therefore has to hard-code the menu, and every
9  | /// hard-coded menu goes stale the moment a filter is added here. This type is
10 + /// the fix: iterate ``FilterKind/allCases``, and a filter added to kadr appears
11 | /// in the menu without the consumer changing anything.
12 | ///
warning: 'rawValue' doesn't exist at '/Kadr/FilterKind/displayName'
  --> ../Filters/FilterKind.swift:71:39-71:47
69 |     /// An English name, for menus.
70 |     ///
71 +     /// kadr ships no localisation. ``rawValue`` is a stable key, so a localised
72 |     /// app can look up its own string by it and fall back to this.
73 |     public var displayName: String {
warning: 'allCases' doesn't exist at '/Kadr/FilterKind'
   --> ../Filters/FilterKind.swift:110:68-110:76
108 |     ///
109 |     /// Exhaustive by construction: a new `Filter` case fails to compile here
110 +     /// until it is given a kind, which is what keeps ``FilterKind/allCases``
111 |     /// honest.
112 |     ///
warning: Organizing 'Kadr/MultiTrackComposition' under 'Kadr/CustomCompositors' forms a cycle
Links in a "Topics section" are used to organize documentation into a hierarchy. The documentation hierarchy shouldn't contain cycles.
If this link contributed to the documentation hierarchy it would introduce this cycle:
╭─▶︎ CustomCompositors ─▶︎ MultiTrackComposition ─╮
╰───────────────────────────────────────────────╯
   --> CustomCompositors.md:100:3-100:30
98  | - ``MultiInputCompositor``
99  | - ``Filter``
100 + - <doc:MultiTrackComposition>
    | ╰─suggestion: Remove '- <doc:MultiTrackComposition>'
warning: '(any)' isn't a disambiguation for 'compositor(_:)' at '/Kadr/Video'
  --> Kadr.md:54:25-54:31
52 | - ``VideoClip/at(time:)-(TimeInterval)``
53 | - ``MultiInputCompositor``
54 + - ``Video/compositor(_:)-(any)``
   |                         ├─suggestion: Replace '(any)' with '(([CIImage],CompositorContext)->CIImage)' for 'func compositor(_ body: @escaping @Sendable ([CIImage], CompositorContext) -> CIImage) -> Video'
   |                         ╰─suggestion: Replace '(any)' with '(MultiInputCompositor)' for 'func compositor(_ compositor: any MultiInputCompositor) -> Video'
55 | - ``Video/compositor(_:)-(closure)``
56 |
warning: '(closure)' isn't a disambiguation for 'compositor(_:)' at '/Kadr/Video'
  --> Kadr.md:55:25-55:35
53 | - ``MultiInputCompositor``
54 | - ``Video/compositor(_:)-(any)``
55 + - ``Video/compositor(_:)-(closure)``
   |                         ├─suggestion: Replace '(closure)' with '(([CIImage],CompositorContext)->CIImage)' for 'func compositor(_ body: @escaping @Sendable ([CIImage], CompositorContext) -> CIImage) -> Video'
   |                         ╰─suggestion: Replace '(closure)' with '(MultiInputCompositor)' for 'func compositor(_ compositor: any MultiInputCompositor) -> Video'
56 |
57 | ### Audio
warning: '(any)' isn't a disambiguation for 'compositor(_:)' at '/Kadr/VideoClip'
   --> Kadr.md:102:29-102:35
100 | - ``Compositor``
101 | - ``CompositorContext``
102 + - ``VideoClip/compositor(_:)-(any)``
    |                             ├─suggestion: Replace '(any)' with '((CIImage,CompositorContext)->CIImage)' for 'func compositor(_ body: @escaping @Sendable (CIImage, CompositorContext) -> CIImage) -> VideoClip'
    |                             ╰─suggestion: Replace '(any)' with '(Compositor)' for 'func compositor(_ compositor: any Compositor) -> VideoClip'
103 | - ``VideoClip/compositor(_:)-(closure)``
104 |
warning: '(closure)' isn't a disambiguation for 'compositor(_:)' at '/Kadr/VideoClip'
   --> Kadr.md:103:29-103:39
101 | - ``CompositorContext``
102 | - ``VideoClip/compositor(_:)-(any)``
103 + - ``VideoClip/compositor(_:)-(closure)``
    |                             ├─suggestion: Replace '(closure)' with '((CIImage,CompositorContext)->CIImage)' for 'func compositor(_ body: @escaping @Sendable (CIImage, CompositorContext) -> CIImage) -> VideoClip'
    |                             ╰─suggestion: Replace '(closure)' with '(Compositor)' for 'func compositor(_ compositor: any Compositor) -> VideoClip'
104 |
105 | ### Preview & Introspection (v0.4+)
warning: Organizing 'Kadr/Slideshows' under 'Kadr/KeyframeAnimation' forms a cycle
Links in a "Topics section" are used to organize documentation into a hierarchy. The documentation hierarchy shouldn't contain cycles.
If this link contributed to the documentation hierarchy it would introduce this cycle:
╭─▶︎ KeyframeAnimation ─▶︎ Slideshows ─╮
╰────────────────────────────────────╯
   --> KeyframeAnimation.md:103:3-103:19
101 | - ``Transform``
102 | - ``FilterID``
103 + - <doc:Slideshows>
    | ╰─suggestion: Remove '- <doc:Slideshows>'
warning: 'at(time:)' doesn't exist at '/Kadr/Clip'
  --> MultiTrackComposition.md:16:8-16:17
14 | ## One clip, placed by time
15 |
16 + ``Clip/at(time:)`` pins a clip to an absolute composition time. It leaves the
17 | chain — the clips around it behave as though it were not there:
18 |
warning: '7m1ip' isn't a disambiguation for 'clipID' at '/Kadr/Clip'
  --> ../Layout/ClipID.swift:25:49-25:55
23 | ///
24 | /// `Transition` deliberately doesn't carry a `ClipID` — it sits between media clips
25 + /// and isn't an addressable unit. ``Clip/clipID-7m1ip`` returns `nil` for transitions.
   |                                                 ├─suggestion: Remove '-7m1ip' for 'var clipID: ClipID? { get }'
   |                                                 ╰─suggestion: Replace '7m1ip' with '8c9sq' for 'var clipID: ClipID? { get }'
26 | public struct ClipID: Hashable, Sendable, ExpressibleByStringLiteral, CustomStringConvertible {
27 |     /// The wrapped string identifier.
warning: 'speed(curve:)' doesn't exist at '/Kadr/VideoClip'
 --> ../Modifiers/Clip+Speed.swift:4:58-4:71
2 |
3 | /// Canonical representation of a clip's playback speed. v0.11 collapse of
4 + /// the two-method ``VideoClip/speed(_:)`` / ``VideoClip/speed(curve:)``
  |                                                          ├─suggestion: Replace 'speed(curve:)' with 'speedCurve'
  |                                                          ╰─suggestion: Replace 'speed(curve:)' with 'speed(_:)'
5 | /// pair into a single enum, making the previously-documented
6 | /// mutual-exclusion compile-time-checked.
warning: 'visible(during:)-(CMTimeRange)' doesn't exist at '/Kadr/Overlay/visibilityRange'
  --> ../Overlays/Overlay.swift:31:11-31:41
29 |     /// Composition time range during which this overlay is visible. `nil` (the default)
30 |     /// means the overlay is visible for the entire composition. Set via
31 +     /// ``visible(during:)-(CMTimeRange)`` or ``visible(during:)-(ClosedRange<TimeInterval>)``
32 |     /// on the concrete overlay types.
33 |     ///
warning: 'visible(during:)-(ClosedRange<TimeInterval>)' doesn't exist at '/Kadr/Overlay/visibilityRange'
  --> ../Overlays/Overlay.swift:31:49-31:93
29 |     /// Composition time range during which this overlay is visible. `nil` (the default)
30 |     /// means the overlay is visible for the entire composition. Set via
31 +     /// ``visible(during:)-(CMTimeRange)`` or ``visible(during:)-(ClosedRange<TimeInterval>)``
32 |     /// on the concrete overlay types.
33 |     ///
warning: 'Watermark' doesn't exist at '/Kadr/TextOverlay/positionAnimation'
  --> ../Overlays/Overlay.swift:52:31-52:40
50 |
51 |     /// Default: nil. ``ImageOverlay`` and ``StickerOverlay`` override with storage;
52 +     /// ``TextOverlay`` and ``Watermark`` keep the default in v0.8.1.
53 |     var positionAnimation: Animation<Position>? { nil }
54 |
Finished building documentation for 'Kadr' (0.85s)
Generated documentation archive at:
  /Users/admin/builder/spi-builder-workspace/.docs/steliyanh/kadr/v1.1.0
Fetching https://github.com/swiftlang/swift-docc-plugin
[1/2345] Fetching swift-docc-plugin
Fetched https://github.com/swiftlang/swift-docc-plugin from cache (1.37s)
Computing version for https://github.com/swiftlang/swift-docc-plugin
Computed https://github.com/swiftlang/swift-docc-plugin at 1.5.0 (3.64s)
Fetching https://github.com/swiftlang/swift-docc-symbolkit
[1/3817] Fetching swift-docc-symbolkit
Fetched https://github.com/swiftlang/swift-docc-symbolkit from cache (1.36s)
Computing version for https://github.com/swiftlang/swift-docc-symbolkit
Computed https://github.com/swiftlang/swift-docc-symbolkit at 1.0.0 (2.06s)
Creating working copy for https://github.com/swiftlang/swift-docc-plugin
Working copy of https://github.com/swiftlang/swift-docc-plugin resolved at 1.5.0
Creating working copy for https://github.com/swiftlang/swift-docc-symbolkit
Working copy of https://github.com/swiftlang/swift-docc-symbolkit resolved at 1.0.0
Building for debugging...
[0/8] Write snippet-extract-tool-entitlement.plist
[1/8] Write sources
[4/8] Write swift-version-69A768CDF2A0BEE1.txt
[6/54] Emitting module SymbolKit
[7/58] Compiling SymbolKit Names.swift
[8/58] Compiling SymbolKit SPI.swift
[9/58] Compiling SymbolKit Snippet.swift
[10/58] Compiling SymbolKit Extension.swift
[11/58] Compiling SymbolKit DeclarationFragments.swift
[12/58] Compiling SymbolKit Fragment.swift
[13/58] Compiling SymbolKit FragmentKind.swift
[14/58] Compiling SymbolKit FunctionParameter.swift
[15/58] Compiling SymbolKit FunctionSignature.swift
[16/58] Compiling Snippets SnippetParser.swift
[17/58] Compiling Snippets SnippetLanguage.swift
[18/58] Compiling Snippets Snippet.swift
[19/58] Emitting module Snippets
[20/58] Compiling SymbolKit GenericConstraint.swift
[21/58] Compiling SymbolKit GenericParameter.swift
[22/58] Compiling SymbolKit Generics.swift
[23/58] Compiling SymbolKit Namespace.swift
[24/58] Compiling SymbolKit Identifier.swift
[25/58] Compiling SymbolKit KindIdentifier.swift
[26/58] Compiling SymbolKit Location.swift
[27/58] Compiling SymbolKit Mutability.swift
[28/58] Compiling SymbolKit SourceRange.swift
[29/58] Compiling SymbolKit Metadata.swift
[30/58] Compiling SymbolKit Module.swift
[31/58] Compiling SymbolKit OperatingSystem.swift
[32/58] Compiling SymbolKit Platform.swift
[33/58] Compiling SymbolKit Relationship.swift
[34/58] Compiling SymbolKit RelationshipKind.swift
[35/58] Compiling SymbolKit SourceOrigin.swift
[36/58] Compiling SymbolKit GenericConstraints.swift
[37/58] Compiling SymbolKit Swift.swift
[38/58] Compiling SymbolKit Mixin+Equals.swift
[39/58] Compiling SymbolKit Mixin+Hash.swift
[40/58] Compiling SymbolKit Mixin.swift
[41/58] Compiling SymbolKit LineList.swift
[42/58] Compiling SymbolKit Position.swift
[43/58] Compiling SymbolKit SemanticVersion.swift
[44/58] Compiling SymbolKit AccessControl.swift
[45/58] Compiling SymbolKit Availability.swift
[46/58] Compiling SymbolKit AvailabilityItem.swift
[47/58] Compiling SymbolKit Domain.swift
[48/58] Compiling SymbolKit Symbol.swift
[49/58] Compiling SymbolKit SymbolKind.swift
[50/58] Compiling SymbolKit SymbolGraph.swift
[51/58] Compiling SymbolKit GraphCollector.swift
[52/58] Compiling SymbolKit UnifiedSymbol+Encodable.swift
[53/58] Compiling SymbolKit UnifiedSymbol.swift
[54/58] Compiling SymbolKit UnifiedSymbolGraph+Encodable.swift
[55/58] Compiling SymbolKit UnifiedSymbolGraph.swift
[56/62] Compiling snippet_extract SymbolGraph+Snippet.swift
[57/62] Compiling snippet_extract SnippetBuildCommand.swift
[58/62] Emitting module snippet_extract
[59/62] Compiling snippet_extract URL+Status.swift
[59/62] Write Objects.LinkFileList
[60/62] Linking snippet-extract-tool
[61/62] Applying snippet-extract-tool
Build of product 'snippet-extract' complete! (3.62s)
Building for debugging...
[0/1] Write swift-version-69A768CDF2A0BEE1.txt
Build of target: 'Kadr' complete! (0.27s)
    1534
11	/Users/admin/builder/spi-builder-workspace/.docs/steliyanh/kadr/v1.1.0
✅  Doc result (uploading) reported
========================================
SyncDocs
========================================
Doc archive source directory: $PWD/.docs/steliyanh/kadr/v1.1.0
File count: 1534
Doc size:   11.0MB
Preparing doc bundle ...
Using presigned URL upload - AWS credentials not required
Uploading -steliyanh-kadr-v1.1.0-8328d8aa.zip to presigned URL
Starting upload of 2356521 bytes...
Upload completed successfully
Done.