GithubHelp home page GithubHelp logo

superflytv / superconductor Goto Github PK

View Code? Open in Web Editor NEW
202.0 18.0 13.0 19.51 MB

A playout client for Windows/Linux/macOS that will let you control CasparCG Server, BMD ATEM, OBS Studio, vMix, OSC-compatible devices, HTTP (REST)-compatible devices, and more!

License: Other

SCSS 3.76% TypeScript 95.60% HTML 0.07% JavaScript 0.56% Shell 0.01%
broadcast casparcg companion obs playout streamdeck streaming vmix x-keys hacktoberfest

superconductor's Introduction

SuperConductor

A playout client for Windows/Linux/macOS that will let you control CasparCG Server, BMD ATEM, BMD HyperDeck, OBS Studio, vMix, OSC-compatible devices, HTTP (REST)-compatible devices, and more!

Screenshot

Installation

Windows

Linux (Ubuntu)

  • Download the .appImage file for SuperConductor.
    Execute the following before running the file:
    chmod +x Downloads/SuperConductor-0.11.3-Linux-Executable.AppImage
  • (Optional) Download the .appImage file for TSR-Bridge.
    Execute the following before running the file:
    chmod +x Downloads/TSR-Bridge-0.11.3-Linux-Executable.AppImage

macOS

Problems and Issues

Problems and Issues can be reported here: Github Issues

Features

Edit Timeline

Drag objects onto the timeline, edit them and play them out instantly.

Edit timeline

Playout

Under the hood, SuperConductor is powered by the same playout backend as the Sofie Automation system, with timeline-based control of multiple devices.

Timeline playout

Resources

Resources (such as media files) are kept in the rightmost pane and can be dragged into the rundown to be played out right away.

Resource pane

GDD support

Automatically displays input fields in GUI for CasparCG-templates that expose a GDD schema.

Read more about how to write GDD (Grahics Data Definition) templates here: https://superflytv.github.io/GraphicsDataDefinition

Play mode single

Playout modes

  • Single item: Only one item at a time is playing within the group. Used to create playlists, which can auto-next to next item, and loop.

    Play mode single

  • Multi item: Several items can play at the same time. Useful for graphics etc.

    Play mode multi

Stream Deck and X-keys Support

Assign keys on Stream Deck or X-keys to playout actions.

Stream Deck GUI Stream Deck

HTTP API

SuperConductor currently has a limited, internal, and unstable HTTP API. We plan to add a public and stable HTTP API with proper documentation in the future, but for now this internal API is available by default at http://localhost:5500/api/internal. The port can be changed by passing --internal-http-api-port XXXX as an argument to SuperConductor. This API can be disabled by passing the --disable-internal-http-api argument.

Please be aware that, because this is an internal API, it may change at any time without notice.

Supported Devices

SuperConductor is powered by the TSR library used in the Sofie Automation system, so it can play anything that TSR can play.

  • CasparCG Server Video and graphics playout software
  • Blackmagic Design ATEM Vision mixers
  • Blackmagic Design HyperDeck record/playback devices
  • OBS Studio Live video production software
  • vMix software vision mixer
  • Arbitrary OSC compatible devices
  • Arbitrary HTTP (REST) compatible devices
  • (GUI not implemented yet) Lawo audio mixers
  • (GUI not implemented yet) Panasoniz PTZ cameras
  • (GUI not implemented yet) Pharos light control devices
  • (GUI not implemented yet) Sisyfos audio controller
  • (GUI not implemented yet) Quantel video servers
  • (GUI not implemented yet) VizRT MediaSequencer graphics system
  • (GUI not implemented yet) Arbitrary TCP-socket compatible devices

TSR Bridge

The TSR-bridge is the application which handles the actual playout and control of the connected devices. By default, an instance of TSR-bridge runs internally in SuperConductor, so devices can be controlled directly from the application.

In some instances, you might want to run the TSR-Bridge on another computer, for example if you don't have direct network access to the devices you want to control.

TSR-Bridge can either act as a client which connects to the SuperConductor ("incoming bridge"), or as a server which the SuperConductor can connect to ("outgoing bridge"). Pick the mode that works best for you, depending on your network setup, firewalls etc..

For Developers

Contributions are very much appreciated!

Installation and usage instructions are documented here: For developers

Acknowledgements

SuperConductor uses many open source libraries, some of which include:

License

SuperConductor is licensed under the GNU Affero General Public License v3.0 or later and the license is available to read in the LICENSE and COPYING files.

superconductor's People

