flamenco.git
22 hours agoAlso clear out failed_by_workers when using 'requeue failed tasks' on job master production
Sybren A. Stüvel [Thu, 25 Apr 2019 09:14:59 +0000 (11:14 +0200)]
Also clear out failed_by_workers when using 'requeue failed tasks' on job

23 hours agoRe-queueing a task now erases its `failed_by_workers` list
Sybren A. Stüvel [Thu, 25 Apr 2019 08:50:13 +0000 (10:50 +0200)]
Re-queueing a task now erases its `failed_by_workers` list

The 'failed_by_workers' list is also erased when the entire job is
re-queued.

Erasing the list ensures that workers that previously failed the task
can try again. This is essential when the task was failing due to
external conditions, for example failure due to a bug in Flamenco Worker
that's since been resolved.

7 days agoGracefully handle missing 'flamenco_last_project' in session
Sybren A. Stüvel [Thu, 18 Apr 2019 15:29:00 +0000 (17:29 +0200)]
Gracefully handle missing 'flamenco_last_project' in session

7 days agoPrevent Manager settings downgrade when already old enough
Sybren A. Stüvel [Thu, 18 Apr 2019 15:15:12 +0000 (17:15 +0200)]
Prevent Manager settings downgrade when already old enough

The code tries to convert version 2 to version 1 settings (for older
Blender Cloud add-ons that require version 1) even when the Manager was
using version 1 settings.

7 days agoDocument new-style variables
Sybren A. Stüvel [Thu, 18 Apr 2019 11:53:08 +0000 (13:53 +0200)]
Document new-style variables

7 days agoSupport version 2 of Flamenco Manager variables
Sybren A. Stüvel [Thu, 18 Apr 2019 08:49:54 +0000 (10:49 +0200)]
Support version 2 of Flamenco Manager variables

A restructuring of the Manager variables was necessary to allow
different values for users and workers. Until now both had the same
paths, which is fine when both are located in the same studio. However,
when deploying workers on a cloud infrastructure (Azure, AWS, etc.) this
becomes cumbersome.

When a Manager does not declare a `settings_version`, version 1 is
assumed. This commit introduces version 2.

The naming 'path replacement variable' was confusing people. Now each
variable has a mandatory property 'direction' that has one of the
following values:

- `"one"`: unidirectional variable. `${VARIABLENAME}` is replaced by the
  variable value for the appropriate platform. This used to be the
  'variable'.
- `"two"`: bidirection variable. As described above, but also the value
  is replaced by `${VARIABLENAME}` by the Blender Cloud add-on when
  sending a job to Flamenco Server. This used to be the 'path
  replacement variable'.

Each variable now has a setting 'audience', which can be either
'workers' or 'users' to be applied only to those, or 'all' when the
value is the same for both.

3 weeks agoClean up: Whitespace
Tobias Johansson [Thu, 4 Apr 2019 09:34:13 +0000 (11:34 +0200)]
Clean up: Whitespace

3 weeks agoUse kebab-case for vue names
Tobias Johansson [Thu, 4 Apr 2019 09:33:42 +0000 (11:33 +0200)]
Use kebab-case for vue names

https://vuejs.org/v2/guide/components-custom-events.html#Event-Names

3 weeks agoSilence warning about changing prop value
Tobias Johansson [Thu, 4 Apr 2019 08:18:24 +0000 (10:18 +0200)]
Silence warning about changing prop value

3 weeks agoWhitespace cleanup
Tobias Johansson [Wed, 3 Apr 2019 15:51:28 +0000 (17:51 +0200)]
Whitespace cleanup

3 weeks agoBetter initial component values
Tobias Johansson [Wed, 3 Apr 2019 15:50:14 +0000 (17:50 +0200)]
Better initial component values

3 weeks agoDocumentation of es6 transcompile and packaging
Tobias Johansson [Fri, 29 Mar 2019 09:44:03 +0000 (10:44 +0100)]
Documentation of es6 transcompile and packaging

