diff --git a/.rive_head b/.rive_head
index a791ccf..7f2db16 100644
--- a/.rive_head
+++ b/.rive_head
@@ -1 +1 @@
-1506b069c01a049034052e5de1cbc6a9cf029c2e
+3927ea695d20b79956788268b6938efcb6ab0efe
diff --git a/include/rive/artboard.hpp b/include/rive/artboard.hpp
index e21e34a..d284253 100644
--- a/include/rive/artboard.hpp
+++ b/include/rive/artboard.hpp
@@ -120,6 +120,7 @@
     AABB bounds() const;
 
     // Can we hide these from the public? (they use playable)
+    bool isTranslucent() const;
     bool isTranslucent(const LinearAnimation*) const;
     bool isTranslucent(const LinearAnimationInstance*) const;
 
diff --git a/include/rive/static_scene.hpp b/include/rive/static_scene.hpp
new file mode 100644
index 0000000..63147f8
--- /dev/null
+++ b/include/rive/static_scene.hpp
@@ -0,0 +1,26 @@
+#ifndef _RIVE_STATIC_SCENE_HPP_
+#define _RIVE_STATIC_SCENE_HPP_
+
+#include "rive/artboard.hpp"
+#include "rive/scene.hpp"
+
+namespace rive
+{
+class StaticScene : public Scene
+{
+public:
+    StaticScene(ArtboardInstance*);
+    ~StaticScene() override;
+
+    bool isTranslucent() const override;
+
+    std::string name() const override;
+
+    Loop loop() const override;
+
+    float durationSeconds() const override;
+
+    bool advanceAndApply(float seconds) override;
+};
+} // namespace rive
+#endif
diff --git a/src/artboard.cpp b/src/artboard.cpp
index 86dcfd7..bc22b8a 100644
--- a/src/artboard.cpp
+++ b/src/artboard.cpp
@@ -617,6 +617,18 @@
                : AABB::fromLTWH(-width() * originX(), -height() * originY(), width(), height());
 }
 
+bool Artboard::isTranslucent() const
+{
+    for (const auto sp : m_ShapePaints)
+    {
+        if (!sp->isTranslucent())
+        {
+            return false; // one opaque fill is sufficient to be opaque
+        }
+    }
+    return true;
+}
+
 bool Artboard::isTranslucent(const LinearAnimation* anim) const
 {
     // For now we're conservative/lazy -- if we see that any of our paints are
@@ -635,15 +647,7 @@
 
     // If we get here, we have no animations, so just check our paints for
     // opacity
-
-    for (const auto sp : m_ShapePaints)
-    {
-        if (!sp->isTranslucent())
-        {
-            return false; // one opaque fill is sufficient to be opaque
-        }
-    }
-    return true;
+    return this->isTranslucent();
 }
 
 bool Artboard::isTranslucent(const LinearAnimationInstance* inst) const
diff --git a/src/static_scene.cpp b/src/static_scene.cpp
new file mode 100644
index 0000000..97b0286
--- /dev/null
+++ b/src/static_scene.cpp
@@ -0,0 +1,23 @@
+#include "rive/static_scene.hpp"
+#include "rive/artboard.hpp"
+
+using namespace rive;
+
+StaticScene::StaticScene(ArtboardInstance* instance) : Scene(instance) {}
+
+StaticScene::~StaticScene() {}
+
+bool StaticScene::isTranslucent() const { return m_artboardInstance->isTranslucent(); };
+
+std::string StaticScene::name() const { return m_artboardInstance->name(); };
+
+Loop StaticScene::loop() const { return Loop::oneShot; };
+
+float StaticScene::durationSeconds() const { return 0; }
+
+bool StaticScene::advanceAndApply(float seconds)
+{
+    // We ignore the 'seconds' argument because it's not an animated scene
+    m_artboardInstance->advance(0);
+    return true;
+};
\ No newline at end of file
