cloning
link-mesh-array.py
link-mesh.py

mesh fabrication
staircase.py
triangle-donut.py
vertexAccumulator.py
randomSquareArray.py
meshFromBathymetry.py
cylinders-from-list-of-radii.py
binary-image-to-mesh.py
sphere-minecraft-schematic.py
spikify.py
add-to-mesh.py
mobius-strip.py
split-copy-mesh.py

fabricating other objects
create-text.py
text-from-file.py
create-camera.py
create-bezier.py
helix-bezier.py

material slots
cube-copy-blue.py
cube-turns-red.py
red-blue-per-object.py

animation and fcurves
csv-to-fcurve-loc-rot.py
csv-to-fcurve.py
pop-in-material.py
spike-wiggle-2.py
spike-wiggle.py
sweep-animate-size.py
animate-cycles-lamp-strength.py

incorporating python libraries
exec-text-library.py
exec-external-python.py
import-python.py

constraints
camera-track-object.py
text-track-camera.py

shape keys
explore-shape-keys.py
shape-key-fin.py
docking-tube.py

animating curve bevel
data-graph.py

drivers
scan-drivers.py
copy-drivers.py
driver-fin.py
driver-multi-chain.py

UV layers
barber-pole.py
expand-uv-to-fit.py
uv-from-geometry-cubic.py
flip-texture-v-coordinate.py

modifiers
hook-modifier-curve.py
rounded-prisms.py
make-tile.py
remove-action-modifiers.py

NLAs
explore-NLAs.py
spinning-frogs.py

video sequence editor (VSE)
create-vse-image-strips.py
slide-show.py
vse-strip-gap.py

images and textures
image-on-mesh.py
image-to-material-node.py
load-image-texture.py
texture-one-cube-face.py
condense-duplicate-images.py

analytic geometry
animate-random-spin.py
camera-cone-exp-2.py
camera-cone-exp.py
compute-circle-center.py
dihedral-angle-from-xy.py
extrude-edge-along-custom-axis.py
orientation-matrix.py
two-spheres.py
bezier-interpolate.py
rotate-to-match.py

node trees
change-diffuse-to-emission-node.py

etc
add-plane-from-selected-vertices.py
adjust-all-materials.py
all-nodes-cycles-materials.py
bit_shift.py
bone-orientation-demo.py
cannonball-packing.py
comb.py
convert-quaternion-keyframes-to-euler.py
copy-location-from-vertex-group.py
create-cycles-material.py
demonstrate-decomposition-instability.py
dump-point-cache.py
dump-screen-layout-info.py
expand-nla-strips.py
explore-edge-bevel-weight.py
find-action-users.py
find-green-rectangle.py
find-new-objects.py
fix-scene-layers.py
generate-makefile.py
link-external-data-blocks.py
list-referenced-files.py
material-readout.py
movie-card-stack.py
movies-on-faces.py
next-file-name.py
object-font-from-regular-font.py
operator-mesh-gridify.py
particle-animator.py
particle_loop.py
pose-match.py
pose-sequence-to-fbx.py
prepare-texture-bake.py
raining-physics.py
random-pebble-material.py
reverse-keyframes.py
scale-parallelogram.py
screenshot-sequence.py
select-objects-in-modifiers.py
select-vertices.py
shift-layers.py
snapshot-keyframes-as-mesh.py
sphere-project-texture.py
squish-mesh-axis.py
subdivide-fcurve.py
thicken-texture.py
transform-selected.py
voronoi-madness.py

__author__ = 'thoth'

#
# This is an attempt to catalog all the proper strings necessary to
# create all types of nodes used in cycles shaders.  The fact that
# the argument to nodes.new() is different than the resulting n.type
# is a puzzle and an embarrassment.
#
# Most are documented at
# https://www.blender.org/api/blender_python_api_current/bpy.types.ShaderNode.html
# but a few are missing from that page and demonstrated here (NodeReroute, NodeFrame).

#
# See also the blender source code:
#
# blender/release/scripts/startup/nodeitems_builtins.py
#

import bpy


def tag_from_type(ntype):
    """
    technique from
    http://blender.stackexchange.com/questions/34832/what-are-the-valid-types-for-the-type-parameter-in-bpy-context-scene-node-tree-n/54064#54064
    """
    return str(ntype).rsplit('.')[2][:-2]

bpy.data.images
def make_node_examples(parent_frame, nodes, tags, x):
    y = 0
    for tag in tags:
        n = nodes.new(tag)
        n.location = (x, y)
        n.hide = True
#        n.width_hidden=60
        n.parent = parent_frame

        y -= 60

        tag2 = tag_from_type(type(n))
        if tag != tag2: # sanity check
            print([tag, n.type, tag2])

def node_with_type(nodes, type):
    for node in nodes:
        if node.type==type:
            return node
    return None