4 weeks agoAdd Created and Updated column
Tobias Johansson [Thu, 28 Mar 2019 11:48:15 +0000 (12:48 +0100)]
Add Created and Updated column

4 weeks agoStore filter/column settings in localStorage
Tobias Johansson [Thu, 28 Mar 2019 09:29:13 +0000 (10:29 +0100)]
Store filter/column settings in localStorage

The filter and column settings in tables are stored per project and
context in the browsers localStorage. This makes the table keep the
settings even if the browser is refreshed or restarted.

The table emits a "componentStateChanged" event containing the tables
current state (filter/column settings) which then is saved by the top
level component.

4 weeks agoUpdate gulp-sass to 4.0.2 in package.json
Francesco Siddi [Wed, 27 Mar 2019 13:53:41 +0000 (14:53 +0100)]
Update gulp-sass to 4.0.2 in package.json

Version 4.0.1 was failing to build libsass on macOS.

4 weeks agoNPM decided to add a LOT of new dependencies to package-lock.json
Sybren A. Stüvel [Tue, 26 Mar 2019 10:26:58 +0000 (11:26 +0100)]
NPM decided to add a LOT of new dependencies to package-lock.json

4 weeks agoProper indentation in package.json
Sybren A. Stüvel [Tue, 26 Mar 2019 10:26:18 +0000 (11:26 +0100)]
Proper indentation in package.json

4 weeks agoUsing Toastr instead of `statusBarSet()`
Sybren A. Stüvel [Tue, 26 Mar 2019 10:26:08 +0000 (11:26 +0100)]
Using Toastr instead of `statusBarSet()`

The former Just Works™, whereas the latter only works if there is no
task opened in the left-hand part of the page.

4 weeks agoAdded Shaman documentation
Sybren A. Stüvel [Mon, 25 Mar 2019 16:42:03 +0000 (17:42 +0100)]
Added Shaman documentation

4 weeks agoUpdated docs dependencies
Sybren A. Stüvel [Mon, 25 Mar 2019 16:30:16 +0000 (17:30 +0100)]
Updated docs dependencies

4 weeks agoBumped version to 2.3.dev0
Sybren A. Stüvel [Mon, 25 Mar 2019 15:32:44 +0000 (16:32 +0100)]
Bumped version to 2.3.dev0

4 weeks agoBumped version to 2.2 v2.2
Sybren A. Stüvel [Mon, 25 Mar 2019 15:21:21 +0000 (16:21 +0100)]
Bumped version to 2.2

4 weeks agoMark version 2.2 as released
Sybren A. Stüvel [Mon, 25 Mar 2019 15:21:14 +0000 (16:21 +0100)]
Mark version 2.2 as released

4 weeks agoMake sure sort buttons is always clickable
Tobias Johansson [Fri, 22 Mar 2019 13:10:18 +0000 (14:10 +0100)]
Make sure sort buttons is always clickable

Hide part overflow of column label if there is not enough room

4 weeks agoAdd missing tooltips in table
Tobias Johansson [Fri, 22 Mar 2019 13:07:28 +0000 (14:07 +0100)]
Add missing tooltips in table

5 weeks agoUse monospace font for flamenco table
Tobias Johansson [Thu, 21 Mar 2019 09:53:18 +0000 (10:53 +0100)]
Use monospace font for flamenco table

5 weeks agoFlamenco jobs table filter/sortable
Tobias Johansson [Thu, 21 Mar 2019 08:59:36 +0000 (09:59 +0100)]
Flamenco jobs table filter/sortable

Using vue pillar table for flamenco (archived-)jobs.
Multi-select in table is disabled since at the moment multi-editing
is not implemented for flamenco jobs.

5 weeks agoAdded es6 trans compiling
Tobias Johansson [Thu, 21 Mar 2019 08:54:37 +0000 (09:54 +0100)]
Added es6 trans compiling

5 weeks agoAllow jwt/get-token endpoint also when authing using Basic auth
Sybren A. Stüvel [Tue, 19 Mar 2019 11:38:59 +0000 (12:38 +0100)]
Allow jwt/get-token endpoint also when authing using Basic auth

