iluvblender
18-04-2007, 11:23 PM
Hi folks.
I cooked up this quick script to save my renders during a blender session for later review. I was tired of F3 -> Save -> increment thingy. I will add more features and polish the script later.
project webpage: (The screenshot on the link below shows how you can use the script)
http://iluvblender.googlepages.com/b...strenderscript (http://iluvblender.googlepages.com/bp_prepostrenderscript)
import Blender
from Blender import Scene, Draw, Text
from Blender.sys import *
import os
#----------------------------------------------------------
def WriteBlenderText(metadatafile, imagename, desc):
try:
metadata = Text.Get(metadatafile+".txt")
metadata.write("%s -> %s\n" % (imagename, desc))
except:
newfile = Text.New(metadatafile+".txt")
newfile.write("#For the %s.blend file, the images have been saved as follows \n\n" % (metadatafile))
newfile.write("%s -> %s\n" % (imagename, desc))
def WriteToFile(file, imagename, desc):
basepath = dirname(Blender.Get('filename'))
imagesdir = "images"
metadatafile = basepath+sep+imagesdir+sep+file+sep+file+'.txt'
outfile = None
if not exists(metadatafile):
outfile = open(metadatafile, "w+")
try:
outfile.write("#For the %s.blend file, the images have been saved as follows \n\n" % (file))
outfile.write("%s -> %s\n" % (imagename, desc))
finally:
outfile.close
else:
outfile = open(metadatafile, "a+")
try:
outfile.write("%s -> %s\n" % (imagename, desc))
finally:
outfile.close()
def UpdateMetaData(metadatafile, imagename, desc):
#WriteBlenderText(metadatafile, imagename, desc)
WriteToFile(metadatafile, imagename, desc)
def SetTempDirectory(filedir):
tempdir = filedir+sep+"tmp"+sep
if not exists(tempdir):
os.mkdir(tempdir)
print "The OS gave birth to %s" % (tempdir)
Blender.Set('tempdir', tempdir)
def SetRenderDirectory(context, filename):
basepath = dirname(filename)
fileimagedir = splitext(basename(filename))[0]
relativepath = "images"+sep+fileimagedir+sep
abspath = basepath+sep+relativepath
if not exists(dirname(filename)+sep+"images"+sep+fileimagedir+sep):
os.mkdir(dirname(filename)+sep+"images"+sep+fileimagedir+sep)
savepath = "//"+relativepath
context.setRenderPath(savepath)
def InitializePaths(context):
filename = Blender.Get('filename')
SetTempDirectory(dirname(filename))
SetRenderDirectory(context, filename)
def HandlePreRender(context):
InitializePaths(context)
context.setImageType(Scene.Render.PNG)
Scene.Render.EnableDispWin()
Scene.Render.SetRenderWinPos(['sw'])
def HandlePostRender(context):
sleep(2000)
Scene.Render.CloseRenderWindow()
justname = basename(splitext(Blender.Get('filename'))[0])
imagename = "%s_%s%s" % (justname, str(time()), ".png")
savedesc = Draw.PupStrInput("???:", "render", 100)
UpdateMetaData(justname, imagename, savedesc)
context.saveRenderedImage(imagename)
#----------------------------------------------------------
event = Blender.event
if not Blender.Get('filename'):
print "NOTE: You must save the file before you use SmartRender."
else:
if Blender.link:
context = Scene.GetCurrent().getRenderingContext()
if event == "Render":
HandlePreRender(context)
elif event == "PostRender":
HandlePostRender(context)
else:
print "You must link this script to a Scene's Render event!!!"
Greetings,
Satish.
I cooked up this quick script to save my renders during a blender session for later review. I was tired of F3 -> Save -> increment thingy. I will add more features and polish the script later.
project webpage: (The screenshot on the link below shows how you can use the script)
http://iluvblender.googlepages.com/b...strenderscript (http://iluvblender.googlepages.com/bp_prepostrenderscript)
import Blender
from Blender import Scene, Draw, Text
from Blender.sys import *
import os
#----------------------------------------------------------
def WriteBlenderText(metadatafile, imagename, desc):
try:
metadata = Text.Get(metadatafile+".txt")
metadata.write("%s -> %s\n" % (imagename, desc))
except:
newfile = Text.New(metadatafile+".txt")
newfile.write("#For the %s.blend file, the images have been saved as follows \n\n" % (metadatafile))
newfile.write("%s -> %s\n" % (imagename, desc))
def WriteToFile(file, imagename, desc):
basepath = dirname(Blender.Get('filename'))
imagesdir = "images"
metadatafile = basepath+sep+imagesdir+sep+file+sep+file+'.txt'
outfile = None
if not exists(metadatafile):
outfile = open(metadatafile, "w+")
try:
outfile.write("#For the %s.blend file, the images have been saved as follows \n\n" % (file))
outfile.write("%s -> %s\n" % (imagename, desc))
finally:
outfile.close
else:
outfile = open(metadatafile, "a+")
try:
outfile.write("%s -> %s\n" % (imagename, desc))
finally:
outfile.close()
def UpdateMetaData(metadatafile, imagename, desc):
#WriteBlenderText(metadatafile, imagename, desc)
WriteToFile(metadatafile, imagename, desc)
def SetTempDirectory(filedir):
tempdir = filedir+sep+"tmp"+sep
if not exists(tempdir):
os.mkdir(tempdir)
print "The OS gave birth to %s" % (tempdir)
Blender.Set('tempdir', tempdir)
def SetRenderDirectory(context, filename):
basepath = dirname(filename)
fileimagedir = splitext(basename(filename))[0]
relativepath = "images"+sep+fileimagedir+sep
abspath = basepath+sep+relativepath
if not exists(dirname(filename)+sep+"images"+sep+fileimagedir+sep):
os.mkdir(dirname(filename)+sep+"images"+sep+fileimagedir+sep)
savepath = "//"+relativepath
context.setRenderPath(savepath)
def InitializePaths(context):
filename = Blender.Get('filename')
SetTempDirectory(dirname(filename))
SetRenderDirectory(context, filename)
def HandlePreRender(context):
InitializePaths(context)
context.setImageType(Scene.Render.PNG)
Scene.Render.EnableDispWin()
Scene.Render.SetRenderWinPos(['sw'])
def HandlePostRender(context):
sleep(2000)
Scene.Render.CloseRenderWindow()
justname = basename(splitext(Blender.Get('filename'))[0])
imagename = "%s_%s%s" % (justname, str(time()), ".png")
savedesc = Draw.PupStrInput("???:", "render", 100)
UpdateMetaData(justname, imagename, savedesc)
context.saveRenderedImage(imagename)
#----------------------------------------------------------
event = Blender.event
if not Blender.Get('filename'):
print "NOTE: You must save the file before you use SmartRender."
else:
if Blender.link:
context = Scene.GetCurrent().getRenderingContext()
if event == "Render":
HandlePreRender(context)
elif event == "PostRender":
HandlePostRender(context)
else:
print "You must link this script to a Scene's Render event!!!"
Greetings,
Satish.