| import bpy
# for nodetype in bpy.types.ShaderNode.__subclasses__(): print(nodetype.__name__)
def allCurvesLinear(dataBlock):
    # since we can't set the interpolation type when we create the keyframes, adjust them afterward.
    for curve in dataBlock.animation_data.action.fcurves:
        for p in curve.keyframe_points:
            p.interpolation='LINEAR'
def keyframe_add(obj, data_path, interp, co):
    if obj.animation_data is None:
        obj.animation_data_create()
    if obj.animation_data.action is None:
        obj.animation_data.action = bpy.data.actions.new("%sAction"%obj.name) 
    fc = None
    for fc2 in obj.animation_data.action.fcurves:
        if (fc2.data_path==data_path):
            fc = fc2
            break
    if fc is None:
        fc = obj.animation_data.action.fcurves.new(data_path)
    base = len(fc.keyframe_points)
    fc.keyframe_points.add(1)
    fc.keyframe_points[base].interpolation = interp
    fc.keyframe_points[base].co = co
def keyframe_multiadd(obj, data_path, *beztri):
    if obj.animation_data is None:
        obj.animation_data_create()
    if obj.animation_data.action is None:
        obj.animation_data.action = bpy.data.actions.new("%sAction"%obj.name) 
    fc = None
    for fc2 in obj.animation_data.action.fcurves:
        if (fc2.data_path==data_path):
            fc = fc2
            break
    if fc is None:
        fc = obj.animation_data.action.fcurves.new(data_path)
    base = len(fc.keyframe_points)
    fc.keyframe_points.add(len(beztri))
    for i in range(len(beztri)):
        fc.keyframe_points[base+i].interpolation = beztri[i][0]
        fc.keyframe_points[base+i].co = beztri[i][1:]
def knotOverGreen(t0, green, t1, grey):
    rval = bpy.data.materials.new("knot")
    rval.diffuse_color = green
    rval.use_transparency = True
    i1 = bpy.data.images.load('//knot2.png')
    t1 = bpy.data.textures.new("knots", 'IMAGE')
    t1.image = i1
    rval.texture_slots.add()
    rval.texture_slots[0].texture = t1
    rval.texture_slots[0].texture_coords = 'UV'
    rval.texture_slots[0].uv_layer = "UVMap"
    
    return rval;
def popUpMaterial(knot, t0, t1, t2, t3):
    rval = bpy.data.materials.new("fadeIn")
    rval.use_transparency = True
    rval.diffuse_color=(1,1,0)
    rval.alpha = 0 # without this, the transparency doesn't work
    rval.use_nodes = True
    
  
    for node in rval.node_tree.nodes.values() :
        rval.node_tree.nodes.remove(node)
    m1 = rval.node_tree.nodes.new('ShaderNodeMaterial')
    m1.location = (0,200)
    m1.material = knot
    mix = rval.node_tree.nodes.new('ShaderNodeMixRGB')
    mix.location = (200,200)
    mix.inputs['Color1'].default_value= (1,1,1,1)
    no = rval.node_tree.nodes.new('ShaderNodeOutput')
    no.location = (400,200)
    l = rval.node_tree.links
    l.new(m1.outputs['Color'], mix.inputs['Color2'])
    l.new(mix.outputs['Color'], no.inputs['Color'])
    if True:
        keyframe_add(rval.node_tree, 'nodes["Output"].inputs["Alpha"].default_value', 'LINEAR', [t0, 0])
        keyframe_add(rval.node_tree, 'nodes["Output"].inputs["Alpha"].default_value', 'LINEAR', [t1, 1] )
        keyframe_multiadd(rval.node_tree, 'nodes["Mix"].inputs["Fac"].default_value',
                          [ 'LINEAR', t2, 0],
                          [ 'LINEAR', t3, 1] )
    else:
        no.inputs['Alpha'].default_value = 0
        rval.node_tree.keyframe_insert(data_path = 'nodes["Output"].inputs["Alpha"].default_value', frame=t0)
        no.inputs['Alpha'].default_value = 1
        rval.node_tree.keyframe_insert(data_path = 'nodes["Output"].inputs["Alpha"].default_value', frame=t1)
        
        data_path = 'nodes["Mix"].inputs["Fac"].default_value'
        mix.inputs["Fac"].default_value = 0
        rval.node_tree.keyframe_insert(data_path, frame=t2)
        mix.inputs["Fac"].default_value = 1
        rval.node_tree.keyframe_insert(data_path = 'nodes["Mix"].inputs["Fac"].default_value', frame=t3)
        
        allCurvesLinear(rval.node_tree)
    return rval
obj = bpy.context.active_object
if obj.data.uv_textures.get("UVMap") is None:
    obj.data.uv_textures.new("UVMap")
knot =knotOverGreen(120, [0,1,0], 900, [])
m1 = popUpMaterial(knot, 0,30,60,90)
obj.material_slots[0].material = m1
 | 
Blender python API quick-start
Syntax highlighting by Pygments.