I manage to do the work by adding some step
- Draw the storyboard, 1 blender scene per shot
- export data in a csv file from the storyboard file
- open an empty file the launch a script that use the csv file to create all the files I need
storyboard script:
import bpy
import os
from pathlib import Path
import csv
#global_data
filepath = bpy.data.filepath
directory = os.path.dirname(filepath)
scriptsFolder = directory+"/scripts/"
if not os.path.exists(scriptsFolder):
os.makedirs(scriptsFolder)
#create csv file
datafile = scriptsFolder+"film_data.csv"
open(datafile,"w")
#store scenes data
scenes_list = bpy.data.scenes
#for sc in scenes_list:
# if sc.name != "Scene" and sc.name != "Template":
# print(sc.name)
# print(sc.frame_start)
# print(sc.frame_end)
#write csv file
with open (datafile, 'w', newline='') as dataf:
writer = csv.writer(dataf)
for sc in scenes_list:
if sc.name != "Scene" and sc.name != "Template":
writer = csv.writer(dataf)
writer.writerow([sc.name,sc.frame_start,sc.frame_end])
csv test file
001_001_001,1,250
001_001_002,1,450
001_002_001,1,100
import bpy
import os
from pathlib import Path
import csv
#global_data
filepath = bpy.data.filepath
directory = os.path.dirname(filepath)
filmID = "monFilm"
filmXres = 1920
filmYres = 1080
filmFrameRate = 24
#working step ws
ws1= "animation"
ws2= "compositing"
filmLocation = "/home/xxxxxxx/projets/film_pipeline/"
animationFilesFolder = filmLocation+ws1+"/"
compositingFilesFolder = filmLocation+ws2+"/"
scriptsFolder = filmLocation+"scripts/"
rendersFolder = filmLocation+"renders/"
renderAnimFolder = rendersFolder+ws1+"/"
renderCompFolder = rendersFolder+ws2+"/"
# create animation, compositing and scripts folder
if not os.path.exists(animationFilesFolder):
os.makedirs(animationFilesFolder)
if not os.path.exists(compositingFilesFolder):
os.makedirs(compositingFilesFolder)
if not os.path.exists(scriptsFolder):
os.makedirs(scriptsFolder)
if not os.path.exists(rendersFolder):
os.makedirs(rendersFolder)
if not os.path.exists(rendersFolder):
os.makedirs(renderAnimFolder)
if not os.path.exists(rendersFolder):
os.makedirs(renderCompFolder)
#set scene data
bpy.data.scenes["Scene"].render.resolution_x = filmXres
bpy.data.scenes["Scene"].render.resolution_y = filmXres
bpy.data.scenes["Scene"].render.fps = filmFrameRate
#use csv to create files
tab =[]
def set_up_files (workingstep, rs1, rs2, rs3, rs4,ws):
with open(directory+'/scripts/film_data.csv',newline='') as fdata:
reader = csv.reader(fdata,delimiter=',')
i = 0
for row in reader:
tab.append(row)
bpy.data.scenes["Scene"].frame_start = int(tab[i][1])
bpy.data.scenes["Scene"].frame_end = int(tab[i][2])
fileName= filmID+"_"+workingstep+"_"+str(tab[i][0])+"_01"
bpy.data.scenes["Scene"].render.filepath = "//renders/"+workingstep+"/"+str(fileName)+"/"+str(fileName)+"_"
bpy.context.scene.render.image_settings.file_format = rs1
bpy.context.scene.render.image_settings.color_depth = rs2
bpy.context.scene.render.image_settings.exr_codec = rs3
bpy.context.scene.render.image_settings.color_mode = rs4
bpy.context.window.workspace = bpy.data.workspaces[ws]
bpy.ops.wm.save_as_mainfile(filepath=filmLocation+workingstep+"/"+str(fileName)+".blend")
i +=1
set_up_files(ws1, 'OPEN_EXR_MULTILAYER', '32', 'DWAA', 'RGBA', 'Layout')
set_up_files(ws2, 'OPEN_EXR', '32', 'DWAA', 'RGB', 'Compositing')
bpy.context.window.workspace = bpy.data.workspaces['Scripting']
bpy.ops.wm.save_as_mainfile(filepath=filepath)
I'm sure it could be improve a lot but as the beginner this the best I can do at the moment.
libraries.loadapi only allows you to read datablock names and append them to thedata_toin order to tell Blender which to load. So you can't read datablock properties. You may want to investigate a tool like this: projects.blender.org/blender/blender-asset-tracer also related: How can I read the properties of a node group in a blend file? $\endgroup$