Build Information
Successful build of Kadr, reference main (7e655b), with Swift 6.3 for macOS (SPM) on 1 May 2026 09:53:57 UTC.
Swift 6 data race errors: 0
Build Command
env DEVELOPER_DIR=/Applications/Xcode-26.4.0.app xcrun swift build --arch arm64Build Log
========================================
RunAll
========================================
Builder version: 4.70.0
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/SteliyanH/kadr.git
Reference: main
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/SteliyanH/kadr
* branch main -> FETCH_HEAD
* [new branch] main -> origin/main
HEAD is now at 7e655bb docs: README — reference all three adapter packages, document v0.9 cycle
Cloned https://github.com/SteliyanH/kadr.git
Revision (git rev-parse @):
7e655bb1570f71884eebf2fe273b52119b825622
SPI manifest file found: $PWD/.spi.yml
SUCCESS checkout https://github.com/SteliyanH/kadr.git at main
========================================
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/1199] Fetching kadr
Fetched https://github.com/SteliyanH/kadr.git from cache (2.27s)
Creating working copy for https://github.com/SteliyanH/kadr.git
Working copy of https://github.com/SteliyanH/kadr.git resolved at main (7e655bb)
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 TextOverlay.swift
[15/59] Compiling Kadr TextStyle.swift
[16/59] Compiling Kadr Watermark.swift
[17/59] Compiling Kadr PlatformTypes.swift
[18/59] Compiling Kadr Timecode.swift
[19/59] Compiling Kadr Clip+Speed.swift
[20/59] Compiling Kadr ImageOverlay.swift
[21/59] Compiling Kadr Overlay.swift
[22/59] Compiling Kadr StickerOverlay.swift
[23/59] Compiling Kadr TextAnimation.swift
[24/59] Compiling Kadr KadrError.swift
[25/59] Compiling Kadr ExportProgress.swift
[26/59] Compiling Kadr Exporter.swift
[27/59] Compiling Kadr Preset.swift
[28/59] Compiling Kadr ChromaKey.swift
[29/59] Compiling Kadr Filter.swift
[30/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>
[31/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>
[32/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>
[33/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>
[34/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>
[35/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>
[36/59] Compiling Kadr Animatable.swift
[37/59] Compiling Kadr Animation.swift
[38/59] Compiling Kadr TimingFunction.swift
[39/59] Compiling Kadr AudioBuilder.swift
[40/59] Compiling Kadr AudioTimePitchAlgorithm.swift
[41/59] Compiling Kadr AudioTrack.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 MaskCompositor.swift
[49/59] Compiling Kadr MultiInputCompositor.swift
[50/59] Compiling Kadr OverlayRenderer.swift
[51/59] Compiling Kadr PlaybackComposer.swift
[52/59] Compiling Kadr ReverseProcessor.swift
[53/59] Compiling Kadr SpeedCurveSampler.swift
[54/59] Compiling Kadr Transition.swift
[55/59] Compiling Kadr Video.swift
[56/59] Compiling Kadr VideoBuilder.swift
[57/59] Compiling Kadr VideoClip.swift
[58/59] Compiling Kadr CancellationToken.swift
[59/59] Compiling Kadr CompositionBuilder.swift
Build complete! (12.35s)
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/main
Repository: SteliyanH/kadr
Swift version used: 6.3
Target: Kadr
Extracting symbol information for 'Kadr'...
Finished extracting symbol information for 'Kadr'. (45.67s)
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.91s)
Generated documentation archive at:
/Users/admin/builder/spi-builder-workspace/.docs/steliyanh/kadr/main
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.20s)
Computing version for https://github.com/swiftlang/swift-docc-plugin
Computed https://github.com/swiftlang/swift-docc-plugin at 1.5.0 (3.61s)
Fetching https://github.com/swiftlang/swift-docc-symbolkit
[1/3708] Fetching swift-docc-symbolkit
Fetched https://github.com/swiftlang/swift-docc-symbolkit from cache (1.15s)
Computing version for https://github.com/swiftlang/swift-docc-symbolkit
Computed https://github.com/swiftlang/swift-docc-symbolkit at 1.0.0 (1.91s)
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
[1/8] Write snippet-extract-tool-entitlement.plist
[4/8] Write swift-version--6988338F2F200930.txt
[6/54] Compiling SymbolKit Mixin+Equals.swift
[7/54] Compiling SymbolKit Mixin+Hash.swift
[8/54] Compiling SymbolKit Mixin.swift
[9/54] Compiling SymbolKit LineList.swift
[10/54] Compiling SymbolKit Position.swift
[11/58] Compiling SymbolKit Symbol.swift
[12/58] Compiling SymbolKit SymbolKind.swift
[13/58] Compiling SymbolKit SymbolGraph.swift
[14/58] Compiling SymbolKit GraphCollector.swift
[15/58] Compiling SymbolKit GenericConstraint.swift
[16/58] Compiling SymbolKit GenericParameter.swift
[17/58] Compiling SymbolKit Generics.swift
[18/58] Compiling SymbolKit Namespace.swift
[19/58] Compiling SymbolKit DeclarationFragments.swift
[20/58] Compiling SymbolKit Fragment.swift
[21/58] Compiling SymbolKit FragmentKind.swift
[22/58] Compiling SymbolKit FunctionParameter.swift
[23/58] Compiling SymbolKit FunctionSignature.swift
[24/58] Compiling Snippets SnippetLanguage.swift
[25/58] Compiling Snippets Snippet.swift
[26/58] Compiling Snippets SnippetParser.swift
[27/58] Emitting module Snippets
[28/58] Compiling SymbolKit Names.swift
[29/58] Compiling SymbolKit SPI.swift
[30/58] Compiling SymbolKit Snippet.swift
[31/58] Compiling SymbolKit Extension.swift
[32/58] Emitting module SymbolKit
[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 SourceRange.swift
[39/58] Compiling SymbolKit Metadata.swift
[40/58] Compiling SymbolKit Module.swift
[41/58] Compiling SymbolKit OperatingSystem.swift
[42/58] Compiling SymbolKit Platform.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 Identifier.swift
[49/58] Compiling SymbolKit KindIdentifier.swift
[50/58] Compiling SymbolKit Location.swift
[51/58] Compiling SymbolKit Mutability.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 URL+Status.swift
[57/62] Compiling snippet_extract SymbolGraph+Snippet.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.39s)
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/main
✅ Doc result (uploading) reported
========================================
SyncDocs
========================================
Doc archive source directory: $PWD/.docs/steliyanh/kadr/main
File count: 1256
Doc size: 9.0MB
Preparing doc bundle ...
Uploading prod-steliyanh-kadr-main-f0f82c9e.zip to s3://spi-docs-inbox/prod-steliyanh-kadr-main-f0f82c9e.zip
Copying... [10%]
Copying... [20%]
Copying... [31%]
Copying... [41%]
Copying... [51%]
Copying... [61%]
Copying... [71%]
Copying... [82%]
Copying... [92%]
Copying... [100%]
Done.