Contributors

eol-account avatar from-the-river-to-the-sea avatar hummelstrand avatar imaretic avatar jesperstarkar avatar jstarpl avatar julusian avatar nytamin avatar peterc89 avatar saftret avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

superconductor's Issues

Feature request: colored (and possibly pulsing) borders when a Group is playing or paused

Is your feature request related to a problem? Please describe.
It isn't always easy to tell at a glance what a Group's playback state is, especially if the group is long enough that it can't all fit on screen at once.

Describe the solution you'd like
An operator that I'm working with has requested that Groups have a red (and maybe pulsing) border when playing and a yellow border when paused.

Additional context
N/A

Feature request: add option to allow Parts to keep playing past their scheduled duration (without an infinite) and log how much time they went over

Is your feature request related to a problem? Please describe.
I've got an operator who is mixing SuperConductor with manual control. I know this is not the primary use case for SuperConductor, but it's something that will probably come up more in the future. The way they are utilizing SuperConductor is as follows:

  1. Use SuperConductor to play one or more HyperDeck clips.
  2. Use SuperConductor to dispatch an OSC command to Companion which switches inputs on an ATEM and/or vMix.
    • They don't use SuperConductor to control the ATEM/vMix directly because of the fact that TSR resets things back to a default state when there are no corresponding timeline objects active, which clashes with their manual switching. OSC commands are fire-and-forget which avoids this problem.
  3. Manually control the ATEM/vMix for several hours.
  4. Meanwhile, the Part with the OSC command is continuing to play. It will have a duration that is the same as the scheduled duration of the live segment being switched on the ATEM/vMix.
  5. If the live segment is going to go over time, the operator must hastily increase the duration of the OSC timeline object to avoid it auto-stepping to the next Part, which is another HyperDeck clip.
  6. (This is the important bit) Record precisely how long the live segment went over time. This is what they'd like SuperConductor to keep track of.
  7. Use that time information elsewhere in the production.
  8. Go to 1 and repeat.

Describe the solution you'd like
The operator in question would like the option to allow a Part to "roll" past its scheduled duration, but keep track of how long it has gone over time and then make that value available for easy copy/pasting.

