diff --git a/release/scripts/io/netrender/master.py b/release/scripts/io/netrender/master.py index aa109c8b6f3..3ff3758f66e 100644 --- a/release/scripts/io/netrender/master.py +++ b/release/scripts/io/netrender/master.py @@ -258,6 +258,12 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): bpy.ops.image.open(path = job.save_path + "%04d" % frame_number + ".exr") img = bpy.data.images["%04d" % frame_number + ".exr"] img.save(filename) + + try: + process = subprocess.Popen(["convert", filename, "-resize", "300x300", filename]) + process.wait() + except: + pass f = open(filename, 'rb') self.send_head(content = "image/jpeg") diff --git a/release/scripts/io/netrender/master_html.py b/release/scripts/io/netrender/master_html.py index f55712caa0f..3fff6d0b88c 100644 --- a/release/scripts/io/netrender/master_html.py +++ b/release/scripts/io/netrender/master_html.py @@ -37,8 +37,11 @@ def get(handler): output("") - def link(text, url): - return "%s" % (url, text) + def link(text, url, script=""): + return "%s" % (url, script, text) + + def tag(name, text, attr=""): + return "<%s %s>%s" % (name, attr, text, name) def startTable(border=1, class_style = None, caption = None): output("Frames") startTable() - headerTable("no", "status", "render time", "slave", "log", "result") + headerTable("no", "status", "render time", "slave", "log", "result", "") for frame in job.frames: rowTable( @@ -269,7 +272,8 @@ def get(handler): frame.slave.name if frame.slave else " ", link("view log", logURL(job_id, frame.number)) if frame.log_path else " ", link("view result", renderURL(job_id, frame.number)) + " [" + - link("jpeg", renderURL(job_id, frame.number, exr = False)) + "]" if frame.status == DONE else " " + tag("span", "show", attr="class='thumb' onclick='showThumb(%s, %i)'" % (job.id, frame.number)) + "]" if frame.status == DONE else " ", + "" % (frame.number, job.id, frame.number) ) endTable() diff --git a/release/scripts/io/netrender/netrender.css b/release/scripts/io/netrender/netrender.css index 87de1083315..cc8a93bb9a7 100644 --- a/release/scripts/io/netrender/netrender.css +++ b/release/scripts/io/netrender/netrender.css @@ -60,7 +60,6 @@ button { cursor: pointer; } - .cache { display: none; } @@ -72,4 +71,14 @@ button { .rules { width: 60em; text-align: left; -} \ No newline at end of file +} + +img.thumb { + display: none; + cursor: pointer; +} + +span.thumb { + text-decoration: underline; + cursor: pointer; +} diff --git a/release/scripts/io/netrender/netrender.js b/release/scripts/io/netrender/netrender.js index cf4ab39a6fa..9bdd048d3c4 100644 --- a/release/scripts/io/netrender/netrender.js +++ b/release/scripts/io/netrender/netrender.js @@ -1,3 +1,7 @@ +lastFrame = -1 +maxFrame = -1 +minFrame = -1 + function request(url, data) { xmlhttp = new XMLHttpRequest(); @@ -46,6 +50,70 @@ function balance_enable(id, value) request("/balance_enable", "{" + id + ":" + value + "}"); } +function showThumb(job, frame) +{ + if (lastFrame != -1) { + if (maxFrame != -1 && minFrame != -1) { + if (frame >= minFrame && frame <= maxFrame) { + for(i = minFrame; i <= maxFrame; i=i+1) { + toggleThumb(job, i); + } + minFrame = -1; + maxFrame = -1; + lastFrame = -1; + } else if (frame > maxFrame) { + for(i = maxFrame+1; i <= frame; i=i+1) { + toggleThumb(job, i); + } + maxFrame = frame; + lastFrame = frame; + } else { + for(i = frame; i <= minFrame-1; i=i+1) { + toggleThumb(job, i); + } + minFrame = frame; + lastFrame = frame; + } + } else if (frame == lastFrame) { + toggleThumb(job, frame); + } else if (frame < lastFrame) { + minFrame = frame; + maxFrame = lastFrame; + + for(i = minFrame; i <= maxFrame-1; i=i+1) { + toggleThumb(job, i); + } + lastFrame = frame; + } else { + minFrame = lastFrame; + maxFrame = frame; + + for(i = minFrame+1; i <= maxFrame; i=i+1) { + toggleThumb(job, i); + } + lastFrame = frame; + } + } else { + toggleThumb(job, frame); + } +} + +function toggleThumb(job, frame) +{ + img = document.images["thumb" + frame]; + url = "/render_" + job + "_" + frame + ".jpg" + + if (img.style.display == "block") { + img.style.display = "none"; + img.src = ""; + lastFrame = -1; + } else { + img.src = url; + img.style.display = "block"; + lastFrame = frame; + } +} + function returnObjById( id ) { if (document.getElementById) diff --git a/release/scripts/io/netrender/utils.py b/release/scripts/io/netrender/utils.py index e9103db8da7..7e644c83e5f 100644 --- a/release/scripts/io/netrender/utils.py +++ b/release/scripts/io/netrender/utils.py @@ -148,8 +148,8 @@ def fileURL(job_id, file_index): def logURL(job_id, frame_number): return "/log_%s_%i.log" % (job_id, frame_number) -def renderURL(job_id, frame_number, exr = True): - return "/render_%s_%i.%s" % (job_id, frame_number, "exr" if exr else "jpg") +def renderURL(job_id, frame_number): + return "/render_%s_%i.exr" % (job_id, frame_number) def cancelURL(job_id): return "/cancel_%s" % (job_id)