storyboarder
storyboarder copied to clipboard
Mutable boards
Howdy ! Got the mutable boards working!
As there is a "new shot" input, we have now a "mute board" input for boards.
The muted boards
- do not export
- have a specific 'muted' class (thumbnails)
- do not play when playing the timeline
- are skipped when moving in the timeline with the arrows (you'll have to click it to edit/show it)
- have a '(Muted)' notice next to their shot number
Fixes #1244 and #611.
First pull request here ! :)
Thanks for the PR. I won't be able to do a full review until early next week. But it looks pretty straightforward.
We'll probably want to tweak the design around indicating what's muted, and the language used to describe muted boards and actions. For example, Boards -> Toggle mute Board
vs. Boards -> Mute/Un-mute
.
And maybe there's a better artist-facing term than "mute"? "Mute" sounds like it has something to do with a board's audio, which might be confusing?
Have you tested loading an older 1.6.x project, one without the muted
property on its boards (i.e.: cover the cases where muted
would be undefined
)? Either handle undefined
everywhere or ensure when first loaded that each board always has a boolean muted
value.
And maybe there's a better artist-facing term than "mute"?
First I read anti-facist :) But yes, maybe we can find something else.
I didn't try with a pre 1.6 file. I'm sure there still are some things to tweak, but anyway I think I almost got it here.
Also, I think that the methods in the Exporter class should be more consistent.
Eg. exportAnimatedGif
has a boards
parameter while exportImages
doesn't have one and relies on the boards from boardData.boards
.
It would make sense that any of the Exporter class methods have the same arguments.
eg.
exportMethod(boardsSelection,boardData,exportOptions)
instead of things like
async exportFcp (boardData, projectFileAbsolutePath) {}
exportPDF (boardData, projectFileAbsolutePath, _paperSize, _paperOrientation, _rows, _cols, _spacing, _filepath) {}
exportImages (boardData, projectFileAbsolutePath, outputPath = null) {}
async exportAnimatedGif (boards, boardSize, destWidth, projectFileAbsolutePath, mark, boardData) {}
async exportVideo (scene, sceneFilePath, opts) {}
I'm saying this because currently, the muted boards are filtered sometimes BEFORE calling the export method (eg. for exportAnimatedGif
) and sometimes WITHIN the exporter method.
Seems confusing to me but I didn't want to change your structure without your feedback.
I think that it should always be filtered before calling the exporter method.
I think we could do this inline:
const filterNotMutedBoards = (boards) => {
return boards.filter(function(board){ return !board.muted });
}
... would instead be:
const isBoardUnmuted = board => !board.muted
boardData.boards.filter(isBoardUnmuted)
... or, for exports:
const isBoardExportable = board => !board.muted
let exportableBoards = boardData.boards.filter(isBoardExportable)
I've got a few other issues ahead of this one but will try to circle back soon.
Not interested ? :/
And maybe there's a better artist-facing term than "mute"? "Mute" sounds like it has something to do >with a board's audio, which might be confusing?
I've seen the term "OMIT" used a lot in movie production for shots which wouldn't feature in the final cut. May be it could be applied to this case?
Seems that you're right, @amedeux : https://www.quora.com/What-is-the-aim-of-using-omit-in-a-script Could be the word "ignore" or "skip" too. @audionerd what about this feature ? thanks !
Hey @gordielachance We're still interested in this feature. It's still marked for V2 (e.g.: we want to include it as part of Storyboarder 2.0). We'd have to do some cleanup on this PR to be able to accept it. A few other issues have taken priority over it right now.
Hey @gordielachance, sorry I'm late to the party. How about "stash", which is used in Blender to "mute" actions in the Action editor?
"Disable" would be self-descriptive.
@audionerd
It's still marked for V2 (e.g.: we want to include it as part of Storyboarder 2.0).
Did this not make it in?