I often select a bone and want to "zoom in" on range of keys, and then remove the selection of keys (clutter of keyframes with handles) but keep the channels selected as they are easier to see.

enter image description here

and zoom in using "View>>Frame Selected"

enter image description here

but then I want to clean up the clutter (e.g. deselect the fcurve keyframes while still keeping the channels selected for better visibility:

enter image description here

above shows the result of "Select >> None" where the channels are quite dim against the background. So then I have to again box-select the channels (or hover in the channel region and hit 'a'):

enter image description here

enter image description here

I don't see any setting to somehow change the line width of un-selected channels? Is there a menu item I've overlooked that can accomplish this?


1 Answer 1


While it seems like this should be built-in to blender, I have created a Python script that will accomplish this (for selected bones) and will try to produce my first add-on for the Graph View menu.

import bpy

bl_info = {
    "name": "Amature Bones, Graph View Frame Selected and unselect keyframes",
    "description": "For Amature Bones, the selected keys, Frame Selected and then unselect keys and keep the previously selected Channels",
    "author": "James Tomkinson",
    "version": (1, 0),
    "blender": (3, 6, 2),
    "location": "Graph Editor > View",
    "warning": "", # used for warning icon and text in addons panel
    "doc_url": "",
    "tracker_url": "",
    "support": "TESTING",
    "category": "Animation",

def selectNreselect():
    o = bpy.context.active_object
    activeBones = o.data.bones.active
    activeFcurves = [fcurve for fcurve in o.animation_data.action.fcurves if fcurve.select and fcurve.group.name in activeBones.name ]
    print(  'remembering', activeFcurves )

    # Frame selected
    bpy.ops.graph.select_all(action='DESELECT')  # select None
    # reselect channels
    for fc in activeFcurves:
        fc.select = True
    return {'FINISHED'}

class MY_MT_FrameSelectNreselect(bpy.types.Operator):
    bl_label = "Frame Selected and ReSelect"
    bl_idname = "graph_frame.reframe"    

    def draw(self, context):
        layout = self.layout
    def execute(self, context):
        print('FrameSelectNreselect execute')
        return {'FINISHED'}

def menu_func(self, context):
    self.layout.operator( MY_MT_FrameSelectNreselect.bl_idname, text="Frame Selected, keep selected channels" )

def register():
    bpy.utils.register_class( MY_MT_FrameSelectNreselect )
    bpy.types.GRAPH_MT_view.append( menu_func )

def unregister():    
    bpy.types.VIEW3D_MT_curve_add.remove( menu_func )
    bpy.utils.unregister_class( MY_MT_FrameSelectNreselect )

if __name__ == "__main__":

enter image description here


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .