diff --git a/lottie/src/main/java/com/airbnb/lottie/L.java b/lottie/src/main/java/com/airbnb/lottie/L.java
index c88fd6e..8bfe62c 100644
--- a/lottie/src/main/java/com/airbnb/lottie/L.java
+++ b/lottie/src/main/java/com/airbnb/lottie/L.java
@@ -24,6 +24,7 @@
   private static final int MAX_DEPTH = 20;
   private static boolean traceEnabled = false;
   private static boolean networkCacheEnabled = true;
+  private static boolean disablePathInterpolatorCache = true;
   private static String[] sections;
   private static long[] startTimeNs;
   private static int traceDepth = 0;
@@ -130,4 +131,12 @@
     }
     return local;
   }
+
+  public static void setDisablePathInterpolatorCache(boolean disablePathInterpolatorCache) {
+    L.disablePathInterpolatorCache = disablePathInterpolatorCache;
+  }
+
+  public static boolean getDisablePathInterpolatorCache() {
+    return disablePathInterpolatorCache;
+  }
 }
diff --git a/lottie/src/main/java/com/airbnb/lottie/Lottie.java b/lottie/src/main/java/com/airbnb/lottie/Lottie.java
index 8faaeb7..c585572 100644
--- a/lottie/src/main/java/com/airbnb/lottie/Lottie.java
+++ b/lottie/src/main/java/com/airbnb/lottie/Lottie.java
@@ -20,5 +20,7 @@
     L.setCacheProvider(lottieConfig.cacheProvider);
     L.setTraceEnabled(lottieConfig.enableSystraceMarkers);
     L.setNetworkCacheEnabled(lottieConfig.enableNetworkCache);
+    L.setNetworkCacheEnabled(lottieConfig.enableNetworkCache);
+    L.setDisablePathInterpolatorCache(lottieConfig.disablePathInterpolatorCache);
   }
 }
diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieConfig.java b/lottie/src/main/java/com/airbnb/lottie/LottieConfig.java
index be426fa..b186058 100644
--- a/lottie/src/main/java/com/airbnb/lottie/LottieConfig.java
+++ b/lottie/src/main/java/com/airbnb/lottie/LottieConfig.java
@@ -19,13 +19,15 @@
   @Nullable final LottieNetworkCacheProvider cacheProvider;
   final boolean enableSystraceMarkers;
   final boolean enableNetworkCache;
+  final boolean disablePathInterpolatorCache;
 
   private LottieConfig(@Nullable LottieNetworkFetcher networkFetcher, @Nullable LottieNetworkCacheProvider cacheProvider,
-      boolean enableSystraceMarkers, boolean enableNetworkCache) {
+      boolean enableSystraceMarkers, boolean enableNetworkCache, boolean disablePathInterpolatorCache) {
     this.networkFetcher = networkFetcher;
     this.cacheProvider = cacheProvider;
     this.enableSystraceMarkers = enableSystraceMarkers;
     this.enableNetworkCache = enableNetworkCache;
+    this.disablePathInterpolatorCache = disablePathInterpolatorCache;
   }
 
   public static final class Builder {
@@ -36,6 +38,7 @@
     private LottieNetworkCacheProvider cacheProvider;
     private boolean enableSystraceMarkers = false;
     private boolean enableNetworkCache = true;
+    private boolean disablePathInterpolatorCache = true;
 
     /**
      * Lottie has a default network fetching stack built on {@link java.net.HttpURLConnection}. However, if you would like to hook into your own
@@ -111,9 +114,22 @@
       return this;
     }
 
+    /**
+     * When parsing animations, Lottie has a path interpolator cache. This cache allows Lottie to reuse PathInterpolators
+     * across an animation. This is desirable in most cases. However, when shared across screenshot tests, it can cause slight
+     * deviations in the rendering due to underlying approximations in the PathInterpolator.
+     *
+     * The cache is enabled by default and should probably only be disabled for screenshot tests.
+     */
+    @NonNull
+    public Builder setDisablePathInterpolatorCache(boolean disable) {
+      disablePathInterpolatorCache = disable;
+      return this;
+    }
+
     @NonNull
     public LottieConfig build() {
-      return new LottieConfig(networkFetcher, cacheProvider, enableSystraceMarkers, enableNetworkCache);
+      return new LottieConfig(networkFetcher, cacheProvider, enableSystraceMarkers, enableNetworkCache, disablePathInterpolatorCache);
     }
   }
 }
