Update main.py to support new stuff.

This commit is contained in:
Steven Robertson 2012-04-14 22:58:04 -07:00
parent e7cb39b456
commit 356d2713d1

48
main.py
View File

@ -23,7 +23,7 @@ import numpy as np
import pycuda.driver as cuda import pycuda.driver as cuda
from cuburn import render, filters, output from cuburn import render, filters, output
from cuburn.genome import convert, use from cuburn.genome import convert, use, db
profiles = { profiles = {
'1080p': dict(width=1920, height=1080), '1080p': dict(width=1920, height=1080),
@ -40,21 +40,28 @@ def save(out):
def main(args, prof): def main(args, prof):
import pycuda.autoinit import pycuda.autoinit
gnm_str = args.flame.read() gdb = db.open(args.genomedb)
if '<' in gnm_str[:10]: if os.path.isfile(args.flame) and (args.flame.endswith('.flam3') or
args.flame.endswith('.flame')):
with open(args.flame) as fp:
gnm_str = fp.read()
flames = convert.XMLGenomeParser.parse(gnm_str) flames = convert.XMLGenomeParser.parse(gnm_str)
if len(flames) != 1: if len(flames) != 1:
warnings.warn('%d flames in file, only using one.' % len(flames)) warnings.warn('%d flames in file, only using one.' % len(flames))
gnm = convert.convert_flame(flames[0]) gnm = convert.flam3_to_node(flames[0])
else: else:
gnm = json.loads(gnm_str) gnm = gdb.open(args.flame)
if gnm['type'] == 'node':
gnm = convert.node_to_anim(gnm, half=args.half)
elif gnm['type'] == 'edge':
gnm = convert.edge_to_anim(gdb, gnm)
assert gnm['type'] == 'animation', 'Unrecognized genome type.'
gprof, times = use.wrap_genome(prof, gnm) gprof, times = use.wrap_genome(prof, gnm)
rmgr = render.RenderManager() rmgr = render.RenderManager()
basename = os.path.basename(args.flame.name).rsplit('.', 1)[0] + '_' basename = os.path.basename(args.flame).rsplit('.', 1)[0] + '_'
if args.flame.name == '-':
basename = ''
if args.name is not None: if args.name is not None:
basename = args.name basename = args.name
prefix = os.path.join(args.dir, basename) prefix = os.path.join(args.dir, basename)
@ -130,8 +137,8 @@ def main(args, prof):
if __name__ == "__main__": if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Render fractal flames.') parser = argparse.ArgumentParser(description='Render fractal flames.')
parser.add_argument('flame', metavar='FILE', type=argparse.FileType(), parser.add_argument('flame', metavar='ID', type=str,
help="Path to genome file ('-' for stdin)") help="Filename or flame ID of genome to render")
parser.add_argument('-g', action='store_true', dest='gfx', parser.add_argument('-g', action='store_true', dest='gfx',
help="Show output in OpenGL window") help="Show output in OpenGL window")
parser.add_argument('-n', metavar='NAME', type=str, dest='name', parser.add_argument('-n', metavar='NAME', type=str, dest='name',
@ -144,6 +151,9 @@ if __name__ == "__main__":
help="Don't overwrite output files that are newer than the input") help="Don't overwrite output files that are newer than the input")
parser.add_argument('--pause', action='store_true', parser.add_argument('--pause', action='store_true',
help="Don't close the preview window after rendering is finished") help="Don't close the preview window after rendering is finished")
parser.add_argument('--genomedb', '-d', metavar='PATH', type=str,
help="Path to genome database (file or directory, default '.')",
default='.')
parser.add_argument('--sync', action='store_true', dest='sync', parser.add_argument('--sync', action='store_true', dest='sync',
help='Use synchronous launches whenever possible') help='Use synchronous launches whenever possible')
@ -159,6 +169,8 @@ if __name__ == "__main__":
prof.add_argument('-p', dest='prof', choices=profiles.keys(), prof.add_argument('-p', dest='prof', choices=profiles.keys(),
default='preview', help='Set profile, specifying defaults for all ' default='preview', help='Set profile, specifying defaults for all '
'options below. (default: "preview")') 'options below. (default: "preview")')
prof.add_argument('--pfile', type=argparse.FileType(), metavar='PROFILE',
help='Set profile using a JSON file, overriding -p.')
prof.add_argument('--skip', dest='skip', metavar='N', type=int, prof.add_argument('--skip', dest='skip', metavar='N', type=int,
help="Skip N frames between each rendered frame") help="Skip N frames between each rendered frame")
prof.add_argument('--quality', type=int, metavar='SPP', prof.add_argument('--quality', type=int, metavar='SPP',
@ -168,11 +180,23 @@ if __name__ == "__main__":
prof.add_argument('--width', type=int, metavar='PX') prof.add_argument('--width', type=int, metavar='PX')
prof.add_argument('--height', type=int, metavar='PX') prof.add_argument('--height', type=int, metavar='PX')
node = parser.add_argument_group('Node options')
node.add_argument('--half', action='store_true',
help='Use a half-loop when rendering a node.')
node.add_argument('--still', action='store_true',
help='Override start, end, and temporal frame width to render one '
'frame without motion blur. (Works on edges too)')
args = parser.parse_args() args = parser.parse_args()
prof = dict(profiles[args.prof]) prof = dict(profiles[args.prof])
for k in prof: if args.pfile:
prof = json.load(open(args.pfile))
for k in ['duration', 'skip', 'quality', 'fps']:
if getattr(args, k) is not None: if getattr(args, k) is not None:
prof[k] = getattr(args, k) prof[k] = getattr(args, k)
prof['duration'] = args.duration if args.still:
args.start = 0
args.end = 1
prof['frame_width'] = 0
main(args, prof) main(args, prof)