Qt Quick 3D - Virtual Assistant Example

 // Copyright (C) 2023 The Qt Company Ltd.
 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

 import QtQuick
 import QtQuick3D

 import QtQuick.Timeline

 Node {
     id: node

     property alias heartTimeline: heartTimeline
     property alias heartAnimation: heartAnimation

     scale.x: 0.4
     scale.y: 0.4
     scale.z: 0.4

     // Resources
     Skin {
         id: skin
         joints: base
         inverseBindPoses: Qt.matrix4x4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)
     }

     // Nodes:
     Node {
         id: heart_Arm
         Model {
             id: plane
             source: "meshes/plane.mesh"
             skin: skin
             materials: heartMaterial_material
         }
         Node {
             id: base
         }
     }

     // Animations:
     Timeline {
         id: heartTimeline
         startFrame: 0
         endFrame: 1334
         currentFrame: 0
         enabled: false
         animations: TimelineAnimation {
             id: heartAnimation
             duration: 1334
             from: 0
             to: 1334
             running: heartTimeline.enabled
             loops: Animation.Infinite
             alwaysRunToEnd: true
         }
         KeyframeGroup {
             target: base
             property: "scale"
             Keyframe {
                 frame: 0
                 value: Qt.vector3d(0.897612, 0.897612, 0.897612)
             }
             Keyframe {
                 frame: 33.3333
                 value: Qt.vector3d(0.898435, 0.898435, 0.898435)
             }
             Keyframe {
                 frame: 66.6667
                 value: Qt.vector3d(0.900828, 0.900828, 0.900828)
             }
             Keyframe {
                 frame: 100
                 value: Qt.vector3d(0.904679, 0.904679, 0.904679)
             }
             Keyframe {
                 frame: 133.333
                 value: Qt.vector3d(0.909876, 0.909876, 0.909876)
             }
             Keyframe {
                 frame: 166.667
                 value: Qt.vector3d(0.916307, 0.916307, 0.916307)
             }
             Keyframe {
                 frame: 200
                 value: Qt.vector3d(0.92386, 0.92386, 0.92386)
             }
             Keyframe {
                 frame: 233.333
                 value: Qt.vector3d(0.932423, 0.932423, 0.932423)
             }
             Keyframe {
                 frame: 266.667
                 value: Qt.vector3d(0.941883, 0.941883, 0.941883)
             }
             Keyframe {
                 frame: 300
                 value: Qt.vector3d(0.952128, 0.952128, 0.952128)
             }
             Keyframe {
                 frame: 333.333
                 value: Qt.vector3d(0.963046, 0.963046, 0.963046)
             }
             Keyframe {
                 frame: 366.667
                 value: Qt.vector3d(0.974525, 0.974525, 0.974525)
             }
             Keyframe {
                 frame: 400
                 value: Qt.vector3d(0.986453, 0.986453, 0.986453)
             }
             Keyframe {
                 frame: 433.333
                 value: Qt.vector3d(0.998717, 0.998717, 0.998717)
             }
             Keyframe {
                 frame: 466.667
                 value: Qt.vector3d(1.01121, 1.01121, 1.01121)
             }
             Keyframe {
                 frame: 500
                 value: Qt.vector3d(1.02381, 1.02381, 1.02381)
             }
             Keyframe {
                 frame: 533.333
                 value: Qt.vector3d(1.03641, 1.03641, 1.03641)
             }
             Keyframe {
                 frame: 566.667
                 value: Qt.vector3d(1.0489, 1.0489, 1.0489)
             }
             Keyframe {
                 frame: 600
                 value: Qt.vector3d(1.06116, 1.06116, 1.06116)
             }
             Keyframe {
                 frame: 633.333
                 value: Qt.vector3d(1.07309, 1.07309, 1.07309)
             }
             Keyframe {
                 frame: 666.667
                 value: Qt.vector3d(1.08457, 1.08457, 1.08457)
             }
             Keyframe {
                 frame: 700
                 value: Qt.vector3d(1.09548, 1.09548, 1.09548)
             }
             Keyframe {
                 frame: 733.333
                 value: Qt.vector3d(1.10573, 1.10573, 1.10573)
             }
             Keyframe {
                 frame: 766.667
                 value: Qt.vector3d(1.11519, 1.11519, 1.11519)
             }
             Keyframe {
                 frame: 800
                 value: Qt.vector3d(1.12375, 1.12375, 1.12375)
             }
             Keyframe {
                 frame: 833.333
                 value: Qt.vector3d(1.1313, 1.1313, 1.1313)
             }
             Keyframe {
                 frame: 866.667
                 value: Qt.vector3d(1.13774, 1.13774, 1.13774)
             }
             Keyframe {
                 frame: 900
                 value: Qt.vector3d(1.14293, 1.14293, 1.14293)
             }
             Keyframe {
                 frame: 933.333
                 value: Qt.vector3d(1.14678, 1.14678, 1.14678)
             }
             Keyframe {
                 frame: 966.667
                 value: Qt.vector3d(1.14918, 1.14918, 1.14918)
             }
             Keyframe {
                 frame: 1000
                 value: Qt.vector3d(1.15, 1.15, 1.15)
             }
             Keyframe {
                 frame: 1033.33
                 value: Qt.vector3d(1.14293, 1.14293, 1.14293)
             }
             Keyframe {
                 frame: 1066.67
                 value: Qt.vector3d(1.12375, 1.12375, 1.12375)
             }
             Keyframe {
                 frame: 1100
                 value: Qt.vector3d(1.09548, 1.09548, 1.09548)
             }
             Keyframe {
                 frame: 1133.33
                 value: Qt.vector3d(1.06116, 1.06116, 1.06116)
             }
             Keyframe {
                 frame: 1166.67
                 value: Qt.vector3d(1.02381, 1.02381, 1.02381)
             }
             Keyframe {
                 frame: 1200
                 value: Qt.vector3d(0.986453, 0.986453, 0.986453)
             }
             Keyframe {
                 frame: 1233.33
                 value: Qt.vector3d(0.952128, 0.952128, 0.952128)
             }
             Keyframe {
                 frame: 1266.67
                 value: Qt.vector3d(0.92386, 0.92386, 0.92386)
             }
             Keyframe {
                 frame: 1300
                 value: Qt.vector3d(0.904679, 0.904679, 0.904679)
             }
             Keyframe {
                 frame: 1333.33
                 value: Qt.vector3d(0.897612, 0.897612, 0.897612)
             }
         }
     }

     Node {
         id: __materialLibrary__

         PrincipledMaterial {
             id: heartMaterial_material
             objectName: "heartMaterial_material"
             baseColor: "#ff197c1a"
             roughness: 0.09734514355659485
             cullMode: PrincipledMaterial.NoCulling
             alphaMode: PrincipledMaterial.Opaque
         }
     }
 }