diff --git a/lottie/src/main/java/com/airbnb/lottie/parser/KeyframeParser.java b/lottie/src/main/java/com/airbnb/lottie/parser/KeyframeParser.java
index 4f0bd87..219b554 100644
--- a/lottie/src/main/java/com/airbnb/lottie/parser/KeyframeParser.java
+++ b/lottie/src/main/java/com/airbnb/lottie/parser/KeyframeParser.java
@@ -8,6 +8,8 @@
 import androidx.collection.SparseArrayCompat;
 import androidx.core.view.animation.PathInterpolatorCompat;
 
+import com.airbnb.lottie.L;
+import com.airbnb.lottie.Lottie;
 import com.airbnb.lottie.LottieComposition;
 import com.airbnb.lottie.parser.moshi.JsonReader;
 import com.airbnb.lottie.utils.MiscUtils;
@@ -332,7 +334,7 @@
     cp2.x = MiscUtils.clamp(cp2.x, -1f, 1f);
     cp2.y = MiscUtils.clamp(cp2.y, -MAX_CP_VALUE, MAX_CP_VALUE);
     int hash = Utils.hashFor(cp1.x, cp1.y, cp2.x, cp2.y);
-    WeakReference<Interpolator> interpolatorRef = getInterpolator(hash);
+    WeakReference<Interpolator> interpolatorRef = L.getDisablePathInterpolatorCache() ? null : getInterpolator(hash);
     if (interpolatorRef != null) {
       interpolator = interpolatorRef.get();
     }
@@ -350,13 +352,15 @@
           interpolator = new LinearInterpolator();
         }
       }
-      try {
-        putInterpolator(hash, new WeakReference<>(interpolator));
-      } catch (ArrayIndexOutOfBoundsException e) {
-        // It is not clear why but SparseArrayCompat sometimes fails with this:
-        //     https://github.com/airbnb/lottie-android/issues/452
-        // Because this is not a critical operation, we can safely just ignore it.
-        // I was unable to repro this to attempt a proper fix.
+      if (!L.getDisablePathInterpolatorCache()) {
+        try {
+          putInterpolator(hash, new WeakReference<>(interpolator));
+        } catch (ArrayIndexOutOfBoundsException e) {
+          // It is not clear why but SparseArrayCompat sometimes fails with this:
+          //     https://github.com/airbnb/lottie-android/issues/452
+          // Because this is not a critical operation, we can safely just ignore it.
+          // I was unable to repro this to attempt a proper fix.
+        }
       }
     }
     return interpolator;
diff --git a/snapshot-tests/src/androidTest/java/com/airbnb/lottie/snapshots/LottieSnapshotTest.kt b/snapshot-tests/src/androidTest/java/com/airbnb/lottie/snapshots/LottieSnapshotTest.kt
index 9af9410..8dfd190 100644
--- a/snapshot-tests/src/androidTest/java/com/airbnb/lottie/snapshots/LottieSnapshotTest.kt
+++ b/snapshot-tests/src/androidTest/java/com/airbnb/lottie/snapshots/LottieSnapshotTest.kt
@@ -11,7 +11,9 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
 import androidx.test.rule.GrantPermissionRule
+import com.airbnb.lottie.Lottie
 import com.airbnb.lottie.LottieAnimationView
+import com.airbnb.lottie.LottieConfig
 import com.airbnb.lottie.model.LottieCompositionCache
 import com.airbnb.lottie.snapshots.tests.ApplyOpacityToLayerTestCase
 import com.airbnb.lottie.snapshots.tests.AssetsTestCase
@@ -67,6 +69,11 @@
     @Before
     fun setup() {
         LottieCompositionCache.getInstance().resize(1)
+        Lottie.initialize(
+            LottieConfig.Builder()
+                .setDisablePathInterpolatorCache(true)
+                .build()
+        )
         val context = ApplicationProvider.getApplicationContext<Context>()
         snapshotter = HappoSnapshotter(context) { name, variant ->
             snapshotActivityRule.scenario.onActivity { activity ->
