This repository has been archived by the owner on Apr 22, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 77
/
protocol.txt
184 lines (151 loc) · 7.51 KB
/
protocol.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
=== Session creation ===
Url: Server url + "/server/config.php"
Parameters as GET:
* login: User's login in plain text.
* password: User's password in plain text.
* version: Client's version, for example 3.3.1762.
* os: Computer's operating system, at the moment only "windows", "mac" and "linux" are supported.
* bits: Architecture size, at the moment only "32bit" and "64bit" are supported.
* cpu_family: CPU's family, on linux it can be found in /proc/cpuinfo via the attribute "cpu family".
* cpu_model: CPU's model, on linux it can be found in /proc/cpuinfo via the attribute "model".
* cpu_model_name: CPU's model in human readable format, on linux it can be found in /proc/cpuinfo via the attribute "model name".
* cpu_cores: Number of cores (or thread) available.
* ram: Memory available (in kilobytes).
* ram_max: Maximum memory allowed for renderer (in kilobytes).
* extras (optional): Extra data used for the configuration.
* hostname (optional): Hostname of the machine, useful for distinguishing multiple machines with the same hardware configuration. Only used for display on the website.
* ui (optional): User interface used by the client, useful for statistics
* headless: Is the machine is running headless (Eevee is not compatible with headless)
Answer in case of error:
<?xml version="1.0" encoding="utf-8" ?>
<config status="X" />
where X:
* 100 => No version given.
* 101 => Client is too old.
* 102 => Authentication failure.
* 103 => WebSession has expired.
* 104 => Missing parameter.
* something else => Unknown error.
Answer with no error:
A status of "0" to specify everything is okay, plus a list of URL paths for request, validation job, etc.
A path is provided for error, job request, job validation, download needed file, heartbeat (keepmealive), logout, thumbnail of last frame rendered and how many credits have been earned so far.
The maximum duration between two heartbeats in seconds is given by the attribute "max-period".
<?xml version="1.0" encoding="utf-8" ?>
<config status="0">
<request type="request-job" path="/server/request_job.php" />
<request type="download-archive" path="/server/download.php" />
<request type="error" path="/server/error.php" />
<request type="keepmealive" path="/server/keepmealive.php" max-period="1440" />
<request type="logout" path="/account.php?mode=logout&worker=1" />
<request type="last-render-frame" path="/ajax.php?action=webclient_get_last_render_frame_ui&type=raw"/>
<request type="credits-earned" path="/ajax.php?action=credits_earned_on_session"/>
</config>
=== Session end ===
Url: use the request type "logout" from the configuration answer.
No additional parameter is required.
=== Download renderer archive ===
Url: use the request type "download-archive" from the configuration answer.
Parameter as GET or POST:
* type: "binary"
* job: ID of the job
Answer:
No error: the file
On error: an 404 http code
=== Download job archive ===
Url: use the request type "download-archive" from the configuration answer.
Parameter as GET or POST:
* type: "job"
* job: ID of the job
Answer:
No error: the file
On error: an 404 http code
=== Job request ===
Url: use the request type "request-job" from the configuration answer.
Parameter as GET or POST:
* computemethod: What compute types are available on this machine. 0 for CPU or GPU, 1 for CPU only, 2 for GPU only.
* cpu_cores: Number of cores currently available for rendering (optional).
* gpu_type: GPU's type, usually CUDA or OPENCL
* gpu_model: Model name of the GPU available for rendering
* gpu_ram: GPU memory size (in bytes)
Answer in case of error:
<?xml version="1.0" encoding="utf-8" ?>
<jobrequest status="X" />
where X:
* 0 => No error
* 200 => No job available, the client should wait few minutes before requesting a new job (typical value is 1hour).
* 201 => The client does not have rendering right.
* 202 => Client's session is dead. Client should send another config request before requesting a new job.
* 203 => Client's session has been disabled (usually because the client is sending broken frames). The client should alert the end user and logout.
* 205 => No renderer is available for Client's hardware (pair of OS and architecture). For example, Blender is not available for MacOS 32bits.
* 206 => Server is in maintenance mode, and is not issuing jobs (but it will keep the session alive). Try again in a few minutes.
* 207 => Server is overloaded, and is not issuing jobs (but it will keep the session alive). Try again in a few minutes.
* something else => unknown error
Answer with no error:
<?xml version="1.0" encoding="utf-8" ?>
<jobrequest status="0">
<frames remaining="1187" />
<job id="1" use_gpu="1" archive_md5="11d046f9912267a29f99a731c7e4e3b0" path="compute_method.blend" frame="0340" synchronous_upload="1" name="human name" password="some_passowrd">
<renderer md5="ceda00890578762c6fac96f1a13f671a" commandline=".e --factory-startup --disable-autoexec -b .c -o .o -f .f -x 1" update_method="remainingtime"/>
<script>import bpy
# disable the GPU for Cycles
bpy.context.user_preferences.system.compute_device_type = "NONE"
# if it's a movie clip, switch to png
fileformat = bpy.context.scene.render.image_settings.file_format
if fileformat != 'BMP' and fileformat != 'PNG' and fileformat != 'JPEG' and fileformat != 'TARGA' and fileformat != 'TARGA_RAW' :
bpy.context.scene.render.image_settings.file_format = 'PNG'
#bpy.context.scene.render.file_extension = '.png'
bpy.context.scene.render.filepath = ''
</script>
</job>
</jobrequest>
=== Job validation ===
Url: use the url url of job's node for 'validationurl'.
Parameter as GET or POST:
* job: Job ID
* frame: Job's frame number
* rendertime: Job's render time
* extras: Job's extra data
* file: Frame to validate as form-data post
* memoryused (optional): Max memory used for the render
* cores (optional): Number of cores used from the render
Parameter as form-urlencoded:
* file: the frame to send
Answer in case of error:
<jobvalidate status="X" />
where X:
* 0 => No error
* 300 => Missing parameter in request.
* 301 => Client generated a broken frame (usually an too old gpu who generated black frame).
* 302 => File uploaded was not an image.
* 303 => Failed to upload the image to the server.
* 304 => Client's session is disabled or dead.
* something else => unknown error
=== Session heartbeat ===
Url: use the request type "keepmealive" from the configuration answer.
Parameter as GET or POST:
* job: ID of the rendering job
* frame: Frame number of the rendering job
* extras: Extras data get on job request of the rendering job
* rendertime: current render time (optional)
* remainingtime: current remaining time to render the frame (optional)
Answer:
<?xml version="1.0" encoding="utf-8" ?>
<keepmealive status="X" />
where X:
* 0 => No error.
* 400 => Stop this job (usually because the job has been cancelled).
=== Error send ===
Url: use the request type "error" from the configuration answer.
Parameter as GET or POST:
* job: job ID
* frame: job's frame number
* extras: job's extra data
* rendertime (optional): job's frame number
* memoryused (optional): max memory used for the render (in kilo bytes)
Parameter as form-urlencoded:
* file: the error log to send
Answer:
<?xml version="1.0" encoding="utf-8" ?>
<error status="X" />
where X:
* 0 => No error