diff --git a/src/components/EngineStream.tsx b/src/components/EngineStream.tsx
index 1c1ce7e86..92e3fe5f8 100644
--- a/src/components/EngineStream.tsx
+++ b/src/components/EngineStream.tsx
@@ -29,15 +29,9 @@ import { useSelector } from '@xstate/react'
 import type { MouseEventHandler } from 'react'
 import { useEffect, useRef, useState } from 'react'
 import { useRouteLoaderData } from 'react-router-dom'
-import { isPlaywright } from '@src/lib/isPlaywright'
-import {
-  engineStreamZoomToFit,
-  engineViewIsometricWithGeometryPresent,
-  engineViewIsometricWithoutGeometryPresent,
-} from '@src/lib/utils'
-import { DEFAULT_DEFAULT_LENGTH_UNIT } from '@src/lib/constants'
 import { createThumbnailPNGOnDesktop } from '@src/lib/screenshot'
 import type { SettingsViaQueryString } from '@src/lib/settings/settingsTypes'
+import { resetCameraPosition } from '@src/lib/resetCameraPosition'
 
 export const EngineStream = (props: {
   pool: string | null
@@ -104,31 +98,7 @@ export const EngineStream = (props: {
 
     kmp
       .then(async () => {
-        // Gotcha: Playwright E2E tests will be zoom_to_fit, when you try to recreate the e2e test manually
-        // your localhost will do view_isometric. Turn this boolean on to have the same experience when manually
-        // debugging e2e tests
-
-        // We need a padding of 0.1 for zoom_to_fit for all E2E tests since they were originally
-        // written with zoom_to_fit with padding 0.1
-        const padding = 0.1
-        if (isPlaywright()) {
-          await engineStreamZoomToFit({ engineCommandManager, padding })
-        } else {
-          // If the scene is empty you cannot use view_isometric, it will not move the camera
-          if (kclManager.isAstBodyEmpty(kclManager.ast)) {
-            await engineViewIsometricWithoutGeometryPresent({
-              engineCommandManager,
-              unit:
-                kclManager.fileSettings.defaultLengthUnit ||
-                DEFAULT_DEFAULT_LENGTH_UNIT,
-            })
-          } else {
-            await engineViewIsometricWithGeometryPresent({
-              engineCommandManager,
-              padding,
-            })
-          }
-        }
+        await resetCameraPosition()
 
         if (project && project.path) {
           createThumbnailPNGOnDesktop({
diff --git a/src/components/ViewControlMenu.tsx b/src/components/ViewControlMenu.tsx
index e8c3ce88b..74bbf37e1 100644
--- a/src/components/ViewControlMenu.tsx
+++ b/src/components/ViewControlMenu.tsx
@@ -13,6 +13,7 @@ import { VIEW_NAMES_SEMANTIC } from '@src/lib/constants'
 import { sceneInfra } from '@src/lib/singletons'
 import { reportRejection } from '@src/lib/trap'
 import { useSettings } from '@src/lib/singletons'
+import { resetCameraPosition } from '@src/lib/resetCameraPosition'
 
 export function useViewControlMenuItems() {
   const { state: modelingState, send: modelingSend } = useModelingContext()
@@ -38,7 +39,7 @@ export function useViewControlMenuItems() {
       ,
        {
-          sceneInfra.camControls.resetCameraPosition().catch(reportRejection)
+          resetCameraPosition().catch(reportRejection)
         }}
         disabled={shouldLockView}
       >
diff --git a/src/lib/resetCameraPosition.ts b/src/lib/resetCameraPosition.ts
new file mode 100644
index 000000000..3cf531708
--- /dev/null
+++ b/src/lib/resetCameraPosition.ts
@@ -0,0 +1,40 @@
+import { DEFAULT_DEFAULT_LENGTH_UNIT } from '@src/lib/constants'
+import { isPlaywright } from '@src/lib/isPlaywright'
+import { engineCommandManager, kclManager } from '@src/lib/singletons'
+import {
+  engineStreamZoomToFit,
+  engineViewIsometricWithoutGeometryPresent,
+  engineViewIsometricWithGeometryPresent,
+} from '@src/lib/utils'
+
+/**
+ * Reset the camera position to a baseline, which is isometric for
+ * normal users and a deprecated "front-down" view for playwright tests.
+ *
+ * Gotcha: Playwright E2E tests will be zoom_to_fit, when you try to recreate the e2e test manually
+ * your localhost will do view_isometric. Turn this boolean on to have the same experience when manually
+ * debugging e2e tests
+ */
+export async function resetCameraPosition() {
+  // We need a padding of 0.1 for zoom_to_fit for all E2E tests since they were originally
+  // written with zoom_to_fit with padding 0.1
+  const padding = 0.1
+  if (isPlaywright()) {
+    await engineStreamZoomToFit({ engineCommandManager, padding })
+  } else {
+    // If the scene is empty you cannot use view_isometric, it will not move the camera
+    if (kclManager.isAstBodyEmpty(kclManager.ast)) {
+      await engineViewIsometricWithoutGeometryPresent({
+        engineCommandManager,
+        unit:
+          kclManager.fileSettings.defaultLengthUnit ||
+          DEFAULT_DEFAULT_LENGTH_UNIT,
+      })
+    } else {
+      await engineViewIsometricWithGeometryPresent({
+        engineCommandManager,
+        padding,
+      })
+    }
+  }
+}