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%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)