The Pillar API uses basic auth, not Bearer tokens (even though tokens are
used).

5 weeks agoUse Pillar's new `cors.allow()` decorator
Sybren A. Stüvel [Tue, 19 Mar 2019 10:19:22 +0000 (11:19 +0100)]
Use Pillar's new `cors.allow()` decorator

See Pillar a104117618da0a4974fca622aab5864e1f234b0b

5 weeks agoFix: generate JWT expiry timestamps as UTC
Sybren A. Stüvel [Tue, 19 Mar 2019 10:19:06 +0000 (11:19 +0100)]
Fix: generate JWT expiry timestamps as UTC

Apparently `datetime.datetime.utcnow().timestamp()` does NOT return a UTC
timestamp. `utcnow()` returns a timezone-unaware `datetime`, which
`timestamp()` then interprets as local time and incorrectly converts again
to a UTC timestamp.

5 weeks agoUnit tests for JWT token generation
Sybren A. Stüvel [Mon, 18 Mar 2019 15:06:36 +0000 (16:06 +0100)]
Unit tests for JWT token generation

5 weeks agoJWT token generation: only send CORS headers in reply when requested
Sybren A. Stüvel [Mon, 18 Mar 2019 15:06:26 +0000 (16:06 +0100)]
JWT token generation: only send CORS headers in reply when requested

