import bpy bpy.ops.object.select_all(action='SELECT') bpy.ops.object.delete() bpy.context.scene.frame_end = 100 bpy.ops.mesh.primitive_ico_sphere_add(subdivisions=6) ball = bpy.context.active_object squish_scale = (1.4, 1.4, 0.6) ball.location = (0, 0, 0) # It was this already ball.keyframe_insert(data_path="location", frame = 1) ball.scale = squish_scale ball.keyframe_insert(data_path="scale", frame = 1) ball.scale = (1, 1, 1) ball.keyframe_insert(data_path="scale", frame = 10) ball.location = (0, 0, 10) ball.keyframe_insert(data_path="location", frame = 50) ball.scale = (1, 1, 1) ball.keyframe_insert(data_path="scale", frame = 90) ball.scale = squish_scale ball.keyframe_insert(data_path="scale", frame = 100) ball.location = (0, 0, 0) ball.keyframe_insert(data_path="location", frame = 100) for fcurve in ball.animation_data.action.fcurves: if fcurve.data_path != "scale": for keyframe in fcurve.keyframe_points: print(keyframe.co) if keyframe.co[0] == 1: keyframe.interpolation = "QUART" keyframe.easing = "EASE_OUT" if keyframe.co[0] == 50: keyframe.interpolation = "QUAD" keyframe.easing = "EASE_IN_OUT" if keyframe.co[0] == 100: keyframe.interpolation = "BOUNCE" keyframe.easing = "EASE_IN" material = bpy.data.materials.new(name=f"FaceMaterial") material.use_nodes = True texture = bpy.data.images.load("carpet.jpg") ball.data.materials.append(material) bsdf_node = material.node_tree.nodes.get("Principled BSDF") texture_node = material.node_tree.nodes.new(type="ShaderNodeTexImage") texture_node.image = texture material.node_tree.links.new(texture_node.outputs["Color"], bsdf_node.inputs["Base Color"])