diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Changelog for keid-dearimgui
 
+## 0.1.2.0
+
+- Added `renderWith` helper to inject DearImGui initialization in stage rendering components.
+
 ## 0.1.1.1
 
 - Added `Vk.deviceWaitIdle` injection in `afterLoop`.
diff --git a/keid-ui-dearimgui.cabal b/keid-ui-dearimgui.cabal
--- a/keid-ui-dearimgui.cabal
+++ b/keid-ui-dearimgui.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           keid-ui-dearimgui
-version:        0.1.1.1
+version:        0.1.2.0
 synopsis:       DearImGui elements for Keid engine.
 category:       Game Engine
 author:         IC Rainbow
@@ -94,7 +94,7 @@
     , binary
     , bytestring
     , dear-imgui >=1.3.0
-    , keid-core >=0.1.6.1
+    , keid-core >=0.1.7.0
     , resourcet
     , rio >=0.1.12.0
     , rio-app
diff --git a/src/Render/ImGui.hs b/src/Render/ImGui.hs
--- a/src/Render/ImGui.hs
+++ b/src/Render/ImGui.hs
@@ -4,6 +4,8 @@
   , allocateWithFonts
   , allocateWith
 
+  , renderWith
+
   , allocateLoop
   , beforeLoop
   , afterLoop
@@ -24,17 +26,17 @@
 import DearImGui.GLFW.Vulkan (glfwInitForVulkan)
 import DearImGui.Vulkan (InitInfo(..))
 import DearImGui.Vulkan qualified as ImGui
-import Engine.Vulkan.Types (getDevice)
+import Engine.Stage.Component qualified as Stage
+import Engine.Types (GlobalHandles(..), StageRIO)
+import Engine.Vulkan.Types (HasRenderPass(..), HasSwapchain(..), Queues(..), getDevice, getMultisample)
+import Resource.CommandBuffer qualified as CommandBuffer
+import Resource.DescriptorSet qualified as DescriptorSet
 import RIO.App (appEnv)
 import Vulkan.Core10 qualified as Vk
 import Vulkan.Exception (VulkanException(..))
+import Vulkan.NamedType (type (:::))
 import Vulkan.Utils.QueueAssignment (QueueFamilyIndex(..))
 
-import Engine.Types (GlobalHandles(..), StageRIO)
-import Engine.Vulkan.Types (HasRenderPass(..), HasSwapchain(..), Queues(..), getMultisample)
-import Resource.CommandBuffer qualified as CommandBuffer
-import Resource.DescriptorSet qualified as DescriptorSet
-
 allocate
   :: ( HasSwapchain swapchain
      , HasRenderPass renderpass
@@ -195,3 +197,16 @@
 capturingMouse :: MonadIO m => m () -> m ()
 capturingMouse action =
   ImGui.wantCaptureMouse >>= (`unless` action)
+
+renderWith
+  :: HasRenderPass renderpass
+  => (t -> renderpass)
+  -> "subpass index" ::: Word32
+  -> Stage.Rendering t p st
+  -> Stage.Rendering t p st
+renderWith getRP subpassIx Stage.Rendering{..} = Stage.Rendering
+  { rAllocateRP
+  , rAllocateP = \swapchain rps -> do
+      void $! allocate swapchain (getRP rps) subpassIx
+      rAllocateP swapchain rps
+  }