We now only send CORS header in the reply when the request has an Origin
header (indicating it's a cross-site request).

5 weeks agoJWT validation: don't trust links that are valid for too long
Sybren A. Stüvel [Mon, 18 Mar 2019 15:05:51 +0000 (16:05 +0100)]
JWT validation: don't trust links that are valid for too long

Flamenco Manager makes links valid for less than a minute. If we get a link
that is valid for longer than 15 minutes, it's been doctored and we should
not trust it.

5 weeks agoAllow CORS requests from a Manager to the JWT token generator URL
Sybren A. Stüvel [Mon, 18 Mar 2019 13:37:25 +0000 (14:37 +0100)]
Allow CORS requests from a Manager to the JWT token generator URL

These requests are authenticated by the user session. In other words, the
user should visit Flamenco Server in their webbrowser and log in, before
a token is generated. While the session is valid any number of tokens can
be generated.

To avoid CSRF attacks, a request that uses the session to authenticate the
user MUST include an expiry timestamp

6 weeks agoJWT public keys: format Last-Modified header as 'HTTP date'
Sybren A. Stüvel [Wed, 13 Mar 2019 15:18:12 +0000 (16:18 +0100)]
JWT public keys: format Last-Modified header as 'HTTP date'

6 weeks agoSolved a bunch of MyPy errors
Sybren A. Stüvel [Wed, 13 Mar 2019 09:51:41 +0000 (10:51 +0100)]
Solved a bunch of MyPy errors

6 weeks agoAdded JWT key store
Sybren A. Stüvel [Thu, 7 Mar 2019 16:15:01 +0000 (17:15 +0100)]
Added JWT key store

This key store contains a private key used to sign JWT tokens, and a set
of public keys. One of the public keys should match the private key.
Support for other public keys is there to allow a rolling changeover of
keys:

- Create a new private+public key pair and place aside.
- Append the new public key to the key store.
- Wait until all Flamenco Managers have had a chance to download the new
  set of public keys.
- Replace the private key with the newly generated one.
- Remove the old public key from the key store.

6 weeks agoReturn empty string instead of None to indicate 'no status change'
Sybren A. Stüvel [Wed, 13 Mar 2019 09:52:11 +0000 (10:52 +0100)]
Return empty string instead of None to indicate 'no status change'

6 weeks agoRemoved unused import
Sybren A. Stüvel [Wed, 13 Mar 2019 08:56:21 +0000 (09:56 +0100)]
Removed unused import

6 weeks agoUpdated CHANGELOG
Sybren A. Stüvel [Tue, 12 Mar 2019 14:19:47 +0000 (15:19 +0100)]
Updated CHANGELOG

6 weeks agoBlender Render Progressive: don't generate video when rendering one frame
Sybren A. Stüvel [Tue, 12 Mar 2019 14:16:51 +0000 (15:16 +0100)]
Blender Render Progressive: don't generate video when rendering one frame

6 weeks agoBlender Render: don't create video when there is only one frame to render
Sybren A. Stüvel [Tue, 12 Mar 2019 13:55:24 +0000 (14:55 +0100)]
Blender Render: don't create video when there is only one frame to render

6 weeks agoBlender Render: do not create preview video when rendering EXR files
Sybren A. Stüvel [Tue, 12 Mar 2019 13:43:47 +0000 (14:43 +0100)]
Blender Render: do not create preview video when rendering EXR files

The EXR files can be at a higher bit-depth than FFmpeg can handle (by
default). Furthermore, the colours will likely be wrong due to EXR having
linear colours, and FFmpeg not having the correct colour space conversion.

6 weeks agoUse DNA enum values for render format in blender render jobs
Sybren A. Stüvel [Tue, 12 Mar 2019 13:42:55 +0000 (14:42 +0100)]
Use DNA enum values for render format in blender render jobs

DNA uses `OPEN_EXR` whereas the `--render-format` CLI parameter uses `EXR`.
The job settings should be using the DNA setting, whereas the conversion
to a CLI parameter should be done by the Worker.

See https://developer.blender.org/D4502

6 weeks agoSplit test code from test_job_compilers into test_job_compiler_blender_render
Sybren A. Stüvel [Tue, 12 Mar 2019 12:31:42 +0000 (13:31 +0100)]
Split test code from test_job_compilers into test_job_compiler_blender_render

7 weeks agoBlender Video Chunks: take output extension into account
Sybren A. Stüvel [Wed, 6 Mar 2019 12:28:04 +0000 (13:28 +0100)]
Blender Video Chunks: take output extension into account

We now allow the client to set the final output extension. This is limited
to what FFmpeg understands, though, so it should be used with care. The
Blender Cloud add-on checks for supported extensions already.

7 weeks agoBlender-video-chunks job compiler: output to JPEG instead of PNG
Sybren A. Stüvel [Fri, 1 Mar 2019 14:43:39 +0000 (15:43 +0100)]
Blender-video-chunks job compiler: output to JPEG instead of PNG

8 weeks agoAutomatically delete jobs stuck in `waiting-for-files` status
Sybren A. Stüvel [Thu, 28 Feb 2019 13:14:07 +0000 (14:14 +0100)]
Automatically delete jobs stuck in `waiting-for-files` status

These jobs are waiting for an external PATCH call to initiate job
compilation, queueing, and execution. If this PATCH call doesn't come,
the job is stuck in this status. After a certain time of waiting, this
function will automatically delete those jobs.

Be sure to add a schedule to the Celery Beat like this:

    'remove_waiting_for_files': {
        'task': 'flamenco.celery.job_cleanup.remove_waiting_for_files',
        'schedule': 3600,  # every N seconds
    }

8 weeks agoAllow jobs to be created with 'waiting-for-files' status.
Sybren A. Stüvel [Tue, 26 Feb 2019 17:03:18 +0000 (18:03 +0100)]
Allow jobs to be created with 'waiting-for-files' status.

This prohibits task compilation and job queueing. It requires a PATCH
with `{'op': 'construct'}` to send it to `under-construction` status and
initiate task compilation.

This has no impact on the `start_paused` setting; it behaves as before.

8 weeks agobson.ObjectId → ObjectId
Sybren A. Stüvel [Tue, 26 Feb 2019 16:42:49 +0000 (17:42 +0100)]
bson.ObjectId → ObjectId

8 weeks agoFixed sidebar links when there is no 'last project' in the session
Sybren A. Stüvel [Tue, 26 Feb 2019 10:12:33 +0000 (11:12 +0100)]
Fixed sidebar links when there is no 'last project' in the session

2 months agoUI: Remove the list header.
Pablo Vazquez [Fri, 22 Feb 2019 01:52:19 +0000 (02:52 +0100)]
UI: Remove the list header.

Comment out the header until stats and filtering is implemented.

It currently contains 'infinite' stats, and a link to the project's
homepage which sits right above it since the latest navigation update.

2 months agoUI: Don't use white as fallback for unknown status-indicator
Pablo Vazquez [Fri, 22 Feb 2019 01:35:10 +0000 (02:35 +0100)]
UI: Don't use white as fallback for unknown status-indicator

Some new status would be invisible in the list, since they don't have a
specific color set yet and the background of the list is white.

2 months agoUI: Margin on buttons
Pablo Vazquez [Fri, 22 Feb 2019 01:33:51 +0000 (02:33 +0100)]
UI: Margin on buttons

2 months agoUI: Align Cancel/View Log buttons to the left.
Pablo Vazquez [Fri, 22 Feb 2019 01:33:18 +0000 (02:33 +0100)]
UI: Align Cancel/View Log buttons to the left.

Also don't use 'success' buttons for actions like request logs,
save the green color for creation/re-queueing type of tasks (aligned to the right).

2 months agoUI: Align Cancel/Archive/RNA buttons to the left.
Pablo Vazquez [Fri, 22 Feb 2019 01:32:05 +0000 (02:32 +0100)]
UI: Align Cancel/Archive/RNA buttons to the left.

Also don't use 'success' buttons for actions like Archive or Edit RNA,
save the green color for creation/re-queueing type of tasks.

2 months agoUI: Task list, align navigation to the right
Pablo Vazquez [Fri, 22 Feb 2019 01:29:38 +0000 (02:29 +0100)]
UI: Task list, align navigation to the right

2 months agoInclude task timing metrics
Sybren A. Stüvel [Thu, 21 Feb 2019 16:39:30 +0000 (17:39 +0100)]
Include task timing metrics

This includes receiving them from the Manager and presenting them on the
task view.

2 months agoTask log requests: always de-queue request when Manager sends us a log
Sybren A. Stüvel [Thu, 21 Feb 2019 09:59:18 +0000 (10:59 +0100)]
Task log requests: always de-queue request when Manager sends us a log

Even when the task doesn't exist any more, and we can't process the log,
the request to send the log should be de-queued to prevent infinite loops.

2 months agoView task template: added space between parent ObjectIDs
Sybren A. Stüvel [Wed, 20 Feb 2019 09:17:11 +0000 (10:17 +0100)]
View task template: added space between parent ObjectIDs

This makes it possible for the browser to wrap long lines when a task has
many parents.

2 months agoReplaced 'status'-legend popup with mouse-over that actually explains stuff
Sybren A. Stüvel [Tue, 19 Feb 2019 16:02:42 +0000 (17:02 +0100)]
Replaced 'status'-legend popup with mouse-over that actually explains stuff

Fix T61664

2 months agoRemoved `openModalUrl` jQuery function
Sybren A. Stüvel [Tue, 19 Feb 2019 15:44:40 +0000 (16:44 +0100)]
Removed `openModalUrl` jQuery function

It is broken because `$(...).modal()` doesn't exist, and there is no
comment about which library should provide it. Furthermore, it's only used
to load endpoints that no longer seem to work either, so I removed those
as well.

2 months agoAdded 'failed_by_workers' property to tasks
Sybren A. Stüvel [Tue, 19 Feb 2019 15:22:16 +0000 (16:22 +0100)]
Added 'failed_by_workers' property to tasks

This is set by the Manager to indicate which workers have run this task and
failed.

2 months agoBetter readability of progressive render tasks
Sybren A. Stüvel [Thu, 14 Feb 2019 14:49:12 +0000 (15:49 +0100)]
Better readability of progressive render tasks

`render-smplA-B-frmX-Y` → `render-s_A-B-f_X-Y`
Same with merge tasks.

2 months agoIntroduced task status 'soft-failed'
Sybren A. Stüvel [Thu, 14 Feb 2019 10:29:11 +0000 (11:29 +0100)]
Introduced task status 'soft-failed'

This status indicates that there was a failure, but that the task will be
re-tried by another worker. As such, it should be handled fairly similarly
to 'claimed-by-manager'. Soft-failed tasks shouldn't affect the job status.

2 months agoAdded missing CSS colours for fail-requested status
Sybren A. Stüvel [Thu, 14 Feb 2019 10:27:11 +0000 (11:27 +0100)]
Added missing CSS colours for fail-requested status

2 months agoJob archival: don't crash on tasks without log
Sybren A. Stüvel [Thu, 14 Feb 2019 09:26:47 +0000 (10:26 +0100)]
Job archival: don't crash on tasks without log

2 months agoRunnability check: ensure tasks are counted only once
Sybren A. Stüvel [Wed, 13 Feb 2019 14:48:23 +0000 (15:48 +0100)]
Runnability check: ensure tasks are counted only once

Before this fix, each task was counted for each of its failed parents (so
a task with 3 failed parents would be counted 3 times).

2 months ago'fail-requested' job should stay 'fail-requested' even when tasks are active
Sybren A. Stüvel [Wed, 13 Feb 2019 14:35:43 +0000 (15:35 +0100)]
'fail-requested' job should stay 'fail-requested' even when tasks are active

Before, when a task update with status='active' would come in for a job
with status='fail-requested', the job status would be set to 'active'.
This is fixed now.

2 months agoVendoring Bowser rather than copying it from node_modules
Sybren A. Stüvel [Wed, 13 Feb 2019 13:55:25 +0000 (14:55 +0100)]
Vendoring Bowser rather than copying it from node_modules

It seems to work fine, except during staging for building the docker image;
then it silently fails to copy the bowser.js file into Flamenco's `static`
directory.

2 months agoJob view: show user and creation timestamp more explicitly
Sybren A. Stüvel [Wed, 13 Feb 2019 13:28:55 +0000 (14:28 +0100)]
Job view: show user and creation timestamp more explicitly

Previously only the username was shown (no full name), and the creation
timestamp was hidden behind the updated timestamp.

2 months agoAllow users to copy-paste job settings
Sybren A. Stüvel [Wed, 13 Feb 2019 13:22:40 +0000 (14:22 +0100)]
Allow users to copy-paste job settings

Before copying, variables in the job setting value are replaced based on
the user's own platform. Furthermore, specific settings can be processed
before copying; for example, the `render_output` setting gets its `######`
removed and a directory popped so that you end up at the directory
containing the intermediate directory and/or the final directory.

2 months agoRegression Fix: Choose flamenco manager broke while unifying ui.
Tobias Johansson [Wed, 13 Feb 2019 09:29:17 +0000 (10:29 +0100)]
Regression Fix: Choose flamenco manager broke while unifying ui.

Found using sentry.

2 months agoRegression Fix: Overflow in column scroll. Updated ugly hack.
Tobias Johansson [Wed, 13 Feb 2019 08:19:28 +0000 (09:19 +0100)]
Regression Fix: Overflow in column scroll. Updated ugly hack.

2 months agoSet job's 'status_reason' when recreating job
Sybren A. Stüvel [Tue, 12 Feb 2019 16:59:11 +0000 (17:59 +0100)]
Set job's 'status_reason' when recreating job

When recreating a job, its 'status_reason' field should be set,
otherwise it would keep it from the old run (and be meaningless at
best).

2 months agoFix T50572 Detect unrunnable active jobs
Sybren A. Stüvel [Tue, 12 Feb 2019 16:58:57 +0000 (17:58 +0100)]
Fix T50572 Detect unrunnable active jobs

Active Flamenco jobs are periodically checked (via Celery) for non-runnable
tasks (e.g. queued tasks with a failed/cancelled parent). When such a task
is found, the entire job is failed (because it won't be able to complete
anyway).

Add something like this to the CELERY_BEAT_SCHEDULE setting:

    'job-runnability-check': {
        'task': 'flamenco.celery.job_runnability_check.schedule_checks',
        'schedule': 600,  # every N seconds
    },

2 months agoAdded new 'fail-requested' job status
Sybren A. Stüvel [Tue, 12 Feb 2019 16:06:56 +0000 (17:06 +0100)]
Added new 'fail-requested' job status

Instead of failing a job immediately, it can now also go to
'fail-requested' status. This should be done when there are still tasks
that are managed by the Manager (like 'active', 'claimed-by-manager', etc.)
and that will go to 'cancel-requested' rather than 'canceled'.

After a task has gone to 'canceled' status and when there are no more
'cancel-requested' tasks, the job will go from 'fail-requested' to 'failed'.

2 months agoAdded job['status_reason'] field for indicating reason for current status
Sybren A. Stüvel [Tue, 12 Feb 2019 16:03:29 +0000 (17:03 +0100)]
Added job['status_reason'] field for indicating reason for current status

This field is for human consumption, and is intended for indicating the
reason a job obtained its current status ("failed because X tasks failed",
"cancelled by request of user X", etc.).

Currently only the "failed job because too many tasks failed" status change
sets this field.

2 months agoAdded 'parent' link to tasks to browse to its parent(s)
Sybren A. Stüvel [Tue, 12 Feb 2019 15:03:25 +0000 (16:03 +0100)]
Added 'parent' link to tasks to browse to its parent(s)

2 months agoMerge remote-tracking branch 'origin/production'
Tobias Johansson [Tue, 12 Feb 2019 08:58:58 +0000 (09:58 +0100)]
Merge remote-tracking branch 'origin/production'

2 months agoUI: Slimmer entries and styling
Pablo Vazquez [Fri, 8 Feb 2019 01:56:00 +0000 (02:56 +0100)]
UI: Slimmer entries and styling

* no-margin between status cells.
* more prominent mouse-hover style.
* Less contrast on label for completed status (normal on mouse-hover).

2 months agoUI: Fix flamenco box non-white
Pablo Vazquez [Fri, 8 Feb 2019 01:54:33 +0000 (02:54 +0100)]
UI: Fix flamenco box non-white

2 months agoUI: Fix dropdown menu text overflow
Pablo Vazquez [Fri, 8 Feb 2019 01:54:17 +0000 (02:54 +0100)]
UI: Fix dropdown menu text overflow

2 months agoProgressive render: Non-render tasks get task_priority=1
Sybren A. Stüvel [Thu, 7 Feb 2019 17:13:47 +0000 (18:13 +0100)]
Progressive render: Non-render tasks get task_priority=1

This ensures that, given equal job priority, the simpler stuff (like
moving files around, or generating previews) takes priority over
rendering tasks.

2 months agoNavigation: Unified cloud navigation
Tobias Johansson [Thu, 7 Feb 2019 13:45:55 +0000 (14:45 +0100)]
Navigation: Unified cloud navigation

* Removed main drop down menu
* Added "My cloud" to user menu
* Attract/Flamenco is found under Production Tools menu
* Attract/Flamenco has the same navigation as its project

2 months agoNavigation: Unified cloud navigation
Tobias Johansson [Wed, 6 Feb 2019 09:31:36 +0000 (10:31 +0100)]
Navigation: Unified cloud navigation

* Removed main drop down menu
* Added "My cloud" to user menu
* Attract/Flamenco is found under Production Tools menu
* Attract/Flamenco has the same navigation as its project

2 months agoDepsgraph: on clicking a task, just reload the page
Sybren A. Stüvel [Wed, 6 Feb 2019 09:05:00 +0000 (10:05 +0100)]
Depsgraph: on clicking a task, just reload the page

This makes it clearer which nodes are correct and which are incomplete,
even though it's a bit more cumbersome and jumpy.

2 months agoDepsgraph: removed size warning
Sybren A. Stüvel [Wed, 6 Feb 2019 09:04:34 +0000 (10:04 +0100)]
Depsgraph: removed size warning

We don't draw in different ways using the Dagre-D3 library (it's always
drawing "nice").

