The Swift Package Index logo.Swift Package Index

Build Information

Successful build of Kadr, reference v0.9.2 (4f20c5), with Swift 6.3 for macOS (SPM) on 30 Apr 2026 06:06:33 UTC.

Swift 6 data race errors: 0

Build Command

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

Build Log

========================================
RunAll
========================================
Builder version: 4.70.0
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/SteliyanH/kadr.git
Reference: v0.9.2
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/SteliyanH/kadr
 * tag               v0.9.2     -> FETCH_HEAD
HEAD is now at 4f20c51 docs: v0.9.2 release prep — CHANGELOG, ROADMAP
Cloned https://github.com/SteliyanH/kadr.git
Revision (git rev-parse @):
4f20c51afb814b4d07f4085472b4e8c082ec2b98
SPI manifest file found: $PWD/.spi.yml
SUCCESS checkout https://github.com/SteliyanH/kadr.git at v0.9.2
========================================
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/1194] Fetching kadr
Fetched https://github.com/SteliyanH/kadr.git from cache (3.69s)
Creating working copy for https://github.com/SteliyanH/kadr.git
Working copy of https://github.com/SteliyanH/kadr.git resolved at v0.9.2 (4f20c51)
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.4.0.app xcrun swift build --arch arm64
Building for debugging...
[0/2] Write sources
[1/2] Write swift-version--6988338F2F200930.txt
[3/54] Emitting module Kadr
[4/59] Compiling Kadr LayerID.swift
[5/59] Compiling Kadr Layout.swift
[6/59] Compiling Kadr Position.swift
[7/59] Compiling Kadr Size.swift
[8/59] Compiling Kadr Transform.swift
[9/59] Compiling Kadr LUT.swift
[10/59] Compiling Kadr Anchor.swift
[11/59] Compiling Kadr ClipID.swift
[12/59] Compiling Kadr CropRegion.swift
[13/59] Compiling Kadr Frame.swift
[14/59] Compiling Kadr KadrError.swift
[15/59] Compiling Kadr ExportProgress.swift
[16/59] Compiling Kadr Exporter.swift
[17/59] Compiling Kadr Preset.swift
[18/59] Compiling Kadr ChromaKey.swift
[19/59] Compiling Kadr Filter.swift
[20/59] Compiling Kadr TextOverlay.swift
[21/59] Compiling Kadr TextStyle.swift
[22/59] Compiling Kadr Watermark.swift
[23/59] Compiling Kadr PlatformTypes.swift
[24/59] Compiling Kadr Timecode.swift
[25/59] Compiling Kadr Clip+Speed.swift
[26/59] Compiling Kadr ImageOverlay.swift
[27/59] Compiling Kadr Overlay.swift
[28/59] Compiling Kadr StickerOverlay.swift
[29/59] Compiling Kadr TextAnimation.swift
[30/59] Compiling Kadr Animatable.swift
[31/59] Compiling Kadr Animation.swift
[32/59] Compiling Kadr TimingFunction.swift
[33/59] Compiling Kadr AudioBuilder.swift
[34/59] Compiling Kadr AudioTimePitchAlgorithm.swift
[35/59] Compiling Kadr AudioTrack.swift
[36/59] Compiling Kadr Transition.swift
[37/59] Compiling Kadr Video.swift
[38/59] Compiling Kadr VideoBuilder.swift
[39/59] Compiling Kadr VideoClip.swift
[40/59] Compiling Kadr CancellationToken.swift
[41/59] Compiling Kadr CompositionBuilder.swift
[42/59] Compiling Kadr BackgroundMusic.swift
[43/59] Compiling Kadr Caption.swift
[44/59] Compiling Kadr Clip.swift
[45/59] Compiling Kadr ImageClip.swift
[46/59] Compiling Kadr TitleSequence.swift
[47/59] Compiling Kadr Track.swift
[48/59] Compiling Kadr Compositor.swift
/Users/admin/builder/spi-builder-workspace/Sources/Kadr/Engine/FilterProcessor.swift:52:35: warning: reference to captured var 'animations' in concurrently-executing code [#SendableClosureCaptures]
50 |                     : request.compositionTime
51 |                 for (i, filter) in filters.enumerated() {
52 |                     if let anim = animations[i],
   |                                   `- warning: reference to captured var 'animations' in concurrently-executing code [#SendableClosureCaptures]
53 |                        let scalar = anim.value(at: clipRelativeTime) {
54 |                         image = filter.withScalar(scalar).apply(to: image)
[#SendableClosureCaptures]: <https://docs.swift.org/compiler/documentation/diagnostics/sendable-closure-captures>
[49/59] Compiling Kadr CropCompositor.swift
/Users/admin/builder/spi-builder-workspace/Sources/Kadr/Engine/FilterProcessor.swift:52:35: warning: reference to captured var 'animations' in concurrently-executing code [#SendableClosureCaptures]
50 |                     : request.compositionTime
51 |                 for (i, filter) in filters.enumerated() {
52 |                     if let anim = animations[i],
   |                                   `- warning: reference to captured var 'animations' in concurrently-executing code [#SendableClosureCaptures]
53 |                        let scalar = anim.value(at: clipRelativeTime) {
54 |                         image = filter.withScalar(scalar).apply(to: image)
[#SendableClosureCaptures]: <https://docs.swift.org/compiler/documentation/diagnostics/sendable-closure-captures>
[50/59] Compiling Kadr ExportEngine.swift
/Users/admin/builder/spi-builder-workspace/Sources/Kadr/Engine/FilterProcessor.swift:52:35: warning: reference to captured var 'animations' in concurrently-executing code [#SendableClosureCaptures]
50 |                     : request.compositionTime
51 |                 for (i, filter) in filters.enumerated() {
52 |                     if let anim = animations[i],
   |                                   `- warning: reference to captured var 'animations' in concurrently-executing code [#SendableClosureCaptures]
53 |                        let scalar = anim.value(at: clipRelativeTime) {
54 |                         image = filter.withScalar(scalar).apply(to: image)
[#SendableClosureCaptures]: <https://docs.swift.org/compiler/documentation/diagnostics/sendable-closure-captures>
[51/59] Compiling Kadr FilterProcessor.swift
/Users/admin/builder/spi-builder-workspace/Sources/Kadr/Engine/FilterProcessor.swift:52:35: warning: reference to captured var 'animations' in concurrently-executing code [#SendableClosureCaptures]
50 |                     : request.compositionTime
51 |                 for (i, filter) in filters.enumerated() {
52 |                     if let anim = animations[i],
   |                                   `- warning: reference to captured var 'animations' in concurrently-executing code [#SendableClosureCaptures]
53 |                        let scalar = anim.value(at: clipRelativeTime) {
54 |                         image = filter.withScalar(scalar).apply(to: image)
[#SendableClosureCaptures]: <https://docs.swift.org/compiler/documentation/diagnostics/sendable-closure-captures>
[52/59] Compiling Kadr ImageEncoder.swift
/Users/admin/builder/spi-builder-workspace/Sources/Kadr/Engine/FilterProcessor.swift:52:35: warning: reference to captured var 'animations' in concurrently-executing code [#SendableClosureCaptures]
50 |                     : request.compositionTime
51 |                 for (i, filter) in filters.enumerated() {
52 |                     if let anim = animations[i],
   |                                   `- warning: reference to captured var 'animations' in concurrently-executing code [#SendableClosureCaptures]
53 |                        let scalar = anim.value(at: clipRelativeTime) {
54 |                         image = filter.withScalar(scalar).apply(to: image)
[#SendableClosureCaptures]: <https://docs.swift.org/compiler/documentation/diagnostics/sendable-closure-captures>
[53/59] Compiling Kadr KadrVideoCompositor.swift
/Users/admin/builder/spi-builder-workspace/Sources/Kadr/Engine/FilterProcessor.swift:52:35: warning: reference to captured var 'animations' in concurrently-executing code [#SendableClosureCaptures]
50 |                     : request.compositionTime
51 |                 for (i, filter) in filters.enumerated() {
52 |                     if let anim = animations[i],
   |                                   `- warning: reference to captured var 'animations' in concurrently-executing code [#SendableClosureCaptures]
53 |                        let scalar = anim.value(at: clipRelativeTime) {
54 |                         image = filter.withScalar(scalar).apply(to: image)
[#SendableClosureCaptures]: <https://docs.swift.org/compiler/documentation/diagnostics/sendable-closure-captures>
[54/59] Compiling Kadr MaskCompositor.swift
[55/59] Compiling Kadr MultiInputCompositor.swift
[56/59] Compiling Kadr OverlayRenderer.swift
[57/59] Compiling Kadr PlaybackComposer.swift
[58/59] Compiling Kadr ReverseProcessor.swift
[59/59] Compiling Kadr SpeedCurveSampler.swift
Build complete! (12.23s)
Build complete.
{
  "dependencies" : [
  ],
  "manifest_display_name" : "Kadr",
  "name" : "Kadr",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "ios",
      "version" : "16.0"
    },
    {
      "name" : "macos",
      "version" : "13.0"
    },
    {
      "name" : "tvos",
      "version" : "16.0"
    },
    {
      "name" : "visionos",
      "version" : "1.0"
    }
  ],
  "products" : [
    {
      "name" : "Kadr",
      "targets" : [
        "Kadr"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "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",
        "AnimationTests.swift",
        "AudioCrossfadeTests.swift",
        "AudioSpeedTests.swift",
        "AudioTrackTimingTests.swift",
        "AudioVolumeRampTests.swift",
        "CMTimeAPITests.swift",
        "CaptionTests.swift",
        "ChromaKeyTests.swift",
        "ClipAtTimeTests.swift",
        "ClipCropTests.swift",
        "ClipIDTests.swift",
        "ClipMaskTests.swift",
        "CompositorTests.swift",
        "CropTests.swift",
        "DSLTests.swift",
        "DuckingTests.swift",
        "EdgeCasesTests.swift",
        "ExportTests.swift",
        "FilterIntensityAnimationTests.swift",
        "FilterPresetsTests.swift",
        "FilterTests.swift",
        "IntrospectionTests.swift",
        "KadrVideoCompositorTests.swift",
        "LUTTests.swift",
        "LayoutHelpersTests.swift",
        "LayoutTests.swift",
        "MultiInputCompositorTests.swift",
        "MultiTrackEngineTests.swift",
        "MultiTrackRecursiveTests.swift",
        "OverlayLayoutAnimationTests.swift",
        "OverlayTests.swift",
        "OverlayVisibilityTests.swift",
        "PreviewAPITests.swift",
        "SpeedCurveTests.swift",
        "SpeedTests.swift",
        "SugarTests.swift",
        "TextAnimationTests.swift",
        "TrackTests.swift",
        "TransformTests.swift",
        "TransitionsTests.swift"
      ],
      "target_dependencies" : [
        "Kadr"
      ],
      "type" : "test"
    },
    {
      "c99name" : "Kadr",
      "module_type" : "SwiftTarget",
      "name" : "Kadr",
      "path" : "Sources/Kadr",
      "product_memberships" : [
        "Kadr"
      ],
      "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.swift",
        "DSL/TitleSequence.swift",
        "DSL/Track.swift",
        "DSL/Transition.swift",
        "DSL/Video.swift",
        "DSL/VideoBuilder.swift",
        "DSL/VideoClip.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",
        "Errors/KadrError.swift",
        "Export/ExportProgress.swift",
        "Export/Exporter.swift",
        "Export/Preset.swift",
        "Filters/ChromaKey.swift",
        "Filters/Filter.swift",
        "Filters/LUT.swift",
        "Layout/Anchor.swift",
        "Layout/ClipID.swift",
        "Layout/CropRegion.swift",
        "Layout/Frame.swift",
        "Layout/LayerID.swift",
        "Layout/Layout.swift",
        "Layout/Position.swift",
        "Layout/Size.swift",
        "Layout/Transform.swift",
        "Modifiers/Clip+Speed.swift",
        "Overlays/ImageOverlay.swift",
        "Overlays/Overlay.swift",
        "Overlays/StickerOverlay.swift",
        "Overlays/TextAnimation.swift",
        "Overlays/TextOverlay.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/v0.9.2
Repository:               SteliyanH/kadr
Swift version used:       6.3
Target:                   Kadr
Extracting symbol information for 'Kadr'...
Finished extracting symbol information for 'Kadr'. (45.21s)
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 let 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:61:32-61:46
59 |     /// engine consults each frame's composition time — inside the window the user's
60 |     /// compositor runs; outside it, the default alpha-composite blender runs. Set via
61 +     /// ``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'
62 |     /// Added in v0.7.
63 |     public let compositorWindow: CMTimeRange?
warning: '(closedrange)' isn't a disambiguation for 'compositor(_:during:)' at '/Kadr/Video'
  --> ../DSL/Video.swift:61:74-61:88
59 |     /// engine consults each frame's composition time — inside the window the user's
60 |     /// compositor runs; outside it, the default alpha-composite blender runs. Set via
61 +     /// ``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'
62 |     /// Added in v0.7.
63 |     public let compositorWindow: CMTimeRange?
warning: '(CMTimeRange)' isn't a disambiguation for 'compositor(_:during:)' at '/Kadr/Video'
   --> ../DSL/Video.swift:254:48-254:62
252 |     }
253 |
254 +     /// 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'
255 |     public func compositor(during range: CMTimeRange, _ body: @Sendable @escaping ([CIImage], CompositorContext) -> CIImage) -> Video {
256 |         compositor(ClosureMultiInputCompositor(body: body), during: range)
warning: '(closedrange)' isn't a disambiguation for 'compositor(_:during:)' at '/Kadr/Video'
   --> ../DSL/Video.swift:259:48-259:62
257 |     }
258 |
259 +     /// 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'
260 |     public func compositor(during range: ClosedRange<TimeInterval>, _ body: @Sendable @escaping ([CIImage], CompositorContext) -> CIImage) -> Video {
261 |         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 let trimRange: CMTimeRange?
43 |
warning: 'trimmed(to:)' is ambiguous at '/Kadr/VideoClip'
  --> ../DSL/VideoClip.swift:60:11-60:23
58 |     /// 0.5 = half-speed, 2.0 = 2×). The engine integrates the curve into a piecewise-linear
59 |     /// time map and applies via repeated `scaleTimeRange` segments. Composes with
60 +     /// ``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'
61 |     /// curve maps that range to the timeline. Set via ``speed(curve:)``. Added in v0.9.
62 |     public let speedCurve: Animation<Double>?
warning: '(any)' isn't a disambiguation for 'compositor(_:)' at '/Kadr/VideoClip'
  --> ../DSL/VideoClip.swift:76:46-76:52
74 |
75 |     /// User-supplied compositors applied to this clip in declaration order, after
76 +     /// ``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'
77 |     public let compositors: [any Compositor]
78 |
warning: '(closure)' isn't a disambiguation for 'compositor(_:)' at '/Kadr/VideoClip'
  --> ../DSL/VideoClip.swift:76:74-76:84
74 |
75 |     /// User-supplied compositors applied to this clip in declaration order, after
76 +     /// ``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'
77 |     public let compositors: [any Compositor]
78 |
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: '(any)' isn't a disambiguation for 'compositor(_:)' at '/Kadr/Video'
  --> Kadr.md:46:25-46:31
44 | - ``VideoClip/at(time:)-(TimeInterval)``
45 | - ``MultiInputCompositor``
46 + - ``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'
47 | - ``Video/compositor(_:)-(closure)``
48 |
warning: '(closure)' isn't a disambiguation for 'compositor(_:)' at '/Kadr/Video'
  --> Kadr.md:47:25-47:35
45 | - ``MultiInputCompositor``
46 | - ``Video/compositor(_:)-(any)``
47 + - ``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'
48 |
49 | ### Audio
warning: '(any)' isn't a disambiguation for 'compositor(_:)' at '/Kadr/VideoClip'
  --> Kadr.md:92:29-92:35
90 | - ``Compositor``
91 | - ``CompositorContext``
92 + - ``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'
93 | - ``VideoClip/compositor(_:)-(closure)``
94 |
warning: '(closure)' isn't a disambiguation for 'compositor(_:)' at '/Kadr/VideoClip'
  --> Kadr.md:93:29-93:39
91 | - ``CompositorContext``
92 | - ``VideoClip/compositor(_:)-(any)``
93 + - ``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'
94 |
95 | ### Preview & Introspection (v0.4+)
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: 'trimmed(to:)' is ambiguous at '/Kadr/VideoClip'
  --> ../Modifiers/Clip+Speed.swift:38:11-38:23
36 |     /// Animation timing is **clip-relative** to the trim range: `.at(0.0, ...)` is the
37 |     /// first frame after trim, `.at(trimRange.duration, ...)` is the last. Composes with
38 +     /// ``trimmed(to:)`` (trim selects the source range; the curve maps that range to the
   |                       ├─suggestion: Insert '-(CMTimeRange)' for 'func trimmed(to range: CMTimeRange) -> VideoClip'
   |                       ╰─suggestion: Insert '-(ClosedRange<TimeInterval>)' for 'func trimmed(to range: ClosedRange<TimeInterval>) -> VideoClip'
39 |     /// timeline), ``filter(_:animation:)``, ``transform(_:animation:)``, and
40 |     /// ``opacity(_:animation:)``. Audio (when not muted / replaced) follows the same
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.87s)
Generated documentation archive at:
  /Users/admin/builder/spi-builder-workspace/.docs/steliyanh/kadr/v0.9.2
Fetching https://github.com/swiftlang/swift-docc-plugin
[1/2287] Fetching swift-docc-plugin
Fetched https://github.com/swiftlang/swift-docc-plugin from cache (1.29s)
Computing version for https://github.com/swiftlang/swift-docc-plugin
Computed https://github.com/swiftlang/swift-docc-plugin at 1.5.0 (3.62s)
Fetching https://github.com/swiftlang/swift-docc-symbolkit
[1/3679] Fetching swift-docc-symbolkit
Fetched https://github.com/swiftlang/swift-docc-symbolkit from cache (1.23s)
Computing version for https://github.com/swiftlang/swift-docc-symbolkit
Computed https://github.com/swiftlang/swift-docc-symbolkit at 1.0.0 (2.14s)
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
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
Building for debugging...
[0/8] Write sources
[2/8] Write snippet-extract-tool-entitlement.plist
[2/8] Write sources
[4/8] Write swift-version--6988338F2F200930.txt
[6/54] Emitting module SymbolKit
[7/58] Compiling SymbolKit GenericConstraint.swift
[8/58] Compiling SymbolKit GenericParameter.swift
[9/58] Compiling SymbolKit Generics.swift
[10/58] Compiling SymbolKit Namespace.swift
[11/58] Compiling SymbolKit Relationship.swift
[12/58] Compiling SymbolKit RelationshipKind.swift
[13/58] Compiling SymbolKit SourceOrigin.swift
[14/58] Compiling SymbolKit GenericConstraints.swift
[15/58] Compiling SymbolKit Swift.swift
[16/58] Compiling SymbolKit Mixin+Equals.swift
[17/58] Compiling SymbolKit Mixin+Hash.swift
[18/58] Compiling SymbolKit Mixin.swift
[19/58] Compiling SymbolKit LineList.swift
[20/58] Compiling SymbolKit Position.swift
[21/58] Emitting module Snippets
[22/58] Compiling Snippets SnippetParser.swift
[23/58] Compiling Snippets Snippet.swift
[24/58] Compiling Snippets SnippetLanguage.swift
[25/58] Compiling SymbolKit Symbol.swift
[26/58] Compiling SymbolKit SymbolKind.swift
[27/58] Compiling SymbolKit SymbolGraph.swift
[28/58] Compiling SymbolKit GraphCollector.swift
[29/58] Compiling SymbolKit Names.swift
[30/58] Compiling SymbolKit SPI.swift
[31/58] Compiling SymbolKit Snippet.swift
[32/58] Compiling SymbolKit Extension.swift
[33/58] Compiling SymbolKit SemanticVersion.swift
[34/58] Compiling SymbolKit AccessControl.swift
[35/58] Compiling SymbolKit Availability.swift
[36/58] Compiling SymbolKit AvailabilityItem.swift
[37/58] Compiling SymbolKit Domain.swift
[38/58] Compiling SymbolKit DeclarationFragments.swift
[39/58] Compiling SymbolKit Fragment.swift
[40/58] Compiling SymbolKit FragmentKind.swift
[41/58] Compiling SymbolKit FunctionParameter.swift
[42/58] Compiling SymbolKit FunctionSignature.swift
[43/58] Compiling SymbolKit Identifier.swift
[44/58] Compiling SymbolKit KindIdentifier.swift
[45/58] Compiling SymbolKit Location.swift
[46/58] Compiling SymbolKit Mutability.swift
[47/58] Compiling SymbolKit SourceRange.swift
[48/58] Compiling SymbolKit Metadata.swift
[49/58] Compiling SymbolKit Module.swift
[50/58] Compiling SymbolKit OperatingSystem.swift
[51/58] Compiling SymbolKit Platform.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 URL+Status.swift
[58/62] Emitting module snippet_extract
[59/62] Compiling snippet_extract SnippetBuildCommand.swift
[59/62] Write Objects.LinkFileList
[60/62] Linking snippet-extract-tool
[61/62] Applying snippet-extract-tool
Build of product 'snippet-extract' complete! (4.46s)
Building for debugging...
[0/1] Write swift-version--6988338F2F200930.txt
Build of target: 'Kadr' complete! (0.25s)
    1256
9	/Users/admin/builder/spi-builder-workspace/.docs/steliyanh/kadr/v0.9.2
✅  Doc result (uploading) reported
========================================
SyncDocs
========================================
Doc archive source directory: $PWD/.docs/steliyanh/kadr/v0.9.2
File count: 1256
Doc size:   9.0MB
Preparing doc bundle ...
Uploading prod-steliyanh-kadr-v0.9.2-172c2164.zip to s3://spi-docs-inbox/prod-steliyanh-kadr-v0.9.2-172c2164.zip
Copying... [10%]
Copying... [20%]
Copying... [30%]
Copying... [40%]
Copying... [51%]
Copying... [61%]
Copying... [71%]
Copying... [81%]
Copying... [91%]
Copying... [100%]
Done.