Added a custom factory
diff --git a/lottie-compose/src/main/java/com/airbnb/lottie/compose/LottieCompositionSpec.kt b/lottie-compose/src/main/java/com/airbnb/lottie/compose/LottieCompositionSpec.kt
index 9444a5b..ba38a5b 100644
--- a/lottie-compose/src/main/java/com/airbnb/lottie/compose/LottieCompositionSpec.kt
+++ b/lottie-compose/src/main/java/com/airbnb/lottie/compose/LottieCompositionSpec.kt
@@ -1,5 +1,7 @@
 package com.airbnb.lottie.compose
 
+import com.airbnb.lottie.LottieComposition
+
 /**
  * Specification for a [com.airbnb.lottie.LottieComposition]. Each subclass represents a different source.
  * A [com.airbnb.lottie.LottieComposition] is the stateless parsed version of a Lottie json file and is
@@ -41,4 +43,9 @@
      * Load an animation from its json string.
      */
     inline class JsonString(val jsonString: String) : LottieCompositionSpec
+
+    /**
+     * Load an animation from a custom factory. This will be called on an IO thread pool.
+     */
+    inline class Custom(val factory: () -> LottieComposition) : LottieCompositionSpec
 }
diff --git a/lottie-compose/src/main/java/com/airbnb/lottie/compose/rememberLottieComposition.kt b/lottie-compose/src/main/java/com/airbnb/lottie/compose/rememberLottieComposition.kt
index 9b9bed5..f4f4187 100644
--- a/lottie-compose/src/main/java/com/airbnb/lottie/compose/rememberLottieComposition.kt
+++ b/lottie-compose/src/main/java/com/airbnb/lottie/compose/rememberLottieComposition.kt
@@ -163,6 +163,13 @@
             val jsonStringCacheKey = if (cacheKey == DefaultCacheKey) spec.jsonString.hashCode().toString() else cacheKey
             LottieCompositionFactory.fromJsonStringSync(spec.jsonString, jsonStringCacheKey)
         }
+        is LottieCompositionSpec.Custom -> {
+            try {
+                LottieResult(spec.factory())
+            } catch (e: Throwable) {
+                LottieResult<LottieComposition>(e)
+            }
+        }
     }
 }