2 months agoDepsgraph: don't show 3rd level nodes
Sybren A. Stüvel [Wed, 6 Feb 2019 09:03:24 +0000 (10:03 +0100)]
Depsgraph: don't show 3rd level nodes

It is still too slow, also for the new drawing library.

2 months agoProgressive rendering: dynamically set frame chunk based on max samples/task
Sybren A. Stüvel [Tue, 5 Feb 2019 16:53:48 +0000 (17:53 +0100)]
Progressive rendering: dynamically set frame chunk based on max samples/task

The frame chunk size in the job settings is multiplied with the sample
cap to obtain a maximum number of samples per render task. This is then
used to compute the number of frames that can be rendered in one render
task.

2 months agoReplace Cytoscape with Dagre-D3 for depsgraph drawing
Sybren A. Stüvel [Tue, 5 Feb 2019 14:21:00 +0000 (15:21 +0100)]
Replace Cytoscape with Dagre-D3 for depsgraph drawing

It's not 100% feature-complete yet (status colour isn't drawn), but the
graph itself is much better organised.

2 months agoProgressive Rendering: merging after sample chunk now happens in one task
Sybren A. Stüvel [Tue, 5 Feb 2019 14:20:09 +0000 (15:20 +0100)]
Progressive Rendering: merging after sample chunk now happens in one task