Additional context
Is there a better way to achieve the desired result? This may be out-of-scope for SuperConductor. I'd like @nytamin's feedback before deciding if this should be pursued or marked as wontfix (same goes for most of the issues I've opened).

Feature request: Project management

Currently, the logic behind the Project management buttons aren't implement yet.

We shoulld be able to:

  • Create a new Project
  • Save a Project to a File (including all current rundowns) (a zip-file?)
  • Open a Project from a file

Additional context
image

Feature request: Scoll the timeline horizontally

Describe the bug
Can't scoll the timeline horizontally to move items or to search an item in the timeline.

To Reproduce
Steps to reproduce the behavior:

  1. Add a scene
  2. Add other scene under the first
  3. Move to the right
  4. Can't go to the end of the new source or scoll horizontally.

Expected behavior
Have the ability to scoll the timeline horitzontally.

Screenshots
Capture du 2022-08-19 11-52-42

Desktop (please complete the following information):

  • OS: Debian 11
  • Version 0.8.3 appimage

Feature request: Application actions & hotkeys

Currently it is possible to assign hotkeys (keyboard, streamdeck, xkeys etc) to play/stop a certain Part, Group etc..

We should also have a few "Application-level actions" that it should be possible to bind hotkeys to.

Some actions we should implement initially:

  • Play current selected item(s)
  • Stop current selected item(s)
  • Play/Stop current selected item(s)
  • Pause current selected item(s)
  • Cue current selected item(s)
  • Delete current selected item(s)

MacOS: App hangs on quit

Describe the bug
When quitting on a Mac (command+Q) the app stays in a non responsive state. Closing the window (command+W) will result in the behavior expected from command+Q (app quits).

To Reproduce
Steps to reproduce the behavior:

  1. Quit app on Mac OS. From app menu or with command + Q.

Expected behavior
As a Mac user I expect command+W to close the window but to leave the app running. Command+Q is expected to quit the app entirely.

Desktop (please complete the following information):

  • OS: MacOS on Apple Silicon
  • Version 13

Additional context
Related to app event handling on MacOS: https://www.electronjs.org/docs/latest/api/app#event-window-all-closed

Feature request: Delete Rundowns

Describe the solution you'd like
The logic behind the "Permanently delete"-rundown-buttons aren't implemented. The button should remove the rundown from the project.

Additional context
image

Feature request: Logical objects

Describe the solution you'd like
The Timeline-objects has a feature where they can be defined with "logical expresions" rather than time-based expressions.
Logical expressios can look like #objectId | #objectId or !.class + 5000

The Group playout-type should be possible to set to "logical" type, and when that happens, all Part in it will become "Logical Parts".

  • Play/pause/stop on Group are removed
  • Play/pause/stop buttons on Parts are replaced by a "enable/disable" toggle
  • Parts can have one (or more) logical expressions

Also, other features we need to add are:

  1. Be able to set classes on Parts and timeline-objects

A typical use case for this would be "when having Channel-logo. which should autimatically disappear whenever there's a commercial playing"

Feature request: Be able to set a manual, fixed duration of a Part

Is your feature request related to a problem? Please describe.

My use case is this: I want to create a Part that is a 30-second loop that contains only 5 seconds of content.
To achieve this currently, I have to add some "nothing"-timeline-object to fill out the remaining 25-seconds, which is kind-of awkward.

Describe the solution you'd like
Add a property to the Part to set a fixed duration. By default it is undefined, and the duration is calculated using the content like it is today.

Bug-handling: Add Error Boundraries

Describe the bug
When something bad happens (there might be a component that's crashing, etc), the whole GUI crashes.

We should add error-boundraries so that not everything crashes, but only parts, so that a User can recover without restarting the whole application.

Feature request: ability to lock playback controls

Is your feature request related to a problem? Please describe.
An operator I'm working with would like to prevent any accidental clicks or keystrokes from altering the playback state.

Describe the solution you'd like
They have requested the ability to lock playback of Parts/Groups. Here's the request in their words:

Make the lock function 2 purpose. One click locks editing, click it again to lock editing AND playback.

Additional context
N/A

Feature request: set Mixer-transitions on casparcg-objects

Describe your question
I’m trying to include a CasparCG MIX FILL command into a timeline but it doesn’t look like there’s a way to do this. Also tried copying from CasparCG client and no MIX command items were pasted.

Additional context
This would be for animating / transitioning between Caspar assets.

Feature request: improve display of "time elapsed" and "time remaining"

Is your feature request related to a problem? Please describe.
Currently, these two numbers are just kinda... floating there, with no labels.

Untitled

Describe the solution you'd like
I'd like to see an improved design for these two pieces of information.

Additional context
I'm the one who just shoved those numbers into the top margin and called it a day. Sorry. 😅

Feature request: Better auto-update experience

Is your feature request related to a problem? Please describe.
When there is an updated version available, there is no notification at all to the user that an update is downloaded or installed.

Describe the solution you'd like
There should be a few notifications in place:

  • "A new version (x.y.z) is available, it will be downloaded automatically in the backgroun"
  • "Superconductor will automatically be updated to x.y.z upon restart."

Feature request: display human-readable ATEM input and HyperDeck clip names

Is your feature request related to a problem? Please describe.
When creating rundowns that switch ATEM inputs or play HyperDeck clips, these timeline objects are currently displayed by numeric ID only. It would be helpful to the operator if they could also see the name of that input or clip as it exists on the device.

Describe the solution you'd like
For ATEM inputs, I'd like to see the name of the input (its longName and maybe also its shortName) in two places:

  1. The Input field in the inspector. This means that this field could become a fuzzy finding combo box dropdown thing that enumerates all the available inputs by both numeric ID and human readable name.
  2. The label of the object on the timeline.

atemme

For HyperDeck clips, I'd like to see the same thing but for clip names instead.

Additional context
The HyperDeck functionality isn't merged yet but probably will be soon.

Also, this feature seems like it might require some pretty hefty changes to how SuperConductor handles resources. Maybe I'm not thinking about it clearly though.

There are a number of challenges that might come with this feature, such as:

  • What if a user wants to pre-configure a rundown without currently being connected to an ATEM or HyperDeck? Do we show cached names where we can or do we play it safe and show no names?
  • How would we feed the timeline object's resource (which is probably what would contain the human-readable identifiers) to describeTimelineObject, the function which generates the timeline object labels?
  • How would we reactively update the labels of these timeline objects when someone changes the name of an input on the ATEM or swaps out clips on a HyperDeck?
  • What happens if someone was connected to, say, a 4 M/E Constellation and then changes it to be a 1 M/E Production Studio? They don't have the same number of inputs and M/Es, so should we display some kind of warning that some of the timeline objects are no longer valid for the target ATEM?

When first added, ATEM devices fail to retrieve resources

Describe the bug
When an ATEM device is first added, a threadedclass error is logged and the sideload connection is not created, resulting in no resources being populated. Closing and reopening SuperConductor results in no errors being logged and things working as expected.

To Reproduce
Steps to reproduce the behavior:

  1. Remove your ATEM device, if it exists
  2. Add your ATEM device
  3. Observe that even though the ATEM is connected to and shows an accurate status, no resources are displayed
  4. Check the TSR-Bridge logs and see something like the log below.
  5. Restart SuperConductor and observe that no error is logged and the resources are populated
2022-08-23T22:42:37.628Z [electron] info: TSR Initializing device dZchA37X (1280) of type ATEM...
2022-08-23T22:42:41.316Z [electron] error: Method aborted due to: Child process "Child_ instance_4865_2_dZchA37X" was closedMethod aborted due to: Child process "Child_ instance_4865_2_dZchA37X" was closed, Error: Method aborted due to: Child process "Child_ instance_4865_2_dZchA37X" was closed
    at C:\Users\vanca\AppData\Local\Programs\superconductor\resources\app.asar\node_modules\threadedclass\dist\parent-process\manager.js:773:27
    at Array.forEach (<anonymous>)
    at ThreadedClassManagerClassInternal.rejectChildMethods (C:\Users\vanca\AppData\Local\Programs\superconductor\resources\app.asar\node_modules\threadedclass\dist\parent-process\manager.js:771:36)
    at ThreadedClassManagerClassInternal._childHasCrashed (C:\Users\vanca\AppData\Local\Programs\superconductor\resources\app.asar\node_modules\threadedclass\dist\parent-process\manager.js:569:14)
    at FakeProcess.<anonymous> (C:\Users\vanca\AppData\Local\Programs\superconductor\resources\app.asar\node_modules\threadedclass\dist\parent-process\manager.js:620:22)
    at FakeProcess.emit (C:\Users\vanca\AppData\Local\Programs\superconductor\resources\app.asar\node_modules\eventemitter3\index.js:201:33)
    at FakeProcess.kill (C:\Users\vanca\AppData\Local\Programs\superconductor\resources\app.asar\node_modules\threadedclass\dist\parent-process\workerPlatform\fakeWorker.js:15:14)
    at C:\Users\vanca\AppData\Local\Programs\superconductor\resources\app.asar\node_modules\threadedclass\dist\parent-process\manager.js:764:39
    at new Promise (<anonymous>)
    at ThreadedClassManagerClassInternal.killChild (C:\Users\vanca\AppData\Local\Programs\superconductor\resources\app.asar\node_modules\threadedclass\dist\parent-process\manager.js:727:16)
2022-08-23T22:42:41.317Z [electron] info: TSR Initializing device dZchA37X (9834) of type ATEM...
2022-08-23T22:42:41.452Z [electron] info: TSR Device dZchA37X (9834) initialized!

Expected behavior
ATEM resources should appear when a device is first added and connected to.

Screenshots
N/A

Desktop (please complete the following information):

  • OS: Windows 10 x64 Pro
  • Version 0.8.4

Additional context
Tested with an ATEM 2 M/E Production Studio 4K running software version 8.6.4. Another user also tested it with a 1 M/E on an unknown version.

MacOS: "A JavaScript error occurred in the main process" on startup

Description
Not able to start the application on MacOS.

To Reproduce
Steps to reproduce the behavior:

  1. Open app

Error message

Uncaught Exception:
Error: dlopen(/var/folders/vb/dnpj7gf12mg2dbv8vfxr83dc0000gn/T/.tv.superfly.superconductor.ZoDdHy, 0x0001): tried: '/var/folders/vb/dnpj7gf12mg2dbv8vfxr83dc0000gn/T/.tv.superfly.superconductor.ZoDdHy' (code signature in '/private/var/folders/vb/dnpj7gf12mg2dbv8vfxr83dc0000gn/T/.tv.superfly.superconductor.ZoDdHy' not valid for use in process: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.), '/private/var/folders/vb/dnpj7gf12mg2dbv8vfxr83dc0000gn/T/.tv.superfly.superconductor.ZoDdHy' (code signature in '/private/var/folders/vb/dnpj7gf12mg2dbv8vfxr83dc0000gn/T/.tv.superfly.superconductor.ZoDdHy' not valid for use in process: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.)
at process.func [as dlopen] (node:electron/js2c/asar_bundle:5:1800)
at Object.Module._extensions..node (node:internal/modules/cjs/loader:1170:18)
at Object.func [as .node] (node:electron/js2c/asar_bundle:5:2027)
at Module.load (node:internal/modules/cjs/loader:982:32)
at Module._load (node:internal/modules/cjs/loader:823:12)
at Function.c._load (node:electron/js2c/asar_bundle:5:13331)
at Module.require (node:internal/modules/cjs/loader:1006:19)
at require (node:internal/modules/cjs/helpers:93:18)
at bindings (/Applications/SuperConductor.app/Contents/Resources/app.asar/node_modules/bindings/bindings.js:112:48)
at loadBinding (/Applications/SuperConductor.app/Contents/Resources/app.asar/node_modules/node-hid/nodehid.js:25:42)

Screenshots
superc

Desktop:

  • OS: MacOS
  • Version 12.3 - Apple Silicon

Transitions?

Missing the transition effects from the Caspar Client... something I´ve missed or not yet implemented?

Duration input bugs

Describe the bug
Certain entries to the Duration input field have unexpected results.

To Reproduce
All of the below cases should be reproducible on any timeline object:

  • Sometimes the infinity symbol cannot be edited by typing and the user must either paste in a complete value or use the arrow keys to increment/decrement. Once this is done, the value can be edited. Of note is that this wasn't happening to me earlier today, but now it is happening to myself and another person. I'm unsure what caused the behavior to change or what conditions are required that I'm not seeing.
  • Trying to enter a decimal that starts with 0 doesn't work. For example, trying to type in 10.05 will result in 1:05. Pasting in the complete value works.
  • Some time values unexpectedly get replaced with other values when typing. For example, trying to type in 1:16:33 will result in a value of 1:20:33. Again, pasting in the complete value works.

Expected behavior
All of the above cases should work as expected.

Screenshots
N/A

Desktop:

  • OS: Windows 10 Pro
  • Version 10.0.19044 Build 19044

Additional context
All issues are present on the develop branch.

Feature request: Import/Export Rundown from File

The logic behind the button "Import Rundown from anothr Project" is not implemented yet.

Instead of importing from another project, perhaps a file-based workflow would be more versatile?
It should be possible to export an individual rundown to a file, and also import a Rundown from a file.

Additional context
image

Mouse has life...

Describe the bug
Wonderfull work! for the first.
I´m testing on windows 10. SuperConductor 0.72 and mouse is moving every second on diagonal...

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.
Tip: Just click here and Paste your screenshot!

Desktop (please complete the following information):

  • OS: Windows 10
  • Version [e.g. 1.2.0]

Additional context
Add any other context about the problem here.

OSX not starting because of JavaScript error

Trying to start the SuperConductor application in OSX result in a JavaScript Error:

Uncaught Exception:
Error: dlopen(/var/folders/lm/7dvkmym16gz_qy_xb4yks8kw0000gn/T/.tv.superfly.superconductor.oCZdF7, 0x0001): tried: '/var/folders/lm/7dvkmym16gz_qy_xb4yks8kw0000gn/T/.tv.superfly.superconductor.oCZdF7' (code signature in '/private/var/folders/lm/7dvkmym16gz_qy_xb4yks8kw0000gn/T/.tv.superfly.superconductor.oCZdF7' not valid for use in process: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.), '/usr/lib/.tv.superfly.superconductor.oCZdF7' (no such file), '/private/var/folders/lm/7dvkmym16gz_qy_xb4yks8kw0000gn/T/.tv.superfly.superconductor.oCZdF7' (code signature in '/private/var/folders/lm/7dvkmym16gz_qy_xb4yks8kw0000gn/T/.tv.superfly.superconductor.oCZdF7' not valid for use in process: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.), '/usr/lib/.tv.superfly.superconductor.oCZdF7' (no such file)
at process.func [as dlopen] (node:electron/js2c/asar_bundle:5:1800)
at Object.Module._extensions..node (node:internal/modules/cjs/loader:1170:18)
at Object.func [as .node] (node:electron/js2c/asar_bundle:5:2027)
at Module.load (node:internal/modules/cjs/loader:982:32)
at Module._load (node:internal/modules/cjs/loader:823:12)
at Function.c._load (node:electron/js2c/asar_bundle:5:13331)
at Module.require (node:internal/modules/cjs/loader:1006:19)
at require (node:internal/modules/cjs/helpers:93:18)
at bindings (/Applications/SuperConductor.app/Contents/Resources/app.asar/node_modules/bindings/bindings.js:112:48)
at loadBinding (/Applications/SuperConductor.app/Contents/Resources/app.asar/node_modules/node-hid/nodehid.js:25:42)

Keep up the good work!

Feature request: Be able to set a hotkey to Global

Is your feature request related to a problem? Please describe.
When assigning keyboard-shortcuts as hotkeys, I must keep the window in focus, otherwise my shortcuts stop working.

Describe the solution you'd like

Be able to set a certain hotkey (or all of them?) to be Global. There is an electron API we should be able to use for this.

Feature request: Edit multiple things

Describe the solution you'd like
I would like to be able to select multiple items, and when I edit them in the right pane (like disabling them, or changing a duration) the change should be applied to all.

Additional context
Example:
image

Trying to drag a Part between two Groups sometimes results in the Part going below all Groups

Describe the bug
There are certain pixels between Groups where, if a dragged Part is hovered over them, the drop indicator appears at the end of the list of Groups instead of between the two Groups, as the user would expect.

To Reproduce
Steps to reproduce the behavior:

  1. Start with an empty rundown
  2. Drag a Resource onto the New Group button
  3. Add another Part to the same Group by dragging another Resource onto the New Part button within that Group
  4. Create a new empty Group under the first one
  5. Try to drag the second Part of the first Group to the space between the first and second Groups.
  6. Observe that on some of those pixels, the drop indicator moves to the end of the Group list instead of being between the first two Groups.

Expected behavior
A Part drag operation to the space between two Groups should always result in the Part becoming a new Transparent Group between those two Groups.

Screenshots
ezgif-4-8c9c7396d5

Desktop (please complete the following information):

Additional context
Related to #61 and may be the root cause of it as well.

I believe the source of this issue is the fact that the space between Groups is achieved via a CSS margin. I believe that margins like this are ignored by the drag and drop system and so the hover processing passes through to the <RundownView> component, which always places the dropped Part at the end of the Groups list (RundownView.tsx#L48-L50).

The fix may need to involve adding a dedicated <GroupSpacer> element that goes between each pair of <GroupView> elements, instead of the <GroupView> elements using a CSS margin to achieve their spacing. <GroupSpacer> would need to have the appropriate logic to handle hover and drop events. The end goal here is that there are no gaps and no margins between Groups, because either of those will result in the hover/drop events being handled by <RundownView>, which we don't want.

image

Windows 10 issue. No GUI loaded/Black screen.

Describe the bug
Can't load GUI, Reload or force reload doesn't work. Can access Preferences menu

To Reproduce
Steps to reproduce the behavior:
Installed last version 0.5.0
Same issue with previous versions

Expected behavior
Working correctly

Desktop (please complete the following information):

  • windows 10
  • version 21H2

Additional context
From dev console :

Download the React DevTools for a better development experience: https://reactjs.org/link/react-devtools
You might need to use a local HTTP server (instead of file://): https://reactjs.org/link/react-devtools-faq
App.tsx:102 triggerSendAll
PartView.tsx:134 Uncaught TypeError: Cannot read properties of undefined (reading 'references')
at PartView.tsx:134
at mountMemo (react-dom.development.js:15846)
at Object.useMemo (react-dom.development.js:16219)
at useMemo (react.development.js:1532)
at PartView (PartView.tsx:125)
at renderWithHooks (react-dom.development.js:14985)
at mountIndeterminateComponent (react-dom.development.js:17811)
at beginWork (react-dom.development.js:19049)
at HTMLUnknownElement.callCallback (react-dom.development.js:3945)
at Object.invokeGuardedCallbackDev (react-dom.development.js:3994)
react-dom.development.js:20085 The above error occurred in the component:

at PartView (file:///C:/Users/nicol/AppData/Local/Programs/superconductor/resources/app.asar/dist/renderer.js:225915:24)
at div
at div
at div
at GroupView (file:///C:/Users/nicol/AppData/Local/Programs/superconductor/resources/app.asar/dist/renderer.js:225234:20)
at div
at RundownView (file:///C:/Users/nicol/AppData/Local/Programs/superconductor/resources/app.asar/dist/renderer.js:227011:23)
at div
at div
at observerComponent (file:///C:/Users/nicol/AppData/Local/Programs/superconductor/resources/app.asar/dist/renderer.js:93900:73)
at SnackbarProvider (file:///C:/Users/nicol/AppData/Local/Programs/superconductor/resources/app.asar/dist/renderer.js:123338:24)
at InnerThemeProvider (file:///C:/Users/nicol/AppData/Local/Programs/superconductor/resources/app.asar/dist/renderer.js:62264:70)
at ThemeProvider (file:///C:/Users/nicol/AppData/Local/Programs/superconductor/resources/app.asar/dist/renderer.js:61975:5)
at ThemeProvider (file:///C:/Users/nicol/AppData/Local/Programs/superconductor/resources/app.asar/dist/renderer.js:62284:5)
at DndProvider (file:///C:/Users/nicol/AppData/Local/Programs/superconductor/resources/app.asar/dist/renderer.js:126398:23)
at ContextWrapper (file:///C:/Users/nicol/AppData/Local/Programs/superconductor/resources/app.asar/dist/renderer.js:231531:37)

Consider adding an error boundary to your tree to customize error handling behavior.
Visit https://reactjs.org/link/error-boundaries to learn more about error boundaries.
PartView.tsx:134 Uncaught TypeError: Cannot read properties of undefined (reading 'references')
at PartView.tsx:134
at mountMemo (react-dom.development.js:15846)
at Object.useMemo (react-dom.development.js:16219)
at useMemo (react.development.js:1532)
at PartView (PartView.tsx:125)
at renderWithHooks (react-dom.development.js:14985)
at mountIndeterminateComponent (react-dom.development.js:17811)
at beginWork (react-dom.development.js:19049)
at HTMLUnknownElement.callCallback (react-dom.development.js:3945)
at Object.invokeGuardedCallbackDev (react-dom.development.js:3994)

Feature request: ability to set a HyperDeck Play timeline object to the exact duration of the clip

Is your feature request related to a problem? Please describe.
When a user adds a HyperDeck clip to a timeline, they probably want to play the entire clip. Currently this means that they must go into some other software, grab the exact duration in hours:minutes:seconds:milliseconds, then enter that value into the duration field.

Describe the solution you'd like
I'd like to see two changes:

  1. Make the default duration of these timeline objects be the actual duration of the clip
  2. Provide a button to reset back to this duration

Additional context
HyperDeck functionality is not merged yet but likely will be soon: #71

Feature request: ability to disable Streamdeck integration

Is your feature request related to a problem? Please describe.
Some users want to run SuperConductor and Companion on the same computer. When both of these programs are running, they fight for control of any connected Streamdecks.

Describe the solution you'd like
I'd like the ability to disable the Streamdeck integration, either globally or on a per-Streamdeck basis.

Additional context
N/A

Jittery Part moves between Groups

Describe the bug
Sometimes moving a Part to a new Group or Transparent Group results in the attempted move jittering up and down while the user's cursor is still.

To Reproduce
Steps to reproduce the behavior:
This issue doesn't always occur, but the below steps seem to be pretty reliable as a repro:

  1. Start with an empty rundown
  2. Drag a Resource onto the New Group button
  3. Add another Part to the same Group by dragging another Resource onto the New Part button within that Group
  4. Create a new empty Group under the first one
  5. Try to drag the second Part of the first Group to near the top of the second Group

Expected behavior
If the user's cursor is still during a drag operation, things shouldn't be moving around underneath it.

Screenshots
ezgif-4-1afa813bfd

Desktop (please complete the following information):

  • OS: Windows 10 x64 Pro
  • Version 0.8.4

Additional context
The drag move code is... kind of a nightmare. I've tried to fix this bug in the past and walked away defeated. The issue may lie in one or more of these areas:

Add a filter for filtering Resource Library items on ResourceType

Is your feature request related to a problem? Please describe.
It would be useful to not only filter on the file name and device, but also filter on a type - which would be useful for devices providing many Resources of various types.

Describe the solution you'd like
Add a filter, like for device filtering, but with a list of all Resource Types.

Feature request: Be able to set a few default properties on Resources

Describe the solution you'd like
I have a CasparCG gfx-template that doesn't support "send stop() on stop".
I'd like to be able to set that property for that specific Resource, so that whenever I use that resource, that property is automatically set whenever I add it into a Rundown.

Code compilation problem

Describe your question
I did download source code from github and follow instruction to "compile" the code as cited at https://github.com/SuperFlyTV/SuperConductor/blob/master/doc/FOR_DEVELOPERS.md.

But in this process several errors occur.

I would like to know if the actual way of compiling the code is correct as mentioned in the documentation (link above)?

Due to the inumerous errors that appear, I did'nt paste here (for the moment).

What are the scenarios regarding of the artefacts version I should to compile it like Operation System, node, npm, yarn and others to ensure a build free of critical errors.

It's all. Thanks in advance.

Regivaldo Costa

Additional context

  • I'm using Ubuntu 22.04 (I try it on Debian 11.5 too)
  • First I used node v14.20.0 (as inidicated in .nvmrc); npm v6.14.17 and yarn v.3.2.3, but several erros occur;
  • Second I remove node_modules, change to node v16.17.0, npm v8.15.0 and yarn 3.2.3, but the errors continue as first action.

Feature request: Show an indicator when timelineObjs overlap

Is your feature request related to a problem? Please describe.
It's easy to have timelineObjs overlapping on a layer. This is generally unlikely to be intentional as the behavior isn't clearly defined to the user. Does the first timelineObj play to completion? Does the second timelineObj clobber it? What happens if the first timelineObj starts before the second one and ends after it? Does the second timelineObj clobber the first one only while it is active, and then does it go back to the first one? Etc.

Describe the solution you'd like
I'm unsure what the best solution here would be. Perhaps some kind of zebra stripe pattern on the overlapping section?

Untitled

Additional context
Implementing this might be difficult, especially in terms of performance. Part of me is hoping that an "automatic" solution with CSS mix-blend-mode might be possible.

Another approach would be to do what most NLEs do, which is prevent overlaps from occurring and instead trim the non-selected clip(s) such that an overlap is never happens.

Feature request: Undo/Redo transactions

Is your feature request related to a problem? Please describe.
Currently, SuperConductor treats every individual method call as a separate entry in the undo ledger. This works for many operations, but it does not work as intuitively for compound operations which involve multiple method calls, such as:

  • Dropping a Resource onto the New Group/New Part buttons (especially when multiple Resources are selected & dropped simultaneously) (1, 2, 3)
  • Deleting multiple Groups/Parts/TimelineObjs simultaneously (1)
  • Moving/duplicating TimelineObjs (especially when multiple TimelineObjs are selected) (1)

Describe the solution you'd like
If a single user action results in multiple method calls, then it makes sense that a single undo/redo would do the same.

Additional context
There's plenty of precedent for this transactional behavior. For example, moving multiple timeline objects in DaVinci Resolve used to result in an undo ledger entry titled "Undo move transaction". It now has the more user-friendly title "Undo move clips by N frames", but the concept is the same.

Off the top of my head, the fastest way to implement this would probably be to add two new IPC methods such as beginTransaction and endTransaction (names subject to debate). These methods would be called before and after any potentially compound operation. I believe that beginTransaction would need to accept an argument which gives an appropriate title to the undo ledger entry:

await ipcServer.beginTransaction({
	transactionTitle: 'Example Transaction'
})

await ipcServer.updateTimelineObj({
	foo: 'bar'
})

await ipcServer.insertTimelineObjs({
	foo: 'bar',
})

await ipsServer.endTransaction()

I do worry about race conditions & interference with the above approach. What if some other IPC method gets called elsewhere during this transaction? Is that even possible?

Another approach would be to create some kind of meta-method like this:

ipcServer.createTransaction({
	description: 'A transaction of some kind',
	methodCalls: [
		{
			methodName: 'updateTimelineObj',
			arguments: [
				{
					foo: 'bar',
				},
			],
		},
		{
			methodName: 'insertTimelineObjs',
			arguments: [
				{
					foo: 'bar',
				},
			],
		},
	],
})

The first drawback that I see to the meta-method approach is that the typings for it might be tricky. The benefit is that it prevents any race conditions or interference from other IPC calls that may be happening concurrently.

Can't resize an item with mouse in the timeline

Describe the bug
Can't resize with a mouse to set a duration.

To Reproduce
Steps to reproduce the behavior:

  1. Add a scene
  2. Try to resize with a mouse to set a duration,
  3. Need to add duration in the field
  4. Can resize the item with mouse in the timeline

Expected behavior
Adding items with infinite duration is ok, if we move the size, the item have to adapt a duration.

Desktop (please complete the following information):

  • OS: Debian 11
  • 0.8.3 appimage

Atem Input field is capped to 99

Describe the bug
A clear and concise description of what the bug is.

To Reproduce

  1. add an Atem Device to the internal Bridge
  2. Add a "ATEM ME 1" Timeline objekt
  3. Try to enter any number higher 99 into the Input field for Input

Expected behaviour
The Input field should at least allow inputs up to 99999
to allow to take Supersource or a Mediaplayer
See the link for IDs of super source -> https://atem.julusian.dev/enums
Desktop (please complete the following information):

  • OS: Windows 10
  • Version 0.9.2

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.