Blendering & Prompting for Atomic Structures
Electrolyte Complexity at Electrochemical Interfaces - Explicit solvation, PCET, Ion effects
Support curvature, high-metal loading, MNC asymmetry, mesopores
Detailed surface atomic structure visualization
Angew. Chem. Int. Ed. 64 (2025) - Rh/CeO2 CO-SCR
Catal. Today 425 (2024) - IF=5.2
Catal. Today 411-412 (2023) - IF=5.3
J. Mater. Chem. A 11 (2023) - IF=11.9
Atomic Blender Installation & Basics
Python Automation for Batch Rendering
import bpy
from pathlib import Path
from math import pi
def setup_scene():
"""Apply camera, light, and material settings"""
# Camera setting
bpy.data.objects['Camera'].location.x = -0
bpy.data.objects['Camera'].location.y = -25
bpy.data.objects['Camera'].location.z = 13
bpy.data.scenes["Scene"].camera.rotation_mode = 'XYZ'
bpy.data.scenes["Scene"].camera.rotation_euler[0] = 65*(pi/180.0)
bpy.data.scenes["Scene"].camera.rotation_euler[1] = 0*(pi/180.0)
bpy.data.scenes["Scene"].camera.rotation_euler[2] = -5*(pi/180.0)
# Light setting
bpy.data.objects['Light'].data.type = 'SUN'
bpy.data.objects['Light'].data.energy = 2
bpy.data.objects['Light'].location.x = -10
bpy.data.objects['Light'].location.y = -10
bpy.data.objects['Light'].location.z = 20
bpy.data.objects['Light'].rotation_mode = 'XYZ'
bpy.data.objects['Light'].rotation_euler[0] = 30*(pi/180.0)
bpy.data.objects['Light'].rotation_euler[1] = -30*(pi/180.0)
bpy.data.objects['Light'].rotation_euler[2] = 0*(pi/180.0)
# Materials setting (only if materials exist)
if "Nitrogen" in bpy.data.materials:
bpy.data.materials["Nitrogen"].node_tree.nodes["Principled BSDF"].inputs[0].default_value = (1, 0.401978, 0.08022, 1)
if "Cobalt" in bpy.data.materials:
bpy.data.materials["Cobalt"].node_tree.nodes["Principled BSDF"].inputs[0].default_value = (0, 0, 0.428691, 1)
if "Molybdenum" in bpy.data.materials:
bpy.data.materials["Molybdenum"].node_tree.nodes["Principled BSDF"].inputs[0].default_value = (0.527112, 0.527116, 0.527115, 1)
# Render setting
bpy.context.scene.render.engine = 'BLENDER_EEVEE'
bpy.context.scene.eevee.taa_render_samples = 32
# Image format settings
bpy.context.scene.render.image_settings.file_format = 'JPEG'
bpy.context.scene.render.image_settings.quality = 95
def clear_mesh_objects():
"""Remove all mesh objects from scene"""
bpy.ops.object.select_all(action='DESELECT')
for obj in bpy.data.objects:
if obj.type == 'MESH':
obj.select_set(True)
bpy.ops.object.delete()
# Directories to process
input_dirs = [
Path('/Users/sean/Downloads/supported'),
Path('/Users/sean/Downloads/structures_optimized')
]
output_dir = Path('/Users/sean/Downloads/rendered_images')
output_dir.mkdir(exist_ok=True)
# Collect all .xyz files from both directories
all_xyz_files = []
for input_dir in input_dirs:
xyz_files = list(input_dir.glob('*.xyz'))
all_xyz_files.extend(xyz_files)
print(f"Found {len(xyz_files)} files in {input_dir.name}")
print(f"\nTotal: {len(all_xyz_files)} .xyz files to render\n")
# Process each file
for i, xyz_file in enumerate(all_xyz_files):
print(f"Processing {i+1}/{len(all_xyz_files)}: {xyz_file.name}")
# Clear previous mesh objects
clear_mesh_objects()
# Import the .xyz file
try:
bpy.ops.import_mesh.xyz(filepath=str(xyz_file))
except Exception as e:
print(f"Error importing {xyz_file.name}: {e}")
continue
# Apply settings
setup_scene()
# Render and save
output_path = output_dir / f"{xyz_file.stem}.jpg"
bpy.context.scene.render.filepath = str(output_path)
bpy.ops.render.render(write_still=True)
print(f"Saved: {output_path.name}")
print(f"\nDone! Rendered {len(all_xyz_files)} files to {output_dir}")
Example batch-rendered nanorod structures with varying dimensions
VISUAL_PROMPT v5.5 Specification
// VISUAL_PROMPT v5.5 — Boundary-Breaker Always-On (EN, model-agnostic)
// Single-file spec with strengthened operating stance & unbounded knowledge expansion.
// ===== OPERATING STANCE (declare intent up front) =====
// 1) Boundary-first: At every stage, prefer frontier-seeking moves over safe reuse.
// 2) Unbounded by examples: Never confine exploration to the illustrated examples
// (e.g., "Medium","Lighting","Optics","Camera/Blocking","Palette","Post/Comp"). Treat such lines
// as hints—not fences. Expand the search space to adjacent and far domains that
// fit the input's intent, materials, culture, physics, and craft constraints.
// 3) Maximal knowledge draw: Actively surface your widest stored knowledge—
// historical methods, emerging lab techniques, vernacular craft, optical hacks,
// cinematic grammar, industrial processes, bio/chem/geo analogies—then adapt them
// to the payload context with plausibility guards.
// 4) Narrative output only: Describe the scene; do NOT list keywords. Numbers/units
// appear only when they clarify causality, craft, or optics.
// 5) Model-agnostic: No engine-specific tokens. The spec must run conceptually
// across platforms.
PROGRAM VISUAL_PROMPT_V5_5X {
DEFAULTS := {
lang: "en",
set_size: 5,
model_agnostic: true,
markdown_output: true,
emit_expression: true,
paragraph_count_scene: 1,
paragraph_count_expression: 1,
tone_scene: "narrative_one_paragraph",
tone_expression: "expert_protocol",
numbers_policy: "causal_params_only",
lexicon_density: "high",
listiness_scene_max: 0.25,
listiness_expression_max: 0.35
}
INPUT {
payload: "",
aspect?: {w:int, h:int},
set_size?: int,
lang?: "en",
length?: {"short"|"medium"|"long"},
domain?: "auto"|string|array,
title?: {"auto"|"provide"|"reserve_only"},
plausibility_mode?: {"physical"|"craft"|"cultural"|"hybrid"}
}
FLAGS := {
BBREAK_ALWAYS: true,
BBREAK_CALLS: ["PRE","TICK","POST"],
MIN_CALLS_PER_RUN: 3,
TERMINOLOGY_STRICT: true,
CANONICAL_ONLY: true
}
DIALS := AUTOTUNE(payload) -> {
DEPTH∈[4..6], BEAM∈[9..16], TEMP∈[0.6..0.95], ABS∈[45..65],
NOVELTY∈[0.6..0.9], FIDELITY∈[0.7..0.9], BREAK_LEVEL∈[0.45..0.95],
SURPRISE∈[0.5..0.9], PLAUSIBILITY_MODE∈{physical|craft|cultural|hybrid},
NUM_ANCHORS∈[20..36], LENGTH∈{short/medium/long}
}
DOMAIN_TAXON := [
"cinema","cinema_grading","photography","photography_analog","stagecraft","vfx","animation_3d","motion_graphics",
"illustration_paint","mural_fresco","graffiti_street","comics_manga","calligraphy",
"printmaking_screen","printmaking_intaglio","printmaking_lithography","printmaking_relief","risograph","letterpress","bookbinding","papermaking","origami_kirigami",
"graphic_typography","editorial_layout","data_visualization","cartography","information_design",
"architecture","interior_design","landscape_architecture","urban_design","lighting_design","light_art","projection_mapping","holography",
"industrial_design","packaging_design","furniture_design","jewelry","watchmaking","luthiery","shoemaking","toy_design",
"ceramics_pottery","ceramics_porcelain","ceramics_raku","ceramics_celadon",
"metalsmithing_blacksmith","metalsmithing_jewelry","bronze_casting","stone_carving","sculpture_resin","kinetic_art",
"glass_hotshop","glass_neon","glass_stained","lampworking",
"woodwork_joinery","woodwork_carving","marquetry","bamboo_craft",
"textile_weave","textile_knit","dye_shibori","dye_batik","ikat","embroidery","fashion_tailoring","millinery","costume_design",
"makeup_beauty","sfx_prosthetics","body_paint","tattoo_art","nail_art","hairstyling_color",
"perfumery","cosmetics_formulation",
"culinary_hot","pastry","bread_baking","confectionery_chocolate","mixology","coffee_roasting","tea_blending",
"sound_music","sound_design","foley_fieldrec","spatial_audio","dj_performance","modular_synthesis",
"game_design","level_design","ux_ui_interaction","creative_coding","shader_art","generative_art","xr_ar_vr","volumetric_capture","photogrammetry",
"physical_computing","mechatronics","robotics_kinetic","laser_art","led_architecture",
"floral_design_ikebana","bonsai","aquascaping","terrarium",
"mosaic","tessellation","stained_pigment_glass"
]
DOMAIN_ALIAS := {
"film":"cinema", "grade":"cinema_grading", "cg":"animation_3d",
"uiux":"ux_ui_interaction", "viz":"data_visualization", "pmapping":"projection_mapping",
"vr":"xr_ar_vr", "ar":"xr_ar_vr", "ai_art":"generative_art"
}
DOMAIN_PROTOCOL_MAP := {
"cinema": ["Medium","Lighting","Optics","Camera/Blocking","Palette","Post/Comp"],
"cinema_grading": ["Camera/ColorSpace","Primary/Secondary","Keys/Windows","Texture/Grain","Look/Print","Delivery/DCP"],
"photography": ["Medium","Lighting","Optics","Camera/Exposure","Palette","Retouch"],
"vfx": ["Plates","Matchmove/Layout","FX/Sim","Lookdev/Lighting","Render","Composite"],
"animation_3d": ["Rig/Key","Camera","Material/BRDF","Lighting","Cache/Sim","Render/Post"],
"illustration_paint": ["Support","Ground","Pigment/Binder","Stroke/Layers","Glaze","Varnish/Scan"],
"ceramics_pottery": ["Clay Body","Throw/Handbuild","Trim","Bisque","Glaze","Fire/Cool"],
"metalsmithing_jewelry":["Saw/Files","Form/Anneal","Solder/Pick","Set","Polish","Plate"],
"glass_hotshop": ["Gather","Marver/Block","Form","Punty","Anneal","Coldwork"],
"shader_art": ["UV/Space","Normals/TBN","Lighting/BRDF","SDF/Raymarch","Temporal","Post"],
"generative_art": ["Rule/Grammar","Random/Seed","Morphology","Constraint","Curation","Archive"],
"data_visualization": ["Data Model","Encoding/Mapping","Scale/Axis","Interaction","Color/Accessibility","Export"]
}
TERMINOLOGY_ATLAS := {
"cinema": ["ACEScct","dichroic","Brewster angle","cross-polarization","tilt-shift","diopter","caustics","MTF"],
"vfx": ["camera solve","AOV","deep comp","USD","OpenEXR","cryptomatte","roto/paint","vector blur"],
"animation_3d": ["FK/IK","blendshapes","BSDF","SSS","importance sampling","radiance cache","denoiser","ACES"],
"shader_art": ["UV/Space","Normals/TBN","Lighting/BRDF","SDF/Raymarch","Temporal","Post"]
}
} Generated Prompts for Scientific Visualization
Prompt request: "distillation of a graph neural network model for atomic energy and force estimation"
A vast, chaotic nebula of glowing particulate nodes and faint, tangled edges—representing a massive "teacher" graph neural network—fills the left side of the frame. This turbulent cloud is drawn into the flared aperture of a crystalline, lens-like construct in the center. As the information passes through, it is filtered and compressed, emerging from the right as a single, coherent, intensely bright beam. This beam illuminates a complex, rotating molecular structure, projecting precise, glowing vectors onto each atom, visualizing the distilled model's accurate force estimations. The background is a dark, abstract space, subtly gridded to imply a coordinate system.
In a dark, reflective environment, a massive, intricately faceted, and ancient-looking crystal floats, representing the "teacher" model. Its internal structure is a dense lattice of light, and complex graph patterns shift across its surfaces. It projects a focused, complex beam of light onto a much smaller, simpler, polished gem—the "student" model—held in an elegant, minimalist armature below.
CO2 utilization flowchart
Generative GNN pipeline visualization
Blender + Prompting = Publication-Quality Figures
Atomic Blender for 3D structure rendering
Python scripting for batch automation
AI prompting for creative visualization
Make your research visually compelling.