This makes the work more efficient, as Blender is only started once (instead
of for every frame). It also removes the requirement that the frame chunks
are uniform, allowing for future optimisations.

2 months agoSplit test of blender_render_progressive into its own test file
Sybren A. Stüvel [Tue, 5 Feb 2019 12:09:02 +0000 (13:09 +0100)]
Split test of blender_render_progressive into its own test file

2 months agoAdded menu item for accessing JSON definition of tasks
Sybren A. Stüvel [Fri, 1 Feb 2019 09:58:02 +0000 (10:58 +0100)]
Added menu item for accessing JSON definition of tasks

2 months agoProgressive renders: only publish to out dir once full render is done
Sybren A. Stüvel [Fri, 1 Feb 2019 08:57:59 +0000 (09:57 +0100)]
Progressive renders: only publish to out dir once full render is done

This prevents any previous high-quality render from being overwritten
with the low-quality iterations of the current render job.

Requires Flamenco Worker de9204abfcad4bcb68eb3492d2e512de025a8bb8 or
newer.

2 months agoProgressive rendering: generate preview JPEG and MKV files
Sybren A. Stüvel [Thu, 31 Jan 2019 12:46:03 +0000 (13:46 +0100)]
Progressive rendering: generate preview JPEG and MKV files

After every sample chunk the EXR files are converted to JPEG and those are
then fed to FFmpeg to convert to an MKV video file.

2 months agoMore statuses in COLOR_FOR_TASK_STATUS
Sybren A. Stüvel [Thu, 31 Jan 2019 12:43:09 +0000 (13:43 +0100)]
More statuses in COLOR_FOR_TASK_STATUS

Also it's now a defaultdict, so that it doesn't raise a `KeyError` for
an unknown status.

2 months agoAllow job recreation in 'paused' and 'construction-failed' states
Sybren A. Stüvel [Thu, 31 Jan 2019 10:28:37 +0000 (11:28 +0100)]
Allow job recreation in 'paused' and 'construction-failed' states

The former is trivial, as in paused state the job isn't even sent to the
Manager. The latter is a newly-introduced state that allows differentiating
between 'actually constructing' and 'construction failed'. Previously the
job would simply hang in 'under-construction' state and not allow any
modification.

2 months agoProgressive render: convert EXR to JPEG + MKV previews
Sybren A. Stüvel [Thu, 31 Jan 2019 10:17:31 +0000 (11:17 +0100)]
Progressive render: convert EXR to JPEG + MKV previews

This is currently only done after the first sample chunk; this will be
addressed in another commit.