Forward some animation methods to animation-instance
diff --git a/include/rive/animation/linear_animation_instance.hpp b/include/rive/animation/linear_animation_instance.hpp
index 35c07d7..a1ec2ab 100644
--- a/include/rive/animation/linear_animation_instance.hpp
+++ b/include/rive/animation/linear_animation_instance.hpp
@@ -63,6 +63,12 @@
         float spilledTime() const { return m_SpilledTime; }
         float durationSeconds() const;
 
+        // Forwarded from animation
+        uint32_t fps() const;
+        uint32_t duration() const;
+        float speed() const;
+        float startSeconds() const;
+    
         // Returns either the animation's default or overridden loop values
         Loop loop() { return (Loop)loopValue(); }
         int loopValue();
diff --git a/include/rive/artboard.hpp b/include/rive/artboard.hpp
index 5f33451..0315a82 100644
--- a/include/rive/artboard.hpp
+++ b/include/rive/artboard.hpp
@@ -23,6 +23,7 @@
     class ArtboardImporter;
     class NestedArtboard;
     class ArtboardInstance;
+    class LinearAnimationInstance;
 
     class Artboard : public ArtboardBase, public CoreContext, public ShapePaintContainer {
         friend class File;
@@ -111,6 +112,7 @@
 
         AABB bounds() const;
         bool isTranslucent(const LinearAnimation*) const;
+        bool isTranslucent(const LinearAnimationInstance*) const;
 
         template <typename T = Component> T* find(std::string name) {
             for (auto object : m_Objects) {
diff --git a/src/animation/linear_animation_instance.cpp b/src/animation/linear_animation_instance.cpp
index 895891c..f781cc2 100644
--- a/src/animation/linear_animation_instance.cpp
+++ b/src/animation/linear_animation_instance.cpp
@@ -114,6 +114,14 @@
     m_Direction = 1;
 }
 
+uint32_t LinearAnimationInstance::fps() const { return m_Animation->fps(); }
+
+uint32_t LinearAnimationInstance::duration() const { return m_Animation->duration(); }
+
+float LinearAnimationInstance::speed() const { return m_Animation->speed(); }
+
+float LinearAnimationInstance::startSeconds() const { return m_Animation->startSeconds(); }
+
 // Returns either the animation's default or overridden loop values
 int LinearAnimationInstance::loopValue() {
     if (m_LoopValue != -1) {
diff --git a/src/artboard.cpp b/src/artboard.cpp
index 7a3cf9f..77d2122 100644
--- a/src/artboard.cpp
+++ b/src/artboard.cpp
@@ -1,6 +1,7 @@
 #include "rive/artboard.hpp"
 #include "rive/backboard.hpp"
 #include "rive/animation/animation.hpp"
+#include "rive/animation/linear_animation_instance.hpp"
 #include "rive/dependency_sorter.hpp"
 #include "rive/draw_rules.hpp"
 #include "rive/draw_target.hpp"
@@ -445,6 +446,10 @@
     return true;
 }
 
+bool Artboard::isTranslucent(const LinearAnimationInstance* inst) const {
+    return this->isTranslucent(inst->animation());
+}
+
 LinearAnimation* Artboard::firstAnimation() const {
     if (m_Animations.empty()) {
         return nullptr;