     }
 
     /// Sets the given source and immediately starts the download.
+    public var url: URL? {
+        get { request?.url }
+        set { request = newValue.map { ImageRequest(url: $0) } }
+    }
+
+    /// Sets the given source and immediately starts the download.
+    public var request: ImageRequest? {
+        didSet { load(request) }
+    }
+    ///
+    // Deprecated in Nuke 11.0
+    @available(*, deprecated, message: "Please `request` or `url` properties instead")
     public var source: (any ImageRequestConvertible)? {
-        didSet { load(source) }
+        get { request }
+        set { request = newValue?.asImageRequest() }
     }
 
     override public func updateConstraints() {

            isResetNeeded = true
        }

        guard var request = request?.asImageRequest() else {
            handle(result: .failure(ImagePipeline.Error.imageRequestMissing), isSync: true)
            return
        }

        imageTask = nil
    }

    // MARK: Loading Images

    /// Loads an image with the given request.
    private func load(_ request: ImageRequest?) {
        assert(Thread.isMainThread, "Must be called from the main thread")

        cancel()