def make_all_cycles_nodes():

    tags_input = ["ShaderNodeTexCoord",
                  'ShaderNodeAttribute',
                  'ShaderNodeLightPath',
                  'ShaderNodeFresnel',
                  'ShaderNodeLayerWeight',
                  'ShaderNodeRGB',
                  'ShaderNodeValue',
                  'ShaderNodeTangent',
                  'ShaderNodeGeometry',
                  'ShaderNodeWireframe',
                  'ShaderNodeObjectInfo',
                  'ShaderNodeHairInfo',
                  'ShaderNodeParticleInfo',
                  'ShaderNodeCameraData',
                  'ShaderNodeUVMap'
    ]

    name = "catalog"
    mat = bpy.data.materials.get(name)
    if mat is None:
        mat = bpy.data.materials.new(name)

    mat.use_nodes = True

    nodes = mat.node_tree.nodes
    for node in nodes:
        nodes.remove(node)

    fr_input = nodes.new("NodeFrame")
    fr_input.label = "Input nodes"

    x=0
    make_node_examples(fr_input, nodes, tags_input, x)

    #
    x+=300

    fr_output = nodes.new("NodeFrame")
    fr_output.label = "Output nodes"

    make_node_examples(fr_output, nodes, ['ShaderNodeOutputMaterial',
                                          'ShaderNodeOutputLamp'], x)

    #
    x+=250

    fr_shaders = nodes.new("NodeFrame")
    fr_shaders.label = "Shader nodes"

    make_node_examples(fr_shaders, nodes, ['ShaderNodeMixShader',
                                           'ShaderNodeAddShader',
                                           'ShaderNodeBsdfDiffuse',
                                           'ShaderNodeBsdfGlossy',
                                           'ShaderNodeBsdfTransparent',
                                           'ShaderNodeBsdfRefraction',
                                           'ShaderNodeBsdfGlass',
                                           'ShaderNodeBsdfTranslucent',
                                           'ShaderNodeBsdfAnisotropic',
                                           'ShaderNodeBsdfVelvet',
                                           'ShaderNodeBsdfToon',
                                           'ShaderNodeSubsurfaceScattering',
                                           'ShaderNodeEmission',
                                           'ShaderNodeBsdfHair',
                                           'ShaderNodeAmbientOcclusion',
                                           'ShaderNodeHoldout',
                                           'ShaderNodeVolumeAbsorption',
                                           'ShaderNodeVolumeScatter'], x)

    #
    x+=300

    fr_textures = nodes.new("NodeFrame")
    fr_textures.label = "Texture nodes"

    make_node_examples(fr_textures, nodes, ['ShaderNodeTexImage',
                                            'ShaderNodeTexEnvironment',
                                            'ShaderNodeTexSky',
                                            'ShaderNodeTexNoise',
                                            'ShaderNodeTexWave',
                                            'ShaderNodeTexVoronoi',
                                            'ShaderNodeTexMusgrave',
                                            'ShaderNodeTexGradient',
                                            'ShaderNodeTexMagic',
                                            'ShaderNodeTexChecker',
                                            'ShaderNodeTexBrick',
                                            'ShaderNodeTexPointDensity',
    ], x)

    #
    x += 300

    fr_color = nodes.new("NodeFrame")
    fr_color.label = "Color nodes"

    make_node_examples(fr_color, nodes, [
        'ShaderNodeMixRGB',
        'ShaderNodeRGBCurve',
        'ShaderNodeInvert',
        'ShaderNodeLightFalloff',
        'ShaderNodeHueSaturation',
        'ShaderNodeGamma',
        'ShaderNodeBrightContrast'
    ], x)

    #
    x += 200

    fr_vector = nodes.new("NodeFrame")
    fr_vector.label = "Vector nodes"

    make_node_examples(fr_vector, nodes, [
        'ShaderNodeMapping',
        'ShaderNodeBump',
        'ShaderNodeNormalMap',
        'ShaderNodeNormal',
        'ShaderNodeVectorCurve',
        'ShaderNodeVectorTransform',
    ], x)

    #
    x += 200

    fr_converter = nodes.new("NodeFrame")
    fr_converter.label = "Converter nodes"

    make_node_examples(fr_converter, nodes, [
        'ShaderNodeMath',
        'ShaderNodeValToRGB',
        'ShaderNodeRGBToBW',
        'ShaderNodeVectorMath',
        'ShaderNodeSeparateRGB',
        'ShaderNodeCombineRGB',
        'ShaderNodeSeparateXYZ',
        'ShaderNodeCombineXYZ',
        'ShaderNodeSeparateHSV',
        'ShaderNodeCombineHSV',
        'ShaderNodeWavelength',
        'ShaderNodeBlackbody'
    ], x)


    #
    x += 200

    fr_script = nodes.new("NodeFrame")
    fr_script.label = "Script"

    make_node_examples(fr_script, nodes, [
        'ShaderNodeScript',
    ], x)


    #
    x += 200

    fr_layout = nodes.new("NodeFrame")
    fr_layout.label = "Layout"

    make_node_examples(fr_layout, nodes, [
        'NodeFrame',
        'NodeReroute'
    ], x)

    #
    #

    coords = node_with_type(nodes, 'TEX_COORD')
    img = node_with_type(nodes, 'TEX_IMAGE')
    emit = node_with_type(nodes, 'EMISSION')
    out = node_with_type(nodes, 'OUTPUT_MATERIAL')

    mat.node_tree.links.new(coords.outputs['UV'], img.inputs[0])
    mat.node_tree.links.new(img.outputs[0], emit.inputs[0])
    mat.node_tree.links.new(emit.outputs[0], out.inputs[0])

    img.image = bpy.data.images[0]

    return mat

#
#
#

obj = bpy.context.active_object
obj.data.materials[0] = make_all_cycles_nodes()

Blender python API quick-start

Syntax highlighting by Pygments.