From 91b50f44eb2e836ce6d4e872894eb159df0d7160 Mon Sep 17 00:00:00 2001 From: Valeriy Van Date: Fri, 29 Dec 2023 23:55:31 +0200 Subject: [PATCH 1/9] Update swift-geometrize version --- Package.resolved | 4 ++-- Package.swift | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Package.resolved b/Package.resolved index 95810d7..7bf233d 100644 --- a/Package.resolved +++ b/Package.resolved @@ -149,8 +149,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/valeriyvan/swift-geometrize.git", "state" : { - "revision" : "b874832b6824922f877664a78fccee7a7d258705", - "version" : "1.1.1" + "revision" : "cf4f10093672b88b787e110d4a94f2a8c7a3ad62", + "version" : "1.1.2" } }, { diff --git a/Package.swift b/Package.swift index b7d4b07..a3cdd9a 100644 --- a/Package.swift +++ b/Package.swift @@ -11,7 +11,7 @@ let package = Package( .package(url: "https://github.com/vapor/leaf", from: "4.2.4"), .package(url: "https://github.com/vapor/leaf-kit", from: "1.10.2"), .package(url: "https://github.com/nerzh/telegram-vapor-bot", from: "2.4.3"), - .package(url: "https://github.com/valeriyvan/swift-geometrize.git", from: "1.1.1"), + .package(url: "https://github.com/valeriyvan/swift-geometrize.git", from: "1.1.2"), .package(url: "https://github.com/valeriyvan/jpeg.git", from: "1.0.2"), .package(url: "https://github.com/kelvin13/swift-png.git", from: "4.0.2"), .package(url: "https://github.com/awslabs/aws-sdk-swift", exact: "0.17.0") From 46a4757b1b050934091533f7737ef392bc25bbed Mon Sep 17 00:00:00 2001 From: Valeriy Van Date: Sat, 30 Dec 2023 00:00:43 +0200 Subject: [PATCH 2/9] Remove not needed imports --- Sources/App/Geometrizer.swift | 2 -- 1 file changed, 2 deletions(-) diff --git a/Sources/App/Geometrizer.swift b/Sources/App/Geometrizer.swift index 4c9bf92..2d77e61 100644 --- a/Sources/App/Geometrizer.swift +++ b/Sources/App/Geometrizer.swift @@ -1,7 +1,5 @@ import Foundation import Geometrize -import JPEG -import PNG enum Geometrizer { From 30f671142070bccdabb9bd12d2664ba95c2f0240 Mon Sep 17 00:00:00 2001 From: Valeriy Van Date: Sat, 30 Dec 2023 00:01:12 +0200 Subject: [PATCH 3/9] Remove commented out code --- Sources/App/Geometrizer.swift | 3 --- 1 file changed, 3 deletions(-) diff --git a/Sources/App/Geometrizer.swift b/Sources/App/Geometrizer.swift index 2d77e61..7fdd31c 100644 --- a/Sources/App/Geometrizer.swift +++ b/Sources/App/Geometrizer.swift @@ -62,9 +62,6 @@ struct SVGIterator: AsyncIteratorProtocol { targetBitmap = bitmap.downsample(factor: maxSize / downscaleSize) } - //targetBitmap.transpose() - //targetBitmap.reflectVertically() - width = targetBitmap.width height = targetBitmap.height From f82dd13aa6101a202c0c9079377e847a3822ddfc Mon Sep 17 00:00:00 2001 From: Valeriy Van Date: Mon, 8 Jan 2024 09:47:54 +0200 Subject: [PATCH 4/9] Update dependencies --- Package.resolved | 8 ++++---- Package.swift | 4 ++-- Sources/App/DefaultHandlers.swift | 14 +++++++------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Package.resolved b/Package.resolved index 7bf233d..b2b5561 100644 --- a/Package.resolved +++ b/Package.resolved @@ -284,8 +284,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/nerzh/telegram-vapor-bot", "state" : { - "revision" : "0c3469a60bee8170765ab9f108263e76cd065441", - "version" : "2.4.3" + "revision" : "1e7a08260f354c5e131bac8722494f2f61d786c6", + "version" : "2.5.0" } }, { @@ -293,8 +293,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/vapor/vapor.git", "state" : { - "revision" : "67fe736c37b0ad958b9d248f010cff6c1baa5c3a", - "version" : "4.89.3" + "revision" : "6db3d917b5ce5024a84eb265ef65691383305d70", + "version" : "4.90.0" } }, { diff --git a/Package.swift b/Package.swift index a3cdd9a..424d0a6 100644 --- a/Package.swift +++ b/Package.swift @@ -7,10 +7,10 @@ let package = Package( .macOS(.v12) ], dependencies: [ - .package(url: "https://github.com/vapor/vapor.git", from: "4.76.0"), + .package(url: "https://github.com/vapor/vapor.git", from: "4.90.0"), .package(url: "https://github.com/vapor/leaf", from: "4.2.4"), .package(url: "https://github.com/vapor/leaf-kit", from: "1.10.2"), - .package(url: "https://github.com/nerzh/telegram-vapor-bot", from: "2.4.3"), + .package(url: "https://github.com/nerzh/telegram-vapor-bot", from: "2.5.0"), .package(url: "https://github.com/valeriyvan/swift-geometrize.git", from: "1.1.2"), .package(url: "https://github.com/valeriyvan/jpeg.git", from: "1.0.2"), .package(url: "https://github.com/kelvin13/swift-png.git", from: "4.0.2"), diff --git a/Sources/App/DefaultHandlers.swift b/Sources/App/DefaultHandlers.swift index 8051894..bbe631b 100644 --- a/Sources/App/DefaultHandlers.swift +++ b/Sources/App/DefaultHandlers.swift @@ -95,7 +95,7 @@ final class DefaultBotHandlers { chatId: .chat(message.chat.id), messageThreadId: nil, // TODO: ??? text: "How would you like your image to be geometrized?", - replyToMessageId: message.messageId, + replyParameters: TGReplyParameters(messageId: message.messageId), replyMarkup: .replyKeyboardMarkup(keyboard) ) try await bot.sendMessage(params: params) @@ -143,7 +143,7 @@ final class DefaultBotHandlers { chatId: .chat(message.chat.id), messageThreadId: nil, // TODO: ??? text: "What's stroke width?", - replyToMessageId: message.messageId, + replyParameters: TGReplyParameters(messageId: message.messageId), replyMarkup: .replyKeyboardMarkup(keyboard) ) try await bot.sendMessage(params: params) @@ -171,7 +171,7 @@ final class DefaultBotHandlers { chatId: .chat(message.chat.id), messageThreadId: nil, // TODO: ??? text: "How many shapes?", - replyToMessageId: message.messageId, + replyParameters: TGReplyParameters(messageId: message.messageId), replyMarkup: .replyKeyboardMarkup(keyboard) ) try await bot.sendMessage(params: params) @@ -205,7 +205,7 @@ final class DefaultBotHandlers { chatId: .chat(message.chat.id), messageThreadId: nil, // TODO: ??? text: "How many shapes?", - replyToMessageId: message.messageId, + replyParameters: TGReplyParameters(messageId: message.messageId), replyMarkup: .replyKeyboardMarkup(keyboard) ) try await bot.sendMessage(params: params) @@ -236,7 +236,7 @@ final class DefaultBotHandlers { " Will post here \(iterations - 1) intermediary geometrizing results and then final one." : "" ), - replyToMessageId: message.messageId + replyParameters: TGReplyParameters(messageId: message.messageId) ) try await bot.sendMessage(params: params) @@ -279,7 +279,7 @@ final class DefaultBotHandlers { document: .file(file), thumbnail: .file(thumbnail), caption: iterations > 1 ? "\(iteration + 1)/\(iterations)" : nil, - replyToMessageId: imageData.messageId + replyParameters: TGReplyParameters(messageId: message.messageId) ) ) shapesCounter += shapesPerIteration @@ -327,7 +327,7 @@ final class DefaultBotHandlers { chatId: .chat(message.chat.id), messageThreadId: nil, // TODO: ??? text: "Try send an image...", - replyToMessageId: message.messageId + replyParameters: TGReplyParameters(messageId: message.messageId) ) state[userId] = .waitImageFromUser try await connection.bot.sendMessage(params: params) From a98b2a7487cb6720cd72a05a1bc94ddd1090b749 Mon Sep 17 00:00:00 2001 From: Valeriy Van Date: Mon, 8 Jan 2024 09:51:37 +0200 Subject: [PATCH 5/9] Integrate recent changes in swift-geometrize --- Package.resolved | 8 +- Package.swift | 8 +- Sources/App/DefaultHandlers.swift | 5 +- Sources/App/Geometrizer.swift | 159 ------------------------------ Sources/App/routes.swift | 14 +-- 5 files changed, 22 insertions(+), 172 deletions(-) delete mode 100644 Sources/App/Geometrizer.swift diff --git a/Package.resolved b/Package.resolved index b2b5561..ffcb8d5 100644 --- a/Package.resolved +++ b/Package.resolved @@ -146,11 +146,11 @@ }, { "identity" : "swift-geometrize", - "kind" : "remoteSourceControl", - "location" : "https://github.com/valeriyvan/swift-geometrize.git", + "kind" : "localSourceControl", + "location" : "/Users/valeriyvan/Documents/geometrize/swift-geometrize", "state" : { - "revision" : "cf4f10093672b88b787e110d4a94f2a8c7a3ad62", - "version" : "1.1.2" + "branch" : "feature/asynciterator", + "revision" : "c82b7e104ce6ed94f55530a6ef1351ae4ad23ab9" } }, { diff --git a/Package.swift b/Package.swift index 424d0a6..84863bb 100644 --- a/Package.swift +++ b/Package.swift @@ -11,7 +11,13 @@ let package = Package( .package(url: "https://github.com/vapor/leaf", from: "4.2.4"), .package(url: "https://github.com/vapor/leaf-kit", from: "1.10.2"), .package(url: "https://github.com/nerzh/telegram-vapor-bot", from: "2.5.0"), - .package(url: "https://github.com/valeriyvan/swift-geometrize.git", from: "1.1.2"), + // As remainder how to add local package as dependency: + // https://stackoverflow.com/questions/49819552/swift-4-local-dependencies-with-swift-package-manager + // .package(name: "MyPackage", path: "/local/path/to/package"), + // .package(path: "../Modules/MySwiftLib"), + // .package(url: "file:///path/to/MySwiftLib", from: "1.0.0"), + .package(url: "https://github.com/valeriyvan/swift-geometrize.git", branch: "feature/incremental-svg"), + //.package(url: "../swift-geometrize/", branch: "feature/asynciterator"), .package(url: "https://github.com/valeriyvan/jpeg.git", from: "1.0.2"), .package(url: "https://github.com/kelvin13/swift-png.git", from: "4.0.2"), .package(url: "https://github.com/awslabs/aws-sdk-swift", exact: "0.17.0") diff --git a/Sources/App/DefaultHandlers.swift b/Sources/App/DefaultHandlers.swift index bbe631b..869b754 100644 --- a/Sources/App/DefaultHandlers.swift +++ b/Sources/App/DefaultHandlers.swift @@ -240,12 +240,13 @@ final class DefaultBotHandlers { ) try await bot.sendMessage(params: params) - let svgSequence = try await Geometrizer.geometrize( + let svgSequence = try await SVGAsyncGeometrizer.geometrize( bitmap: imageData.bitmap, shapeTypes: types, strokeWidth: strokeWidths[userId] ?? 1, iterations: iterations, - shapesPerIteration: shapesPerIteration + shapesPerIteration: shapesPerIteration, + iterationOptions: .completeSVGEachIteration ) var shapesCounter = shapesPerIteration var iteration = 0 diff --git a/Sources/App/Geometrizer.swift b/Sources/App/Geometrizer.swift deleted file mode 100644 index 7fdd31c..0000000 --- a/Sources/App/Geometrizer.swift +++ /dev/null @@ -1,159 +0,0 @@ -import Foundation -import Geometrize - -enum Geometrizer { - - // Returns SVGAsyncSequence which produces intermediate geometrizing results - // which are SVG strings + thumbnails. The last sequence element is final result. - static func geometrize( - bitmap: Bitmap, - shapeTypes: [Shape.Type], - strokeWidth: Int, - iterations: Int, - shapesPerIteration: Int - ) async throws -> SVGAsyncSequence { - SVGAsyncSequence( - bitmap: bitmap, - shapeTypes: shapeTypes, - strokeWidth: strokeWidth, - iterations: iterations, - shapesPerIteration: shapesPerIteration - ) - } - -} - -struct SVGIterator: AsyncIteratorProtocol { - private let originalPhotoWidth: Int - private let originalPhotoHeight: Int - private let shapeTypes: [Shape.Type] - private let iterations: Int - private let shapesPerIteration: Int - - private let width, height: Int - - private var iterationCounter: Int - - private var shapeData: [ShapeResult] - - private let runnerOptions: ImageRunnerOptions - private var runner: ImageRunner - - // Counts attempts to add shapes. Not all attempts to add shape result in adding a shape. - private var stepCounter: Int - - init( - bitmap: Bitmap, - downscaleImageToMaxSize downscaleSize: Int = 500, - shapeTypes: [Shape.Type], - strokeWidth: Int, - iterations: Int, - shapesPerIteration: Int - ) { - self.shapeTypes = shapeTypes - self.iterations = iterations - self.shapesPerIteration = shapesPerIteration - - var targetBitmap = bitmap - originalPhotoWidth = bitmap.width - originalPhotoHeight = bitmap.height - let maxSize = max(originalPhotoWidth, originalPhotoHeight) - if maxSize > downscaleSize { - targetBitmap = bitmap.downsample(factor: maxSize / downscaleSize) - } - - width = targetBitmap.width - height = targetBitmap.height - - iterationCounter = 0 - - stepCounter = 0 - - runnerOptions = ImageRunnerOptions( - shapeTypes: shapeTypes, - strokeWidth: strokeWidth, - alpha: 128, - shapeCount: 500, // ? - maxShapeMutations: 100, - seed: 9001, // ! - maxThreads: 1, - shapeBounds: ImageRunnerShapeBoundsOptions( - enabled: false, - xMinPercent: 0, yMinPercent: 0, xMaxPercent: 100, yMaxPercent: 100 - ) - ) - - runner = ImageRunner(targetBitmap: targetBitmap) - - shapeData = [] - - // Hack to add a single background rectangle as the initial shape - shapeData.append( - ShapeResult( - score: 0, - color: targetBitmap.averageColor(), - shape: Rectangle(canvasWidth: targetBitmap.width, height: targetBitmap.height) - ) - ) - } - - mutating func next() async throws -> GeometrizingResult? { - guard iterationCounter < iterations else { return nil } - var stepShapeData: [ShapeResult] = [] - while stepShapeData.count < shapesPerIteration { - print("Step \(stepCounter)", terminator: "") - let stepResult = runner.step( - options: runnerOptions, - shapeCreator: nil, - energyFunction: defaultEnergyFunction, - addShapePrecondition: defaultAddShapePrecondition - ) - if let stepResult { - print(", \(stepResult.shape.description) added.", terminator: "") - stepShapeData.append(stepResult) - } else { - print(", no shapes added.", terminator: "") - } - print(" Total count of shapes \(shapeData.count + stepShapeData.count).") - stepCounter += 1 - } - - shapeData.append(contentsOf: stepShapeData) - iterationCounter += 1 - - var svg = SVGExporter().export(data: shapeData, width: width, height: height) - - // Fix SVG to keep original image size - let range = svg.range(of: "width=")!.lowerBound ..< svg.range(of: "viewBox=")!.lowerBound - svg.replaceSubrange(range.relative(to: svg), with: " width=\"\(originalPhotoWidth)\" height=\"\(originalPhotoHeight)\" ") - - print("Iteration \(iterationCounter) complete, \(stepShapeData.count) shapes in iteration, \(shapeData.count) shapes in total.") - return GeometrizingResult(svg: svg, thumbnail: runner.currentBitmap) - } - -} - -struct GeometrizingResult { - let svg: String - let thumbnail: Bitmap -} - -struct SVGAsyncSequence: AsyncSequence { - typealias Element = GeometrizingResult - - let bitmap: Bitmap - let shapeTypes: [Shape.Type] - let strokeWidth: Int - let iterations: Int - let shapesPerIteration: Int - - func makeAsyncIterator() -> SVGIterator { - SVGIterator( - bitmap: bitmap, - shapeTypes: shapeTypes, - strokeWidth: strokeWidth, - iterations: iterations, - shapesPerIteration: shapesPerIteration - ) - } -} diff --git a/Sources/App/routes.swift b/Sources/App/routes.swift index 7034cba..4fd5106 100644 --- a/Sources/App/routes.swift +++ b/Sources/App/routes.swift @@ -2,9 +2,9 @@ import Vapor import Geometrize import Leaf -var cache: [String: (date: Date, iterator: SVGIterator)] = [:] +var cache: [String: (date: Date, iterator: SVGAsyncIterator)] = [:] -var iterators: [UUID: (date: Date, iterator: SVGIterator)] = [:] +var iterators: [UUID: (date: Date, iterator: SVGAsyncIterator)] = [:] func routes(_ app: Application) throws { app.get { req in @@ -47,12 +47,13 @@ func routes(_ app: Application) throws { throw "Cannot process file \(input.file.filename)" } - let svgSequence: SVGAsyncSequence = try await Geometrizer.geometrize( + let svgSequence: SVGAsyncSequence = try await SVGAsyncGeometrizer.geometrize( bitmap: bitmap, shapeTypes: [selectedShape], strokeWidth: 1, iterations: steps, - shapesPerIteration: shapeCount / steps + shapesPerIteration: shapeCount / steps, + iterationOptions: .completeSVGEachIteration ) var asyncIterator = svgSequence.makeAsyncIterator() cache[id] = (date: Date(), iterator: asyncIterator) @@ -112,12 +113,13 @@ func routes(_ app: Application) throws { throw "Cannot process file \(input.file.filename)" } - let svgSequence: SVGAsyncSequence = try await Geometrizer.geometrize( + let svgSequence: SVGAsyncSequence = try await SVGAsyncGeometrizer.geometrize( bitmap: bitmap, shapeTypes: [selectedShape], strokeWidth: 1, iterations: shapeCount, - shapesPerIteration: 1 + shapesPerIteration: 1, + iterationOptions: .completeSVGEachIteration ) let asyncIterator = svgSequence.makeAsyncIterator() let uuid = UUID() From da2e13a82f6e9fabba81232515f665b00af5724b Mon Sep 17 00:00:00 2001 From: Valeriy Van Date: Tue, 9 Jan 2024 23:02:02 +0100 Subject: [PATCH 6/9] Fix swift-geometrize branch --- Package.resolved | 4 ++-- Package.swift | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Package.resolved b/Package.resolved index ffcb8d5..e392374 100644 --- a/Package.resolved +++ b/Package.resolved @@ -146,8 +146,8 @@ }, { "identity" : "swift-geometrize", - "kind" : "localSourceControl", - "location" : "/Users/valeriyvan/Documents/geometrize/swift-geometrize", + "kind" : "remoteSourceControl", + "location" : "https://github.com/valeriyvan/swift-geometrize.git", "state" : { "branch" : "feature/asynciterator", "revision" : "c82b7e104ce6ed94f55530a6ef1351ae4ad23ab9" diff --git a/Package.swift b/Package.swift index 84863bb..fc13293 100644 --- a/Package.swift +++ b/Package.swift @@ -16,7 +16,7 @@ let package = Package( // .package(name: "MyPackage", path: "/local/path/to/package"), // .package(path: "../Modules/MySwiftLib"), // .package(url: "file:///path/to/MySwiftLib", from: "1.0.0"), - .package(url: "https://github.com/valeriyvan/swift-geometrize.git", branch: "feature/incremental-svg"), + .package(url: "https://github.com/valeriyvan/swift-geometrize.git", branch: "feature/asynciterator"), //.package(url: "../swift-geometrize/", branch: "feature/asynciterator"), .package(url: "https://github.com/valeriyvan/jpeg.git", from: "1.0.2"), .package(url: "https://github.com/kelvin13/swift-png.git", from: "4.0.2"), From 02ade200e529782d1987549ec1845f7887b8c732 Mon Sep 17 00:00:00 2001 From: Valeriy Van Date: Wed, 10 Jan 2024 13:57:44 +0100 Subject: [PATCH 7/9] Update SVG incrementally in AJAX in web version --- Sources/App/routes.swift | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Sources/App/routes.swift b/Sources/App/routes.swift index 4fd5106..c0273d2 100644 --- a/Sources/App/routes.swift +++ b/Sources/App/routes.swift @@ -7,6 +7,8 @@ var cache: [String: (date: Date, iterator: SVGAsyncIterator)] = [:] var iterators: [UUID: (date: Date, iterator: SVGAsyncIterator)] = [:] func routes(_ app: Application) throws { + let updateMarker = "" + app.get { req in cleanup() return req.leaf.render("index") @@ -119,7 +121,7 @@ func routes(_ app: Application) throws { strokeWidth: 1, iterations: shapeCount, shapesPerIteration: 1, - iterationOptions: .completeSVGEachIteration + iterationOptions: .completeSVGFirstIterationThenDeltas(updateMarker: updateMarker) ) let asyncIterator = svgSequence.makeAsyncIterator() let uuid = UUID() @@ -137,10 +139,19 @@ func routes(_ app: Application) throws { try? await ws.close(code: .unacceptableData) return } + var fullSVG: String? = nil while let result = try? await iterator.next() { let svgLines = result.svg.components(separatedBy: .newlines) let svg = svgLines.dropFirst(2).joined(separator: "\n") - try? await ws.send(svg) + if let _fullSVG = fullSVG { + fullSVG = _fullSVG.replacingOccurrences(of: updateMarker, with: svg + updateMarker) + } else { + fullSVG = svg + } + guard let fullSVG else { + fatalError("Internal inconsistency") + } + try? await ws.send(fullSVG) } try? await ws.close() } From 3949cf7fcfb194d7f3b738dcf6f9e316781fde10 Mon Sep 17 00:00:00 2001 From: Valeriy Van Date: Fri, 12 Jan 2024 19:28:59 +0100 Subject: [PATCH 8/9] Fix progressive svg updating --- Sources/App/routes.swift | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/Sources/App/routes.swift b/Sources/App/routes.swift index c0273d2..1b1d853 100644 --- a/Sources/App/routes.swift +++ b/Sources/App/routes.swift @@ -7,7 +7,7 @@ var cache: [String: (date: Date, iterator: SVGAsyncIterator)] = [:] var iterators: [UUID: (date: Date, iterator: SVGAsyncIterator)] = [:] func routes(_ app: Application) throws { - let updateMarker = "" + let updateMarker = "\n" app.get { req in cleanup() @@ -139,19 +139,20 @@ func routes(_ app: Application) throws { try? await ws.close(code: .unacceptableData) return } - var fullSVG: String? = nil + var firstSVG: String? = nil + var svgAdOns: String = "" + // for try await result in svgSequence { TODO: do this! while let result = try? await iterator.next() { - let svgLines = result.svg.components(separatedBy: .newlines) - let svg = svgLines.dropFirst(2).joined(separator: "\n") - if let _fullSVG = fullSVG { - fullSVG = _fullSVG.replacingOccurrences(of: updateMarker, with: svg + updateMarker) + if let firstSVG { + svgAdOns += result.svg + let fullSVG = firstSVG.replacingOccurrences(of: updateMarker, with: svgAdOns) + try? await ws.send(fullSVG) } else { - fullSVG = svg + let svgLines = result.svg.components(separatedBy: .newlines) + let firstSVG_ = svgLines.dropFirst(2).joined(separator: "\n") + try? await ws.send(firstSVG_) + firstSVG = firstSVG_ } - guard let fullSVG else { - fatalError("Internal inconsistency") - } - try? await ws.send(fullSVG) } try? await ws.close() } From dd662e06534f1350bef44c9d902ee06624b47d0d Mon Sep 17 00:00:00 2001 From: Valeriy Van Date: Fri, 12 Jan 2024 19:29:47 +0100 Subject: [PATCH 9/9] Cosmetic Package.swift changes --- Package.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index fc13293..f4ada8b 100644 --- a/Package.swift +++ b/Package.swift @@ -16,8 +16,8 @@ let package = Package( // .package(name: "MyPackage", path: "/local/path/to/package"), // .package(path: "../Modules/MySwiftLib"), // .package(url: "file:///path/to/MySwiftLib", from: "1.0.0"), + // .package(url: "../swift-geometrize/", branch: "feature/asynciterator"), .package(url: "https://github.com/valeriyvan/swift-geometrize.git", branch: "feature/asynciterator"), - //.package(url: "../swift-geometrize/", branch: "feature/asynciterator"), .package(url: "https://github.com/valeriyvan/jpeg.git", from: "1.0.2"), .package(url: "https://github.com/kelvin13/swift-png.git", from: "4.0.2"), .package(url: "https://github.com/awslabs/aws-sdk-swift", exact: "0.17.0")