diff --git a/invokeai/frontend/web/src/features/controlLayers/components/CanvasLayersFloatingToolbar.tsx b/invokeai/frontend/web/src/features/controlLayers/components/CanvasLayersFloatingToolbar.tsx
new file mode 100644
index 00000000000..c0f4749a4fb
--- /dev/null
+++ b/invokeai/frontend/web/src/features/controlLayers/components/CanvasLayersFloatingToolbar.tsx
@@ -0,0 +1,78 @@
+import { ButtonGroup, Flex, IconButton, Tooltip } from '@invoke-ai/ui-library';
+import {
+ useAddControlLayer,
+ useAddInpaintMask,
+ useAddNewRegionalGuidanceWithARefImage,
+ useAddRasterLayer,
+ useAddRegionalGuidance,
+} from 'features/controlLayers/hooks/addLayerHooks';
+import { useCanvasIsBusy } from 'features/controlLayers/hooks/useCanvasIsBusy';
+import { useIsEntityTypeEnabled } from 'features/controlLayers/hooks/useIsEntityTypeEnabled';
+import { memo } from 'react';
+import { useTranslation } from 'react-i18next';
+import { PiEraserBold, PiPaintBrushBold, PiRectangleBold, PiShapesFill } from 'react-icons/pi';
+
+export const CanvasLayersFloatingToolbar = memo(() => {
+ const { t } = useTranslation();
+ const isBusy = useCanvasIsBusy();
+ const addInpaintMask = useAddInpaintMask();
+ const addRegionalGuidance = useAddRegionalGuidance();
+ const _addRegionalReferenceImage = useAddNewRegionalGuidanceWithARefImage();
+ const addRasterLayer = useAddRasterLayer();
+ const addControlLayer = useAddControlLayer();
+ const isRegionalGuidanceEnabled = useIsEntityTypeEnabled('regional_guidance');
+ const isControlLayerEnabled = useIsEntityTypeEnabled('control_layer');
+ const isInpaintLayerEnabled = useIsEntityTypeEnabled('inpaint_mask');
+
+ return (
+
+
+
+ }
+ onClick={addInpaintMask}
+ isDisabled={!isInpaintLayerEnabled || isBusy}
+ />
+
+
+ }
+ onClick={addRegionalGuidance}
+ isDisabled={!isRegionalGuidanceEnabled || isBusy}
+ />
+
+
+ }
+ onClick={addControlLayer}
+ isDisabled={!isControlLayerEnabled || isBusy}
+ />
+
+
+ }
+ onClick={addRasterLayer}
+ isDisabled={isBusy}
+ />
+
+
+
+ );
+});
+
+CanvasLayersFloatingToolbar.displayName = 'CanvasLayersFloatingToolbar';
diff --git a/invokeai/frontend/web/src/features/controlLayers/components/CanvasLayersPanelContent.tsx b/invokeai/frontend/web/src/features/controlLayers/components/CanvasLayersPanelContent.tsx
index 49ae65205b1..d89a0479ab5 100644
--- a/invokeai/frontend/web/src/features/controlLayers/components/CanvasLayersPanelContent.tsx
+++ b/invokeai/frontend/web/src/features/controlLayers/components/CanvasLayersPanelContent.tsx
@@ -3,6 +3,7 @@ import { useAppSelector } from 'app/store/storeHooks';
import { CanvasAddEntityButtons } from 'features/controlLayers/components/CanvasAddEntityButtons';
import { CanvasEntityList } from 'features/controlLayers/components/CanvasEntityList/CanvasEntityList';
import { EntityListSelectedEntityActionBar } from 'features/controlLayers/components/CanvasEntityList/EntityListSelectedEntityActionBar';
+import { CanvasLayersFloatingToolbar } from 'features/controlLayers/components/CanvasLayersFloatingToolbar';
import { CanvasManagerProviderGate } from 'features/controlLayers/contexts/CanvasManagerProviderGate';
import { selectHasEntities } from 'features/controlLayers/store/selectors';
import { memo } from 'react';
@@ -14,13 +15,14 @@ export const CanvasLayersPanel = memo(() => {
return (
-
+
{!hasEntities && }
{hasEntities && }
+ {hasEntities && }
);