-
-
Notifications
You must be signed in to change notification settings - Fork 349
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fixture definition rework #1026
Comments
@janosvitok @siegmund42 @fxedel for reference |
Will you change the channel alias syntax as well to support multiple modes? |
I don't think so. I believe you're referring to the example Lukas gave about the Eurolite bar. In general, guys, please let's not complicate things too much. Everything could be done, indeed, but ask yourself: is it worth it ? |
Feature 4 addressed by a18c124 |
I don't refer to Lukas' example with different modes depending on the first channel. I refer to the reuse of such channels in several (normal, traditional) modes. My problem is that in your example, the channel number <Capability Min="200" Max="255" Preset=”Alias”>Sound active
<Alias name=”Sound sensitivity” number=”7” />
</Capability> This may work in mode 1, where Sound Sensitivity is at position 7, but not in mode 2, where Sound Sensitivity is at position 9 (e.g. because Pan fine and Tilt fine are added in this mode). This syntax simply doesn't allow the reuse in different modes – and I thought you were aiming to reduce redundancy? My proposal was to not reference a channel number ( Possible implementation: <Channel Name="Program Speed / Sound Sensitivity">
<Group Byte="0">Placeholder</Group>
<Default>Program Speed</Default>
</Channel>
<!-- ... -->
<Channel Name="Auto Programs">
<Group Byte="0">Effect</Group>
<Capability Min="0" Max="10">No function</Capability>
<Capability Min="11" Max="50">Program 1</Capability>
<Capability Min="51" Max="100">Program 2</Capability>
<Capability Min="101" Max="255" Preset=”Alias”>Sound active
<Alias set="Program Speed / Sound Sensitivity" to=”Sound sensitivity” />
</Capability>
</Channel>
<!-- ... -->
<Mode Name="8bit">
<Physical><!-- ... --></Physical>
<Channel Number="0">Pan</Channel>
<Channel Number="1">Tilt</Channel>
<Channel Number="2">Auto Programs</Channel>
<Channel Number="3">Program Speed / Sound Sensitivity</Channel>
</Mode>
<Mode Name="16bit">
<Physical><!-- ... --></Physical>
<Channel Number="0">Pan</Channel>
<Channel Number="1">Pan fine</Channel>
<Channel Number="2">Tilt</Channel>
<Channel Number="3">Tilt fine</Channel>
<Channel Number="4">Auto Programs</Channel>
<Channel Number="5">Program Speed / Sound Sensitivity</Channel>
</Mode> That's the way how we handle it at OFL, and it allows us to reuse such switching channels amongst different modes. Here's a list of example fixtures – they all use the same switching channel in multiple modes at different positions, which means that a hardcoded channel number wouldn't work:
As of practicalness: Of 109 OFL fixtures, 28 (25.6%) use switching channels and 10 (9.2%) of them use them in different modes in different positions – Lukas' fixture is an edge case, but this isn't. |
@fxedel I see your point, but I'm not convinced about placeholders. It's too difficult for users. <Capability Min="200" Max="255" Preset=”Alias”>Sound active
<Alias name=”Sound sensitivity” mode="10 Channel" number=”7” />
<Alias name=”Sound sensitivity” mode="16 Channel" number=”5” />
</Capability> So basically the workflow is:
|
Feature 2 addressed by 72aa602 |
@mcallegari I haven't thought about this solution, but this fixes the mode-issue as well. Nice! Looking forward to exporting our switching channels to QLC+ aliases without data loss 😃 Could you give an example how defaultValue would be implemented in XML? We already store it in OFL, so it might be pretty easy to export this on our side. |
Pretty straightforward actually: <Channel Name="Tilt" Default="128" Preset="PositionTilt"/> The Default attribute is present only if value != 0 |
At least it is part of a group of "edge cases". I did some research and it turns out at least the following fixtures already included in QLC+ will most probably have the same problem:
Some fixtures not yet included in QLC+ with possible same problem:
I don't exactly know the implications of this, but I guess the number of fixtures is quite low and nobody has ever complained about a problem with it so it should be fine (let's hope no manufacturer will built such fixtures with a silly DMX chart). Just was curious how much of the fixtures will be affected. Anyway, keep up the good work - looks good to me so far! |
We also have such a fixture in our database: We basically use aliases for each channel to be either a working or a Nothing channel, and we added different modes for each mode that can be set in the first channel. It was quite difficult to add this fixture, but it kind of works. A solution to make this easier may be useful, but we also rate this as a low-priority thing. |
This goes from 7.7MB to 6.2MB Includes single capability migration and global physical information optimization
Alright, took me an awful amount of time and patience, but I went through all the 9926 single capability channels and migrated them to the new format. |
To be honest, I'd migrate the code to C++ (most of the code is already there) and include it in fixture editor and/or a command line tool that would be run as part of build process. |
Updating the schema should be another task in the TODO list, shouldn't it? This could also prove that your immense work on updating the fixtures was right and didn't cause any errors. As of fixture scripts: As it's important to use maintainable code, Python would probably be a good choice. (Even if I don't like it that much, but I don't know Ruby and therefore can't help updating the existing script.) I think Python is also the most commonly used scripting language in this project, isn't it? |
@janosvitok updated the definition schema. Thanks. I've tweaked the Python script I started to generate also the Fixture map. It's now called 'fixtures-tool.py' |
For who is still following this thread, I've started to add channel aliases.
That you can read like this: in Mode="10 Channel", replace Channel="Dimmer" With="Sound sensitivity"
Changes to the Fixture Editor And in the new "Alias" tab the situation is this: Obviously this is an extreme case. Normally the Alias tab will contain just 4-5 entries. Now I "only" need to handle the channels replacement at runtime and update the UI accordingly. |
@mcallegari The preview looks awesome! 🎉 Is it also possible to make a scene that only affects "Sound Sensitivity" and not "Program Speed", if "Sound Sensitivity" is an alias of "Program Speed"? (without setting the channel that activates this alias) |
Not sure I understand the question, but if I got it right, then I think the answer is no. A Scene is just a snapshot of fixture/channel index/value triples. (*) with one exception: if an alias replaces a channel from HTP to LTP, then the engine acts accordingly, and that happens internally, without any UI involvement |
Have a look at the Chauvet DJ SlimPAR Pro QZ12 (11-channel mode): There's a "Programs" channel that includes some Auto modes and a Sound mode and therefore switches another channel between "Program Speed" and "Sound Sensitivity". So it makes sense to have faders for each "channel behavior", of which only one applies at a time, like so: Having the ability to only set one channel's value (even if it may be inactive) in scenes, sequences, and so on extends this use case. Currently, it seems like it's only possible to have a single fader for both "Program Speed" and "Sound Sensitivity", which are completely different effects (e.g. when I have loud and fast music, I want fast speed and low sensitivity). However, I can guess the huge effort to make changing the channel names and icons depending on an other channel's value working ;). Implementing switching channels in OFL had also been very complicated and has still some limitations. |
I see the usage case, but I'd say you can resolve it by placing "Program Speed" and "Sound Sensitivity" sliders in a multi page frame. This way both sliders control the same channel, but the value used is the one of the active frame page. Probably you can even automatically switch the frame page when clicking on VC buttons. |
Interesting idea! However, I wasn't able to make it working in my example show from above: I've put each slider into a different frame page, both affect the same channel using level mode. But when I switch the page, the newly shown fader's value isn't applied – only when I move the handle a little bit with the mouse (which is not much better than having a single fader and adjusting it each time). I thought automatic switching was easy with Loopback, but as a page is shown when the attached input channel changes, switching from "Sound" to "Auto X" didn't work: Loopback channel 1 ("Show Program Speed") and Loopback channel 2 ("Show Sound Sensitivity") have changed, and the latter takes precedence. Considering the effort it took me to implement this in a show, I think it'll be worth saving my proposal as an idea for future additions. (Maybe at first only for faders) |
@mcallegari As of fixtures: I'll have a closer look at the list later. Some of them are also included in OFL, so we can replace them as soon as the new plugin is finished. |
@fxedel |
@mcallegari What exactly is the difference between "PulseInSlowToFast" and "PulseOutSlowToFast"? In my understanding, pulse is a sinus or ziczac curve (of Intensity), so what's "in" and what's "out"? Maybe something like ramp up / down? If so, which would be the correct preset for a sinus pulse? Here's a visualization of my understanding of Shutter effects: |
XML schema is outdated. Fixture definitions do not validate at current git master. Aliases do not validate yet. I don't like the way they are implemented. I think that a tag should contain either direct content or other tags, but not both. |
@fxedel Pulse In and Pulse Out are what you call Ramp Up / Ramp Down. I tried to watch youtube videos showing this feature but I haven't found much material. And to be honest I've never seen "ramp" into definitions, always "pulse". As for Sine Pulse, I can add the enum to capability presets.
@janosvitok the idea is there since February. Maybe you could come out with this statement before ? |
Doesn't make any difference to me to rename stuff. The difficult part is to simulate them in the UI.
|
I've also seen "ramp up" in some manuals and I think renaming the presets makes the meaning clearer. Maybe simply "Pulse" instead of "SinePulse" to also allow ziczac and other up/down pulsing? |
I know. I didn't find the time sooner.
The problem is that you can't specify text position between tags once you allow mixed content ( |
So, we've got schemas for several QLC+ XML formats, but they're not used in any automation. |
I strongly support your proposed idea. We also have schema and logical tests in OFL and are glad everytime they find an error we wouldn't have seen. What about running the tests by Travis or a similar CI? |
Well, validation makes sense only when a new fixture is pushed. Doing it on every commit seems like too much to me :) |
https://github.com/mcallegari/qlcplus/blob/master/resources/fixtures/check contains call to xmllint to verify the fixtures and fixturemap.xml. With little reformatting, it can be run from travis. It takes just few seconds to run. So there are two issues:
|
I've implemented the above in #1065. I propose that we split the fixtures directory by manufacturer. 1000 files in a directory is a bit much. |
I noticed that too. Mainly a GitHub limitation though...
We can even rename all the files since manufacturer is redundant. Like: 12P-Hex.qxf |
Done. Fixtures are now committed and installed in folders, by manufacturer. I took the chance also to improve gobos installation. The only drawback is that ANY file in folders will be installed now. But since we have control over it, only PNG files will be there. |
Hi Massimo, our big capability schema redesign in the Open Fixture Library is finally over, too! I was able to write a new export plugin for the new QLC+ fixture format syntax quite easily with our new syntax; see OFL PR #547. Please see my comment in the PR to see how the output changed from QLC+ 4 plugin to QLC+ 5 plugin for our test fixtures. The exported If you have any remarks, please let us know! |
@FloEdelmann well done with the export plugin ! Even though "QLC+ 5" is not exactly the correct name. New definitions can be used also on 4.12.0, when I release it. The main difference is that QLC+ 5 considers much more definition details than QLC+ 4. So, I've dedicated the whole day to fixtures, since nobody picked up the txt file I shared almost 3 months ago. I realized some more presets were missing, so I added them. Also I moved Iris presets to the shutter category, since it seems an iris can do also strobe/pulse effects. The reference definition that has pretty much everything is: Briteq-BTX-180LS.qxf In this regard, can anyone point me to some documentation or give an explanation about the differences and usages of shutter, iris, zoom and focus ? I'm interested also in the mechanical aspects of them. So, except for the need of manpower to review existing definitions capabilities and aliases, this task is pretty much over. I'll leave it open for a few more days and then close. |
Specifying the prism faces (and especially visualizing them) is a good idea! However, several fixtures have multiple prisms (see Martin MAC Axiom Hybrid), e.g. a 3-facet and an 8-facet one. How to solve this? Maybe by using the capability's "Res1" attribute instead? Zoom and Focus are lenses. Zoom affects the beam size (the beam keeps "sharp"), Focus the focus point (blurred -> sharp). In my understanding, Iris is a circular shutter. If set to 50%, the beam diameter is half of the full size (while keeping the beam edges "sharp"). This all refers to the question where an effect (Focus, Iris, ...) is applied inside the moving head: Before or after the focus point -> "blurred or sharp" beam transformation. |
@fxedel thanks for the info. Actually there is also the "frost" effect which is still kind of a mystery to me... Your proposal for prism faces via capability preset is good! I haven't thought about it. It might be a special case overriding the global prism faces number. |
Frost is a (gradual) diffusion filter. It allows to change light from hard edge (spot) to soft edge (wash). Together with beam gobos (full gobo with small hole in the middle) allows to create hybrid fixtures like Robe Pointe. One fixture that is able to act as beam, spot and wash. It a spot that has frost filter to make it wash and pinhole gobo to make it a beam (although with smaller light output, since part of the light is blocked by the gobo). (optical) Prism is a what it says: a piece of glass that splits light in several beams on its faces (think of Dark side of the moon cover). See http://www.movinghead.net/Uploads/201410/543b7337e2bf5.jpg The prism is either put in the light path or not, and can be rotated. Sometimes there are more prisms (for example 3-face circular + 6-face linear), that are exclusive to each other (if they are on the same wheel/flap) or they can be selected both (if they are separate). |
@fxedel @FloEdelmann I reverted my "global prism faces" setting in favour to the solution proposed by Felix. It's better cause it doesn't impact at all those fixture that have nothing to do with prisms. (and creates less confusion to definition creators) |
Documentation updated. Closing this then. |
The plan is documented here
The rework ~~~is happening in the newdef branch~~~ has been merged to master
When completed, this should address #696 and #989
Items on the list:
The text was updated successfully, but these errors were encountered: