Giter VIP home page Giter VIP logo

xstudio's Introduction

Welcome to xSTUDIO

xSTUDIO is a media playback and review application designed for professionals working in the film and TV post production industries, particularly the Visual Effects and Feature Animation sectors. xSTUDIO is focused on providing an intuitive, easy to use interface with a high performance playback engine at its core and C++ and Python APIs for pipeline integration and customisation for total flexibility.

Building xSTUDIO

This release of xSTUDIO can be built on various Linux flavours and Windows 10 and 11. MacOS compatibility is not available yet but this work is on the roadmap for 2024.

We provide comprehensive build steps for 4 of the most popular distributions.

Building xSTUDIO for Linux

Building xSTUDIO for Windows

Building xSTUDIO for MacOS

MacOS compatibility is not yet available. Watch this space!

Documentation Note

Note that the xSTUDIO user guide is built with Sphinx using the Read-The-Docs theme. The package dependencies for building the docs are somewhat onerous to install and as such we have ommitted these steps from the instructions and instead recommend that you turn off the docs build. Instead, we include the fully built docs (as html pages) as part of this repo and building xSTUDIO will install these pages so that they can be loaded into your browser via the Help menu in the main UI.

xstudio's People

Contributors

adro79 avatar alatdneg avatar jmertic avatar markreidvfx avatar mpkepic avatar nrusch avatar tedwaine avatar tobkum 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  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

xstudio's Issues

function declaration different form definition

/src/audio/src/audio_output.cpp line 534

template
void reverse_audio_buffer(const T *in, T *out, const int num_channels, const int num_samples);
vs
template
void reverse_audio_buffer(const T *in, T *out, const int num_samples, const int num_channels) { // <- parameter swapped

int c = num_channels;

Proper way of creating non-modal Qt window

Hi! I can create a modal Qt window via window.exec_() but when I try using show(), the frame comes up, but the window does not draw.

We have had similar issues with other applications and developed workarounds by hooking up with the host application's tick callback to call processEvents() and so to allow redraws and other events to tick.

But I was wondering what is the best approach with non-modal guis in xstudio?

Thank you for reading.

Playlist demo code not behaving as expected

Following the demo code from this tutorial;
file:///home/centos/xstudio/build/bin/docs/user_docs/appendix/python_scripting.html

I have minorly adapted it to run media on our own system like so;

from xstudio.connection import Connection
from xstudio.core import MediaType, FrameRate

XSTUDIO = Connection(auto_connect=True)

frames = '/home/centos/images/sequence/test.####.exr'
frames2 = '/home/centos/images/sequence2/test.####.exr'
playlist_uuid, playlist = XSTUDIO.api.session.create_playlist(name='Test')
XSTUDIO.api.session.set_on_screen_source(playlist)
media = playlist.add_media(frames)
media2 = playlist.add_media(frames2)
playhead = playlist.create_playhead()
playhead_selector = playlist.playhead_selection
playhead_selector.set_selection([media.uuid, media2.uuid])
playhead.playing = True

With an xstudio player already launched from another shell and running the above code, I would expect a playlist with two images sequences to be playing one after the other. However what I actually see is just the first media item playing. It seems to be coming from the Panels > Settings > Begin Playback on Startup option though, because with that unchecked then the first media item is loaded in the viewport, but isn't playing.

In fact, I can't seem to find any UI options that allow me to play media items sequentially.

What needs to be changed in this demo code to view multiple media items? To be clear, both the items are loaded in the playlist, and I can manually swap to each of them in the xstudio UI, it just seems to be playback is not what I was expecting.

[Arch Linux] Build error

First of all, congratulations on releasing xstudio! Been waiting so long for this one!

I've tried to build the program for Arch Linux, so if everything works fine I can create an AUR package.

This is my terminal output:

➜  build git:(main) ✗ make -j $JOBS
[  0%] Built target fonts-copy
[  0%] Automatic MOC and UIC for target quickfuture_qml
[  0%] Built target snippets-copy
[  0%] Copying built docs to build folder
[  6%] Built target preferences-copy
[ 10%] Built target reproc
[ 10%] Built target COPY_BVP_QML
[ 10%] Built target COPY_ANNO_QML
[ 10%] Built target COPY_VHUD_QML
[ 10%] Built target BuiltDocs
[ 10%] Built target quickfuture_qml_autogen
[ 10%] Built target reproc++
[ 11%] Built target quickfuture_qml
[ 17%] Built target utility
[ 17%] Built target utility_static
[ 17%] Automatic MOC and UIC for target helper_qml
[ 19%] Built target ui_base
[ 19%] Built target broadcast
[ 20%] Built target caf_utility
[ 21%] Built target broadcast_static
[ 21%] Built target http_client
[ 21%] Built target event
[ 22%] Built target colour_pipeline
[ 23%] Built target viewport_ui_static
[ 23%] Built target helper_qml_autogen
[ 26%] Built target timeline_static
[ 26%] Built target json_store
[ 27%] Built target embedded_python
[ 27%] Built target json_store_static
[ 28%] Built target scanner
[ 30%] Built target tag
[ 30%] Built target bookmark
[ 31%] Built target global_store
[ 31%] Built target global_store_static
[ 34%] Built target helper_qml
[ 34%] Automatic MOC and UIC for target contact_sheet_qml
[ 34%] Automatic MOC and UIC for target bookmark_qml
[ 34%] Automatic MOC and UIC for target embedded_python_qml
[ 34%] Automatic MOC and UIC for target event_qml
[ 35%] Automatic MOC and UIC for target global_store_qml
[ 35%] Automatic MOC and UIC for target log_qml
[ 36%] Built target data_source
[ 36%] Automatic MOC and UIC for target session_qml
[ 36%] Built target media_cache
[ 37%] Automatic MOC and UIC for target timeline_qml
[ 37%] Built target module
[ 37%] Automatic MOC and UIC for target studio_qml
[ 37%] Built target sync
[ 37%] Built target media_hook
[ 38%] Built target thumbnail
[ 39%] Built target media_metadata
[ 39%] Built target contact_sheet_qml_autogen
[ 39%] Built target bookmark_qml_autogen
[ 39%] Built target embedded_python_qml_autogen
[ 39%] Built target log_qml_autogen
[ 39%] Built target event_qml_autogen
[ 39%] Built target global_store_qml_autogen
[ 39%] Built target timeline_qml_autogen
[ 39%] Built target studio_qml_autogen
[ 40%] Automatic MOC and UIC for target tag_qml
[ 41%] Building CXX object src/python_module/src/CMakeFiles/__pybind_xstudio.dir/py_messages.cpp.o
[ 41%] Built target session_qml_autogen
[ 41%] Building CXX object src/python_module/src/CMakeFiles/__pybind_xstudio.dir/py_xstudio.cpp.o
[ 42%] Automatic MOC and UIC for target subset_qml
[ 42%] Automatic MOC and UIC for target json_store_qml
[ 42%] Automatic MOC and UIC for target module_qml
[ 42%] Built target tag_qml_autogen
[ 43%] Built target plugin_manager
[ 43%] Built target media_metadata_openexr
[ 43%] Built target subset_qml_autogen
[ 44%] Built target basic_viewport_masking
[ 44%] Built target json_store_qml_autogen
[ 44%] Built target colour_pipeline_ocio
[ 45%] Built target media_metadata_ffprobe
[ 45%] Built target module_qml_autogen
[ 47%] Built target playhead
[ 48%] Built target viewport_ui
[ 49%] Built target viewport_hud
[ 50%] Building CXX object src/ui/qml/bookmark/src/CMakeFiles/bookmark_qml.dir/bookmark_ui.cpp.o
[ 50%] Building CXX object src/ui/qml/embedded_python/src/CMakeFiles/embedded_python_qml.dir/embedded_python_ui.cpp.o
[ 50%] Building CXX object src/ui/qml/bookmark/src/CMakeFiles/bookmark_qml.dir/__/__/__/__/__/include/xstudio/ui/qml/moc_bookmark_ui.cpp.o
[ 51%] Building CXX object src/ui/qml/contact_sheet/src/CMakeFiles/contact_sheet_qml.dir/contact_sheet_ui.cpp.o
[ 52%] Building CXX object src/ui/qml/embedded_python/src/CMakeFiles/embedded_python_qml.dir/__/__/__/__/__/include/xstudio/ui/qml/moc_embedded_python_ui.cpp.o
[ 52%] Building CXX object src/ui/qml/event/src/CMakeFiles/event_qml.dir/event_ui.cpp.o
[ 52%] Building CXX object src/ui/qml/event/src/CMakeFiles/event_qml.dir/__/__/__/__/__/include/xstudio/ui/qml/moc_event_ui.cpp.o
[ 52%] Building CXX object src/ui/qml/contact_sheet/src/CMakeFiles/contact_sheet_qml.dir/__/__/__/__/__/include/xstudio/ui/qml/moc_contact_sheet_ui.cpp.o
[ 52%] Building CXX object src/ui/qml/log/src/CMakeFiles/log_qml.dir/log_ui.cpp.o
[ 52%] Building CXX object src/ui/qml/log/src/CMakeFiles/log_qml.dir/__/__/__/__/__/include/xstudio/ui/qml/moc_log_ui.cpp.o
[ 52%] Building CXX object src/ui/qml/subset/src/CMakeFiles/subset_qml.dir/subset_ui.cpp.o
[ 52%] Building CXX object src/ui/qml/session/src/CMakeFiles/session_qml.dir/session_ui.cpp.o
[ 52%] Building CXX object src/ui/qml/subset/src/CMakeFiles/subset_qml.dir/__/__/__/__/__/include/xstudio/ui/qml/moc_subset_ui.cpp.o
[ 53%] Building CXX object src/ui/qml/studio/src/CMakeFiles/studio_qml.dir/studio_ui.cpp.o
[ 56%] Built target timeline
[ 57%] Building CXX object src/ui/qml/session/src/CMakeFiles/session_qml.dir/__/__/__/__/__/include/xstudio/ui/qml/moc_session_ui.cpp.o
[ 58%] Building CXX object src/ui/qml/global_store/src/CMakeFiles/global_store_qml.dir/global_store_ui.cpp.o
[ 59%] Built target media
[ 59%] Building CXX object src/ui/qml/tag/src/CMakeFiles/tag_qml.dir/tag_ui.cpp.o
[ 59%] Building CXX object src/ui/qml/timeline/src/CMakeFiles/timeline_qml.dir/timeline_ui.cpp.o
[ 59%] Building CXX object src/ui/qml/studio/src/CMakeFiles/studio_qml.dir/__/__/__/__/__/include/xstudio/ui/qml/moc_studio_ui.cpp.o
[ 59%] Building CXX object src/ui/qml/tag/src/CMakeFiles/tag_qml.dir/__/__/__/__/__/include/xstudio/ui/qml/moc_tag_ui.cpp.o
[ 60%] Building CXX object src/ui/qml/global_store/src/CMakeFiles/global_store_qml.dir/properties_ui.cpp.o
[ 60%] Building CXX object src/ui/qml/global_store/src/CMakeFiles/global_store_qml.dir/__/__/__/__/__/include/xstudio/ui/qml/moc_global_store_ui.cpp.o
[ 60%] Building CXX object src/ui/qml/json_store/src/CMakeFiles/json_store_qml.dir/json_store_ui.cpp.o
[ 60%] Building CXX object src/ui/qml/global_store/src/CMakeFiles/global_store_qml.dir/__/__/__/__/__/include/xstudio/ui/qml/moc_properties_ui.cpp.o
[ 60%] Building CXX object src/ui/qml/json_store/src/CMakeFiles/json_store_qml.dir/__/__/__/__/__/include/xstudio/ui/qml/moc_json_store_ui.cpp.o
[ 61%] Building CXX object src/ui/qml/timeline/src/CMakeFiles/timeline_qml.dir/__/__/__/__/__/include/xstudio/ui/qml/moc_timeline_ui.cpp.o
[ 61%] Building CXX object src/ui/qml/module/src/CMakeFiles/module_qml.dir/module_menu_ui.cpp.o
[ 61%] Building CXX object src/ui/qml/module/src/CMakeFiles/module_qml.dir/module_ui.cpp.o
[ 61%] Building CXX object src/ui/qml/module/src/CMakeFiles/module_qml.dir/__/__/__/__/__/include/xstudio/ui/qml/moc_module_ui.cpp.o
[ 62%] Building CXX object src/ui/qml/module/src/CMakeFiles/module_qml.dir/__/__/__/__/__/include/xstudio/ui/qml/moc_module_menu_ui.cpp.o
[ 63%] Built target contact_sheet
[ 63%] Automatic MOC and UIC for target media_qml
[ 64%] Built target media_reader
[ 64%] Built target media_qml_autogen
[ 65%] Built target media_reader_blank
[ 66%] Built target media_reader_ffmpeg
[ 67%] Built target audio_output
[ 69%] Built target opengl_viewport
[ 69%] Built target media_reader_openexr
[ 70%] Built target media_reader_ppm
[ 70%] Automatic MOC and UIC for target viewport_widget
[ 71%] Automatic MOC and UIC for target playhead_qml
[ 72%] Built target subset
[ 73%] Built target annotations_tool
[ 76%] Built target viewport_widget_autogen
[ 76%] Built target media_qml
[ 76%] Built target playhead_qml_autogen
[ 76%] Built target playlist
[ 77%] Built target session
[ 79%] Built target viewport_widget
[ 80%] Built target playhead_qml
[ 81%] Automatic MOC and UIC for target viewport_qml
[ 82%] Built target studio
[ 82%] Built target viewport_qml_autogen
[ 82%] Automatic MOC and UIC for target playlist_qml
[ 83%] Building CXX object src/global/src/CMakeFiles/global.dir/global_actor.cpp.o
[ 83%] Built target playlist_qml_autogen
[ 85%] Built target viewport_qml
[ 87%] Built target playlist_qml
In file included from /home/adro/Applications/3D/xstudio/include/xstudio/utility/serialise_headers.hpp:9,
                 from /home/adro/Applications/3D/xstudio/src/python_module/src/py_xstudio.cpp:26:
/home/adro/Applications/3D/xstudio/include/xstudio/shotgun_client/shotgun_client.hpp: In instantiation of ‘xstudio::shotgun_client::Field<T>::Field(const xstudio::utility::JsonStore&) [with T = xstudio::utility::JsonStore]’:
/home/adro/Applications/3D/xstudio/include/xstudio/shotgun_client/shotgun_client.hpp:1183:84:   required from here
/home/adro/Applications/3D/xstudio/include/xstudio/shotgun_client/shotgun_client.hpp:185:52: error: no matching function for call to ‘nlohmann::json_abi_v3_11_2::basic_json<>::get<xstudio::utility::JsonStore>() const’
  185 |                     value_ = jsn.at("value").get<T>();
      |                              ~~~~~~~~~~~~~~~~~~~~~~^~
In file included from /home/adro/Applications/3D/xstudio/include/xstudio/utility/uuid.hpp:16,
                 from /home/adro/Applications/3D/xstudio/src/python_module/src/py_opaque.hpp:9,
                 from /home/adro/Applications/3D/xstudio/src/python_module/src/py_xstudio.cpp:4:
/usr/include/nlohmann/json.hpp:1731:10: note: candidate: ‘template<class ValueTypeCV, class ValueType> constexpr decltype (declval<const nlohmann::json_abi_v3_11_2::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType>::basic_json_t&>().get_impl<ValueType>(nlohmann::json_abi_v3_11_2::detail::priority_tag<4>{})) nlohmann::json_abi_v3_11_2::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType>::get() const [with ValueType = ValueTypeCV; ObjectType = std::map; ArrayType = std::vector; StringType = std::__cxx11::basic_string<char>; BooleanType = bool; NumberIntegerType = long int; NumberUnsignedType = long unsigned int; NumberFloatType = double; AllocatorType = std::allocator; JSONSerializer = nlohmann::json_abi_v3_11_2::adl_serializer; BinaryType = std::vector<unsigned char>]’
 1731 |     auto get() const noexcept(
      |          ^~~
/usr/include/nlohmann/json.hpp:1731:10: note:   template argument deduction/substitution failed:
/usr/include/nlohmann/json.hpp: In substitution of ‘template<class ValueTypeCV, class ValueType> constexpr decltype (std::declval<const nlohmann::json_abi_v3_11_2::basic_json<>&>().get_impl<ValueType>(nlohmann::json_abi_v3_11_2::detail::priority_tag<4>{})) nlohmann::json_abi_v3_11_2::basic_json<>::get() const [with ValueTypeCV = xstudio::utility::JsonStore; ValueType = xstudio::utility::JsonStore]’:
/home/adro/Applications/3D/xstudio/include/xstudio/shotgun_client/shotgun_client.hpp:185:52:   required from ‘xstudio::shotgun_client::Field<T>::Field(const xstudio::utility::JsonStore&) [with T = xstudio::utility::JsonStore]’
/home/adro/Applications/3D/xstudio/include/xstudio/shotgun_client/shotgun_client.hpp:1183:84:   required from here
/usr/include/nlohmann/json.hpp:1733:81: error: no matching function for call to ‘nlohmann::json_abi_v3_11_2::basic_json<>::get_impl<xstudio::utility::JsonStore>(nlohmann::json_abi_v3_11_2::detail::priority_tag<4>) const’
 1733 |     -> decltype(std::declval<const basic_json_t&>().template get_impl<ValueType>(detail::priority_tag<4> {}))
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/nlohmann/json.hpp:1593:15: note: candidate: ‘template<class ValueType, typename std::enable_if<(nlohmann::json_abi_v3_11_2::detail::is_default_constructible<T1>::value && nlohmann::json_abi_v3_11_2::detail::has_from_json<nlohmann::json_abi_v3_11_2::basic_json<>, ValueType, void>::value), int>::type <anonymous> > ValueType nlohmann::json_abi_v3_11_2::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType>::get_impl(nlohmann::json_abi_v3_11_2::detail::priority_tag<0>) const [with typename std::enable_if<(nlohmann::json_abi_v3_11_2::detail::is_default_constructible<ValueType>::value && nlohmann::json_abi_v3_11_2::detail::has_from_json<nlohmann::json_abi_v3_11_2::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType>, ValueType>::value), int>::type <anonymous> = ValueType; ObjectType = std::map; ArrayType = std::vector; StringType = std::__cxx11::basic_string<char>; BooleanType = bool; NumberIntegerType = long int; NumberUnsignedType = long unsigned int; NumberFloatType = double; AllocatorType = std::allocator; JSONSerializer = nlohmann::json_abi_v3_11_2::adl_serializer; BinaryType = std::vector<unsigned char>]’
 1593 |     ValueType get_impl(detail::priority_tag<0> /*unused*/) const noexcept(noexcept(
      |               ^~~~~~~~
/usr/include/nlohmann/json.hpp:1593:15: note:   template argument deduction/substitution failed:
/usr/include/nlohmann/json.hpp:1592:28: error: no type named ‘type’ in ‘struct std::enable_if<false, int>’
 1592 |                    int > = 0 >
      |                            ^
/usr/include/nlohmann/json.hpp:1635:15: note: candidate: ‘template<class ValueType, typename std::enable_if<nlohmann::json_abi_v3_11_2::detail::has_non_default_from_json<nlohmann::json_abi_v3_11_2::basic_json<>, ValueType, void>::value, int>::type <anonymous> > ValueType nlohmann::json_abi_v3_11_2::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType>::get_impl(nlohmann::json_abi_v3_11_2::detail::priority_tag<1>) const [with typename std::enable_if<nlohmann::json_abi_v3_11_2::detail::has_non_default_from_json<nlohmann::json_abi_v3_11_2::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType>, ValueType>::value, int>::type <anonymous> = ValueType; ObjectType = std::map; ArrayType = std::vector; StringType = std::__cxx11::basic_string<char>; BooleanType = bool; NumberIntegerType = long int; NumberUnsignedType = long unsigned int; NumberFloatType = double; AllocatorType = std::allocator; JSONSerializer = nlohmann::json_abi_v3_11_2::adl_serializer; BinaryType = std::vector<unsigned char>]’
 1635 |     ValueType get_impl(detail::priority_tag<1> /*unused*/) const noexcept(noexcept(
      |               ^~~~~~~~
/usr/include/nlohmann/json.hpp:1635:15: note:   template argument deduction/substitution failed:
/usr/include/nlohmann/json.hpp:1634:28: error: no type named ‘type’ in ‘struct std::enable_if<false, int>’
 1634 |                    int > = 0 >
      |                            ^
/usr/include/nlohmann/json.hpp:1660:19: note: candidate: ‘template<class BasicJsonType, typename std::enable_if<nlohmann::json_abi_v3_11_2::detail::is_basic_json<BasicJsonType>::value, int>::type <anonymous> > BasicJsonType nlohmann::json_abi_v3_11_2::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType>::get_impl(nlohmann::json_abi_v3_11_2::detail::priority_tag<2>) const [with typename std::enable_if<nlohmann::json_abi_v3_11_2::detail::is_basic_json<BasicJsonType>::value, int>::type <anonymous> = BasicJsonType; ObjectType = std::map; ArrayType = std::vector; StringType = std::__cxx11::basic_string<char>; BooleanType = bool; NumberIntegerType = long int; NumberUnsignedType = long unsigned int; NumberFloatType = double; AllocatorType = std::allocator; JSONSerializer = nlohmann::json_abi_v3_11_2::adl_serializer; BinaryType = std::vector<unsigned char>]’
 1660 |     BasicJsonType get_impl(detail::priority_tag<2> /*unused*/) const
      |                   ^~~~~~~~
/usr/include/nlohmann/json.hpp:1660:19: note:   template argument deduction/substitution failed:
/usr/include/nlohmann/json.hpp:1659:28: error: no type named ‘type’ in ‘struct std::enable_if<false, int>’
 1659 |                    int > = 0 >
      |                            ^
/usr/include/nlohmann/json.hpp:1683:16: note: candidate: ‘template<class BasicJsonType, typename std::enable_if<std::is_same<BasicJsonType, nlohmann::json_abi_v3_11_2::basic_json<> >::value, int>::type <anonymous> > nlohmann::json_abi_v3_11_2::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType> nlohmann::json_abi_v3_11_2::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType>::get_impl(nlohmann::json_abi_v3_11_2::detail::priority_tag<3>) const [with typename std::enable_if<std::is_same<BasicJsonType, nlohmann::json_abi_v3_11_2::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType> >::value, int>::type <anonymous> = BasicJsonType; ObjectType = std::map; ArrayType = std::vector; StringType = std::__cxx11::basic_string<char>; BooleanType = bool; NumberIntegerType = long int; NumberUnsignedType = long unsigned int; NumberFloatType = double; AllocatorType = std::allocator; JSONSerializer = nlohmann::json_abi_v3_11_2::adl_serializer; BinaryType = std::vector<unsigned char>]’
 1683 |     basic_json get_impl(detail::priority_tag<3> /*unused*/) const
      |                ^~~~~~~~
/usr/include/nlohmann/json.hpp:1683:16: note:   template argument deduction/substitution failed:
compilation terminated due to -fmax-errors=5.
make[2]: *** [src/python_module/src/CMakeFiles/__pybind_xstudio.dir/build.make:216: src/python_module/src/CMakeFiles/__pybind_xstudio.dir/py_xstudio.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
[ 88%] Linking CXX shared library ../../../../../bin/lib/libevent_qml.so
[ 89%] Built target event_qml
In file included from /home/adro/Applications/3D/xstudio/include/xstudio/utility/serialise_headers.hpp:9,
                 from /home/adro/Applications/3D/xstudio/src/python_module/src/py_messages.cpp:19:
/home/adro/Applications/3D/xstudio/include/xstudio/shotgun_client/shotgun_client.hpp: In instantiation of ‘xstudio::shotgun_client::Field<T>::Field(const xstudio::utility::JsonStore&) [with T = xstudio::utility::JsonStore]’:
/home/adro/Applications/3D/xstudio/include/xstudio/shotgun_client/shotgun_client.hpp:1183:84:   required from here
/home/adro/Applications/3D/xstudio/include/xstudio/shotgun_client/shotgun_client.hpp:185:52: error: no matching function for call to ‘nlohmann::json_abi_v3_11_2::basic_json<>::get<xstudio::utility::JsonStore>() const’
  185 |                     value_ = jsn.at("value").get<T>();
      |                              ~~~~~~~~~~~~~~~~~~~~~~^~
In file included from /home/adro/Applications/3D/xstudio/include/xstudio/utility/uuid.hpp:16,
                 from /home/adro/Applications/3D/xstudio/src/python_module/src/py_opaque.hpp:9,
                 from /home/adro/Applications/3D/xstudio/src/python_module/src/py_messages.cpp:8:
/usr/include/nlohmann/json.hpp:1731:10: note: candidate: ‘template<class ValueTypeCV, class ValueType> constexpr decltype (declval<const nlohmann::json_abi_v3_11_2::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType>::basic_json_t&>().get_impl<ValueType>(nlohmann::json_abi_v3_11_2::detail::priority_tag<4>{})) nlohmann::json_abi_v3_11_2::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType>::get() const [with ValueType = ValueTypeCV; ObjectType = std::map; ArrayType = std::vector; StringType = std::__cxx11::basic_string<char>; BooleanType = bool; NumberIntegerType = long int; NumberUnsignedType = long unsigned int; NumberFloatType = double; AllocatorType = std::allocator; JSONSerializer = nlohmann::json_abi_v3_11_2::adl_serializer; BinaryType = std::vector<unsigned char>]’
 1731 |     auto get() const noexcept(
      |          ^~~
/usr/include/nlohmann/json.hpp:1731:10: note:   template argument deduction/substitution failed:
/usr/include/nlohmann/json.hpp: In substitution of ‘template<class ValueTypeCV, class ValueType> constexpr decltype (std::declval<const nlohmann::json_abi_v3_11_2::basic_json<>&>().get_impl<ValueType>(nlohmann::json_abi_v3_11_2::detail::priority_tag<4>{})) nlohmann::json_abi_v3_11_2::basic_json<>::get() const [with ValueTypeCV = xstudio::utility::JsonStore; ValueType = xstudio::utility::JsonStore]’:
/home/adro/Applications/3D/xstudio/include/xstudio/shotgun_client/shotgun_client.hpp:185:52:   required from ‘xstudio::shotgun_client::Field<T>::Field(const xstudio::utility::JsonStore&) [with T = xstudio::utility::JsonStore]’
/home/adro/Applications/3D/xstudio/include/xstudio/shotgun_client/shotgun_client.hpp:1183:84:   required from here
/usr/include/nlohmann/json.hpp:1733:81: error: no matching function for call to ‘nlohmann::json_abi_v3_11_2::basic_json<>::get_impl<xstudio::utility::JsonStore>(nlohmann::json_abi_v3_11_2::detail::priority_tag<4>) const’
 1733 |     -> decltype(std::declval<const basic_json_t&>().template get_impl<ValueType>(detail::priority_tag<4> {}))
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/nlohmann/json.hpp:1593:15: note: candidate: ‘template<class ValueType, typename std::enable_if<(nlohmann::json_abi_v3_11_2::detail::is_default_constructible<T1>::value && nlohmann::json_abi_v3_11_2::detail::has_from_json<nlohmann::json_abi_v3_11_2::basic_json<>, ValueType, void>::value), int>::type <anonymous> > ValueType nlohmann::json_abi_v3_11_2::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType>::get_impl(nlohmann::json_abi_v3_11_2::detail::priority_tag<0>) const [with typename std::enable_if<(nlohmann::json_abi_v3_11_2::detail::is_default_constructible<ValueType>::value && nlohmann::json_abi_v3_11_2::detail::has_from_json<nlohmann::json_abi_v3_11_2::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType>, ValueType>::value), int>::type <anonymous> = ValueType; ObjectType = std::map; ArrayType = std::vector; StringType = std::__cxx11::basic_string<char>; BooleanType = bool; NumberIntegerType = long int; NumberUnsignedType = long unsigned int; NumberFloatType = double; AllocatorType = std::allocator; JSONSerializer = nlohmann::json_abi_v3_11_2::adl_serializer; BinaryType = std::vector<unsigned char>]’
 1593 |     ValueType get_impl(detail::priority_tag<0> /*unused*/) const noexcept(noexcept(
      |               ^~~~~~~~
/usr/include/nlohmann/json.hpp:1593:15: note:   template argument deduction/substitution failed:
/usr/include/nlohmann/json.hpp:1592:28: error: no type named ‘type’ in ‘struct std::enable_if<false, int>’
 1592 |                    int > = 0 >
      |                            ^
/usr/include/nlohmann/json.hpp:1635:15: note: candidate: ‘template<class ValueType, typename std::enable_if<nlohmann::json_abi_v3_11_2::detail::has_non_default_from_json<nlohmann::json_abi_v3_11_2::basic_json<>, ValueType, void>::value, int>::type <anonymous> > ValueType nlohmann::json_abi_v3_11_2::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType>::get_impl(nlohmann::json_abi_v3_11_2::detail::priority_tag<1>) const [with typename std::enable_if<nlohmann::json_abi_v3_11_2::detail::has_non_default_from_json<nlohmann::json_abi_v3_11_2::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType>, ValueType>::value, int>::type <anonymous> = ValueType; ObjectType = std::map; ArrayType = std::vector; StringType = std::__cxx11::basic_string<char>; BooleanType = bool; NumberIntegerType = long int; NumberUnsignedType = long unsigned int; NumberFloatType = double; AllocatorType = std::allocator; JSONSerializer = nlohmann::json_abi_v3_11_2::adl_serializer; BinaryType = std::vector<unsigned char>]’
 1635 |     ValueType get_impl(detail::priority_tag<1> /*unused*/) const noexcept(noexcept(
      |               ^~~~~~~~
/usr/include/nlohmann/json.hpp:1635:15: note:   template argument deduction/substitution failed:
/usr/include/nlohmann/json.hpp:1634:28: error: no type named ‘type’ in ‘struct std::enable_if<false, int>’
 1634 |                    int > = 0 >
      |                            ^
/usr/include/nlohmann/json.hpp:1660:19: note: candidate: ‘template<class BasicJsonType, typename std::enable_if<nlohmann::json_abi_v3_11_2::detail::is_basic_json<BasicJsonType>::value, int>::type <anonymous> > BasicJsonType nlohmann::json_abi_v3_11_2::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType>::get_impl(nlohmann::json_abi_v3_11_2::detail::priority_tag<2>) const [with typename std::enable_if<nlohmann::json_abi_v3_11_2::detail::is_basic_json<BasicJsonType>::value, int>::type <anonymous> = BasicJsonType; ObjectType = std::map; ArrayType = std::vector; StringType = std::__cxx11::basic_string<char>; BooleanType = bool; NumberIntegerType = long int; NumberUnsignedType = long unsigned int; NumberFloatType = double; AllocatorType = std::allocator; JSONSerializer = nlohmann::json_abi_v3_11_2::adl_serializer; BinaryType = std::vector<unsigned char>]’
 1660 |     BasicJsonType get_impl(detail::priority_tag<2> /*unused*/) const
      |                   ^~~~~~~~
/usr/include/nlohmann/json.hpp:1660:19: note:   template argument deduction/substitution failed:
/usr/include/nlohmann/json.hpp:1659:28: error: no type named ‘type’ in ‘struct std::enable_if<false, int>’
 1659 |                    int > = 0 >
      |                            ^
/usr/include/nlohmann/json.hpp:1683:16: note: candidate: ‘template<class BasicJsonType, typename std::enable_if<std::is_same<BasicJsonType, nlohmann::json_abi_v3_11_2::basic_json<> >::value, int>::type <anonymous> > nlohmann::json_abi_v3_11_2::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType> nlohmann::json_abi_v3_11_2::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType>::get_impl(nlohmann::json_abi_v3_11_2::detail::priority_tag<3>) const [with typename std::enable_if<std::is_same<BasicJsonType, nlohmann::json_abi_v3_11_2::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType> >::value, int>::type <anonymous> = BasicJsonType; ObjectType = std::map; ArrayType = std::vector; StringType = std::__cxx11::basic_string<char>; BooleanType = bool; NumberIntegerType = long int; NumberUnsignedType = long unsigned int; NumberFloatType = double; AllocatorType = std::allocator; JSONSerializer = nlohmann::json_abi_v3_11_2::adl_serializer; BinaryType = std::vector<unsigned char>]’
 1683 |     basic_json get_impl(detail::priority_tag<3> /*unused*/) const
      |                ^~~~~~~~
/usr/include/nlohmann/json.hpp:1683:16: note:   template argument deduction/substitution failed:
compilation terminated due to -fmax-errors=5.
make[2]: *** [src/python_module/src/CMakeFiles/__pybind_xstudio.dir/build.make:118: src/python_module/src/CMakeFiles/__pybind_xstudio.dir/py_messages.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:1699: src/python_module/src/CMakeFiles/__pybind_xstudio.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 90%] Linking CXX shared library ../../../../../bin/lib/libjson_store_qml.so
[ 91%] Built target json_store_qml
[ 91%] Linking CXX shared library ../../../../../bin/lib/libstudio_qml.so
[ 91%] Linking CXX shared library ../../../../../bin/lib/libcontact_sheet_qml.so
[ 92%] Linking CXX shared library ../../../../../bin/lib/liblog_qml.so
[ 92%] Built target studio_qml
[ 92%] Built target contact_sheet_qml
[ 93%] Built target log_qml
[ 93%] Linking CXX shared library ../../../../../bin/lib/libtag_qml.so
[ 93%] Linking CXX shared library ../../../../../bin/lib/libbookmark_qml.so
[ 94%] Built target tag_qml
[ 94%] Built target bookmark_qml
[ 94%] Linking CXX shared library ../../../../../bin/lib/libtimeline_qml.so
[ 94%] Built target timeline_qml
[ 94%] Linking CXX shared library ../../../../../bin/lib/libembedded_python_qml.so
[ 94%] Built target embedded_python_qml
[ 94%] Linking CXX shared library ../../../../../bin/lib/libglobal_store_qml.so
[ 94%] Built target global_store_qml
[ 94%] Linking CXX shared library ../../../../../bin/lib/libmodule_qml.so
[ 95%] Built target module_qml
[ 95%] Linking CXX shared library ../../../bin/lib/libglobal.so
[ 95%] Linking CXX shared library ../../../../../bin/lib/libsubset_qml.so
[ 96%] Built target subset_qml
[ 96%] Built target global
[ 96%] Linking CXX shared library ../../../../../bin/lib/libsession_qml.so
[ 96%] Built target session_qml
make: *** [Makefile:136: all] Error 2

Workaround:

  • Remove the include/xstudio/shotgun_client folder

wacom pen click does not work to select items in bins

It does not seem possible to click select an item in the media or playlists bin using a wacom stylus.ctrl+click and right click does work though and the stylus events seem to work as expected elsewhere in the GUI.
This is on Rocky 9.2

Installing on Linux Mint MATE

Hi,

I'm attempting to install on Mint MATE but I'm getting this error which also locks up my machine once it hits it:

image

I've installed correctly on Rocky Linux but was attempting on Mint but I can't seem to get this working. Any thoughts?

Thanks,
Mitchell

Windows support

Hi, I've seen that there is Windows support mentioned in the README as part of the roadmap. I'd just started working on it and would like to know which compiler is preferred, msvc or clang-cl?

Could be nice to have #xstudio or similar on ASWF's slack for real-time discussions and support.

P.S. While reading through CMake file, just noticed that xstudio hardcodes Intel's microachitecture which makes it impossible to compile on AMD if you don't remove -march=nehalem flag.

python api setup fails

When I launch xStudio I get these errors:

2023-07-25 20:08:57.743] [xstudio] [info] API enabled on 127.0.0.1:45500, session name default0
[2023-07-25 20:08:57.745] [xstudio] [warning] void xstudio::embedded_python::EmbeddedPython::setup() Failed to setup API : ModuleNotFoundError: No module named 'xstudio'

At:
  <string>(3): <module>
 
[2023-07-25 20:08:57.745] [xstudio] [warning] void xstudio::embedded_python::EmbeddedPython::setup() Failed to setup API : ModuleNotFoundError: No module named 'xstudio'

At:
  <string>(3): <module>
 
[2023-07-25 20:08:57.745] [xstudio] [warning] bool xstudio::embedded_python::EmbeddedPython::connect(int) Failed to init API : NameError: name 'Connection' is not defined

At:
  <string>(3): <module>
 
[2023-07-25 20:08:57.746] [xstudio] [warning] Connected failed false

WSL Ubuntu 22.04 possible build issues

I'm sure this is outside of the expected use, but... Under Windows using WSL Ubuntu 22.04 I have managed to compile xstudio following the Ubuntu 22.04 instructions.

It appeared to work fine, the application launches, I can define a range of exr's to load at launch.

However the main image view is completely white.

I can see and even scrub my exr files in the thumbnail of the media pool though, its just the main viewer that is completely blank.

Is this user error or simply a limitation of WSL?
Thanks.

I am seeing one error in the shell when running:

[xstudio] [error] shader error: Vertex shader error:
0:2(10): error: GLSL 4.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.40, 1.50, 3.30, 1.00 ES, 3.00 ES, and 3.10 ES

Change ffmpeg's --enable-nonfree switch

Using this switch prevents redistribution of binaries. While for Linux and big studios this is no big deal, if you want to build on Windows or Mac and distribute binaries ti is.

OpenTimelineIO Module Not Found and Qt5 Assertion Error

After some effort I've been able to squash most of my build problems, but I have two remaining issues with no leads and thought it was time for an issue report. The first one is that I have a system python3.6 and another python3.7 scoped to /usr/local to avoid dependency conflicts on my CentOS installation. OpenTimelineIO seems to load fine when the latter is used but the shared object file _opentime refuses to import unless I install the dependency to my python3.6 environment. It's essentially refusing to import (only) the shared objects but I have no clue why at the moment.

[info] xStudio logging started.
[...]
[info] API enabled on 127.0.0.1:45500, session name default0
[...]
[info] xStudio UI launched.
ASSERT: "last >= first" in file itemmodels/qabstactitemmodel.cpp, line 2760
Aborted

This second error is even more cryptic and seems to be scoped to the Qt5 codebase. I originally thought it was related to the python warning (that one was printing a lot of logs) but after installing OpenTimelineIO into the python3.6 environment it still persists. Any pointers on this one?

Deb Package

Hello!

I am currently setting this up to be installed as a deb package, that way it can be more easily installed for us on Ubuntu 22.04. I have opened up our work on this topic on our repository here: Juno Labs. I have packaged up all the required libraries into deb packages as well in this directory: Packages.

The build process does compile the libs in docker containers and then ship out the .deb files for us to use when we build our workstations (which are also containers).

With the back story out of the way...

I have managed to get xStudio to compile on a workstation and run perfectly fine when I built it from source and don't package it. Once I package it, it seems to have the preference directory hard coded into it's start up process.

#26 0.915 [2023-03-27 22:06:04.038] [xstudio] [info] XStudio logging started.
#26 0.915 [2023-03-27 22:06:04.038] [xstudio] [warning] Failed preference_load_defaults from path /juno/xstudio/build/bin/preference with error filesystem error: directory iterator cannot open directory: No such file or directory [/juno/xstudio/build/bin/preference].
#26 0.915 [2023-03-27 22:06:04.038] [xstudio] [error] Failed to load application preferences /juno/xstudio/build/bin/preference

As you can see, it is loading the preferences from the original build location /juno/xstudio/build/bin/preference.

When I build the .deb package, I am taking the build/bin folder and dropping it into /opt/xstudio. So the preference directory actually exists like this /opt/xstudio/preference after installed.

So I did some further debugging, and after running -h on xstudio after it is installed, it kicked back an option --pref. According to the information provided, it should allow me to pass in the following xstudio --pref /opt/xstudio/preference/ and it should work I would think. Instead, it seems to completely ignore it. I also tried xstudio --pref=/opt/xstudio/preference/ and even went crazy with it and added xstudio --pref=[/opt/xstudio/preference/]. Then finally, I sent out a yolo and wrapped it all in quotes xstudio --pref=["/opt/xstudio/preference/"]. I am quite comfortable in linux so I know that for the most part, the square brackets are just examples and shouldn't be included, but I figured I would try.

I did some further debugging, I can actually completely recreate the build directory on a fresh container, and symlink it to /opt/xstudio/preference and then xStudio will launch no problem.

/juno/xstudio/build/bin/preference -> /opt/xstudio/preference

Here are some links to the container I am building to do this. p.s. these are not the workstations, these are just the build containers used to output the .deb files. Our workstation containers are in private repos.

Launch command for testing
https://github.com/juno-fx/labs-packages/blob/continued/deb/xstudio/Dockerfile#L106

Build file
https://github.com/juno-fx/labs-packages/blob/continued/deb/xstudio/build.sh

Juno Dependencies
https://github.com/juno-fx/labs-packages/blob/continued/deb/xstudio/juno-deps.sh

Please forgive the relative mess that the files are in. I am still the the phase of getting everything working and it will be cleaned up before getting merged into main for Juno and even the world to use if they want 😃

Please let me know if I can provide any other information!

Flatpak package on flathub

It would be nice if you could publish this as a flatpak on flathub e.g.

Flatpaks are a new software distribution mechanism for Linux distros, can thus installed on any distro and are easy to update. They are easy to install and update and work on all Linux distros.
Also, if you publish it on FlatHub you may grow your user base given many distros include that and it is a common software source, so your app can be discovered more easily.

Here is how to get started.

No way to set remote API port

The python user docs here say that you should launch xstudio with the --port argument and then use XSTUDIO.connect_remote(host="127.0.0.1", port=<port-from-above>). However, --port only seems to set the port for a remote session and does not affect the port that the Remote API uses.

embedded python errors thrown on startup

On my build of xstudio on centos7, python3.6 I get these errors on launching the player;

[2023-02-28 17:43:48.325] [xstudio] [warning] void xstudio::embedded_python::EmbeddedPython::setup() Failed to setup API : ModuleNotFoundError: No module named 'xstudio'

At:
  <string>(3): <module>
 
[2023-02-28 17:43:48.325] [xstudio] [warning] void xstudio::embedded_python::EmbeddedPython::setup() Failed to setup API : ModuleNotFoundError: No module named 'xstudio'

At:
  <string>(3): <module>
 
[2023-02-28 17:43:48.326] [xstudio] [warning] bool xstudio::embedded_python::EmbeddedPython::connect(int) Failed to init API : NameError: name 'Connection' is not defined

At:
  <string>(3): <module>
 
[2023-02-28 17:43:48.327] [xstudio] [warning] Connected failed false

I am launching xstudio player like so (adapted from centos7 build instructions);

LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64
PYTHONPATH=/home/centos/xstudio/build/bin/python/lib/python3.6/site-packages:/usr/local/lib/python3.6/site-packages

cd /home/centos/xstudio/build
./bin/xstudio.bin "$@"

When I launch xstudio like this I get the errors from the embedded python xstudo cannot be imported, but when I used the exact same environment to launch python in an interactive console from bash, I am able to import the xstudio module without issue.

In addition, the python console inside xstudio (Panels > Python Console) throws the same errors and opens up the window for the console but does not render anything to it.

What could be the cause of this issue and what can I do to fix it?

API documentation doesn't build

I got a build running on centos7, however the API documentation accessed from Help > User Documentation takes me to a local docs file (file:///home/centos/xstudio/build/bin/docs/user_docs/index.html). From there I can read all the xSTUDIO User Guide documentation, but all API documentation shows a warning: doxygenfile: Unable to find project ‘xStudio’ in breathe_projects dictionary for every class/module.

Gamma slider?

Will there be any plans to introduce a Gamma slider like the Exposure you one currently have in the bottom bar?

Plugin build targets do not depend on GLEW include dirs when required

The OCIO color pipeline plugin and the media reader plugins all indirectly depend on the GLEW include directories (via include/xstudio/ui/opengl/shader_program_base.hpp). However, none of the plugin targets account for this, so they all fail to build if GLEW is not installed in the standard system locations.

Play .mov or still jpg image fault

Opening any media shows a punch of the following warning repeating all the time when and I see black image:
[2023-04-04 02:33:19.886] [xstudio] [warning] xstudio::media_reader::MediaDetailAndThumbnailReaderActor::process_get_media_detail_queue()::<lambda(std::vector<std::pair<xstudio::utility::Uuid, xstudio::media_reader::MRCertainty> >)> mutable Unsupported format.

[2023-04-04 02:31:38.144] [xstudio] [warning] xstudio::playhead::PlayheadActor::update_playback_rate()::<lambda(const caf::error&)> error("EditList::frame_rate_at_frame error: logical_frame out of range.")

Create issue templates

Some xStudio issues are lacking in the information needed to assess and assist the reporter. Information like distro, build configuration, and steps to reproduce are typically not provided by both novice and advanced users without prompting.

We should configure an issue template for the repository, guiding users through submitting a bug or feature request, and providing the information required on the first go around.

Add to load path for C++ plugins

Currently the only way to add to the C++ plugin search path is through the Python API. Would be useful to have an environment variable to control this, to not have to install the plugin into XSTUDIO_ROOT.

How to set a default "source colour space"

I noticed the default value for "source colour space" is ACES2065, but I would like to default it to ACEScg. I couldn't find support for this within the OCIO env vars as I would for OCIO_ACTIVE_DISPLAYS, OCIO_ACTIVE_VIEWS etc.

Currently have to toggle this setting for each media imported

Improve playback performance

Playback perfornance on my 4 year-old PC is not as fast as tlRender on 4K movies. I tried it with Netflix's sample called SolLevante and it started slow and then literally froze.

Windows build problem

Howdy all, I made it fairly far trying to build xStudio on Windows 10, but media_reader_ffmpeg throws about 1000 errors in Visual Studio. Stuff like:

namespace "xstudio::utility" has no member "sys_time_point"

I installed ffmpeg using vcpkg and pointed FFMPEG_ROOT to C:\source\vcpkg\installed\x86-windows.

Any suggestions how to fix this? Thanks!

various compile hiccups

I managed to compile successfully but ran into the following issues:

  • www.nasm.us is offline so I could not download nasm-2.15.05.tar.bz2 elsewhere
  • ffprobe_lib.cpp:105:35: error: ‘av_mallocz_array’ was not declared in this scope; did you mean ‘av_malloc_array’?
    to fix I renamed the av_mallocz_array to av_malloc_array
  • ffmpeg_stream.cpp:573:42: error: ‘AV_CODEC_FLAG2_DROP_FRAME_TIMECODE’ was not declared in this scope
    to fix I declared it with value 1 (not sure if that is the correct thing to do though)

I'm no coder but after the above I could compile and open xStudio ok.

CMake Version and OpenEXR_ROOT Incompatibility

The current CMake minimum version is set to 3.3. This causes CMake to use the OLD behavior for CMP0074. This prevents usage of variables such as 'OpenEXR_ROOT' to find OpenEXR < 3.0.

The simplest fix would be to update the minimum version to 3.12 to allow *_ROOT variables. FindOpenEXR.cmake could also be refactored to utilize a differently named variable (such as OpenEXR_ROOT_DIR, similar to FindCAF.cmake).

How to use ShotGun?

Hi, I've compiled the xstudio in RockyLinux including the Shotgun plugin.
But I really don't know how to use it - there is no error message, but I don't see any Shotgun related interface.
Is there any option to enable it?

Unable to complete the install

The error is:

make[1]: *** [CMakeFiles/Makefile2:4814: src/utility/src/CMakeFiles/utility_static.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs.... make[1]: *** [CMakeFiles/Makefile2:4787: src/utility/src/CMakeFiles/utility.dir/all] Error 2 make: *** [Makefile:136: all] Error 2

We followed the instructions mentioned in the GitHub repo.

Improve the build system with cmake's ExrternalProject_Add

Currently, the build instructions rely on packagest from the Linux distribution, which is fine. However, the other libraries xStudio depends on (OpenEXR, etc) are to be built manually and installed in /usr/local. This is a terrible practice as it will lead to all sort of library misshaps as soon as there are library updates.
cmake provides an instruction called ExternalProject_Add() to download, build and (locally) install the libraries as part of the cmake project.
Please make use of that.

python api sometimes throws (timeout?) errors

While manipulating api objects we're occasionally seeing errors like this;

Traceback (most recent call last):
  File "/usr/lib64/python3.6/code.py", line 91, in runcode
    exec(code, self.locals)
  File "<input>", line 1, in <module>
  File "/home/centos/xstudio/build/bin/python/lib/python3.6/site-packages/xstudio/api/session/playlist/playlist.py", line 134, in media
    result = self.connection.request_receive(self.remote, get_media_atom())[0]
  File "/home/centos/xstudio/build/bin/python/lib/python3.6/site-packages/xstudio/connection/__init__.py", line 385, in request_receive
    return self.request_receive_timeout(self.default_timeout_ms, *args)
  File "/home/centos/xstudio/build/bin/python/lib/python3.6/site-packages/xstudio/connection/__init__.py", line 390, in request_receive_timeout
    return self.response(req_id, timeout_milli)
  File "/home/centos/xstudio/build/bin/python/lib/python3.6/site-packages/xstudio/connection/__init__.py", line 403, in response
    self._dequeue_messages(timeout_milli, req_id)
  File "/home/centos/xstudio/build/bin/python/lib/python3.6/site-packages/xstudio/connection/__init__.py", line 497, in _dequeue_messages
    absolute_receive_timeout(timeout_milli)
TypeError: __init__(): incompatible constructor arguments. The following argument types are supported:
    1. xstudio.core.__pybind_xstudio.absolute_receive_timeout()
    2. xstudio.core.__pybind_xstudio.absolute_receive_timeout(arg0: int)
Invoked with: 99999.85380699945

What does this error mean and how to avoid / fix it? The error above was thrown when trying to run this python api call;
[m.uuid for m in playlist.media], which had worked previously, but later cannot be run even though nothing else has changed since calling it the first time. The only solution I have is to close the entire python session down and start again, which is obviously not ideal.

This is on centos7 with python3.6

embedded_python error on windows build at startup

When I run xstudio.exe I come against this error on the prompt window.

[2024-01-16 09:55:30.174] [xstudio] [warning] void __cdecl xstudio::embedded_python::EmbeddedPython::setup(void) Failed to setup API : ModuleNotFoundError: No module named 'xstudio'

At:
  <string>(3): <module>

[2024-01-16 09:55:30.176] [xstudio] [warning] void __cdecl xstudio::embedded_python::EmbeddedPython::setup(void) Failed to setup API : ModuleNotFoundError: No module named 'xstudio'

At:
  <string>(3): <module>

[2024-01-16 09:55:30.176] [xstudio] [warning] bool __cdecl xstudio::embedded_python::EmbeddedPython::connect(const int) Failed to init API : NameError: name 'Connection' is not defined

At:
  <string>(3): <module>

[2024-01-16 09:55:30.176] [xstudio] [warning] Connected failed false
[2024-01-16 09:55:32.421] [xstudio] [warning] void __cdecl xstudio::ui::viewport::Viewport::get_colour_pipeline(void) error("create_colour_pipeline failed, invalid colour pipeline name.")
[2024-01-16 09:55:32.454] [xstudio] [warning] void __cdecl xstudio::ui::viewport::Viewport::get_colour_pipeline(void) error("create_colour_pipeline failed, invalid colour pipeline name.")
[2024-01-16 09:55:35.505] [xstudio] [info] XStudio UI launched.

Help->Hotkeys is broken

gio: file:///home/gga/code/applications/xstudio/build/bin/docs/user_docs/getting_started/hotkeys.html: Error al obtener la información del archivo «/home/gga/code/applications/xstudio/build/bin/docs/user_docs/getting_started/hotkeys.html»: No existe el archivo o el directorio

docs don't seem to build

xStudio does not seem to build the docs. When I try to open them via the help menu I get:
gio: file:///mnt/home/frank_rocky/Documents/xStudio/xstudio/build/bin/docs/user_docs/index.html: Error when getting information for file “/mnt/home/frank_rocky/Documents/xStudio/xstudio/build/bin/docs/user_docs/index.html”: No such file or directory

Tags and/or GitHub Releases in the future?

Hi

Are you planning to push tags and/or make Github releases of the code? It helps a lot to see what is considered a new version and to gauge how big or important it is without having to look in the commits.

API enabled on 127.0.0.1:45500, session name default0 Error: signal 11? How to fix it ?

[100%] Built target xstudio
[2023-01-30 18:29:17.276] [xstudio] [info] XStudio logging started.
[2023-01-30 18:29:17.587] [xstudio] [warning] Failed to read preference override Invalid override path /home/dev_ml/.config/DNEG/xstudio/preferences/new_session.json /home/dev_ml/.config/DNEG/xstudio/preferences/new_session.json
[2023-01-30 18:29:17.587] [xstudio] [warning] Failed to read preference override Invalid override path /home/dev_ml/.config/DNEG/xstudio/preferences/application.json /home/dev_ml/.config/DNEG/xstudio/preferences/application.json
[2023-01-30 18:29:17.587] [xstudio] [warning] Failed to read preference override Invalid override path /home/dev_ml/.config/DNEG/xstudio/preferences/qml_ui.json /home/dev_ml/.config/DNEG/xstudio/preferences/qml_ui.json
[2023-01-30 18:29:18.340] [xstudio] [info] API enabled on 127.0.0.1:45500, session name default0
Error: signal 11:
./bin/xstudio.bin(_Z7handleri+0x2f)[0x5623a5178784]
/lib/x86_64-linux-gnu/libc.so.6(+0x42520)[0x7f72784ab520]
/home/dev_ml/anaconda3/lib/libQt5Qml.so.5(+0x1fd3ff)[0x7f727a0113ff]
/home/dev_ml/anaconda3/lib/libQt5Qml.so.5(+0x1fd76e)[0x7f727a01176e]
/home/dev_ml/anaconda3/lib/libQt5Qml.so.5(+0x1fb941)[0x7f727a00f941]
/home/dev_ml/anaconda3/lib/libQt5Qml.so.5(+0x1fbd5f)[0x7f727a00fd5f]
/home/dev_ml/anaconda3/lib/libQt5Qml.so.5(+0x1fc040)[0x7f727a010040]
/home/dev_ml/anaconda3/lib/libQt5Qml.so.5(+0x197607)[0x7f7279fab607]
/home/dev_ml/anaconda3/lib/libQt5Qml.so.5(+0x19b428)[0x7f7279faf428]
/home/dev_ml/anaconda3/lib/libQt5Qml.so.5(_ZN12QQmlDataBlob7tryDoneEv+0x37)[0x7f7279fa507b]

Colour Correction Tools - Masking & Layering

This is in progress but likely won't be in next release

Goal is to complete the layering and masking features

  1. Design the final integration of layers with xStudio bookmarking system.

Potential simplification over the initial prototype is to limit each Colour Correction (grading bookmark) to a single layer, duration is controlled per bookmark and initially span the whole clip, unless a mask is painted in which case it narrows down to the current frame.

The UI will include the full list of created bookmark for the current clip to allow user easy browsing, duration can also be adjusted from there. To the end user, the layer concept (and bookmark) can then be ignored and only think in terms of Colour correction (each having a specific time span, CDL parameters and optional masking). Noting this design probably don't prevent us to add per Colour Correction layers if needed in the future.

  1. UI/UX

The left side of the panel (previously only masking) now shows the list of Colour Correction for the current clip with ability to adjust the duration and single click access to the mask drawing tool for each item in the list. The masking tool are shown on top of the list (in place of) and a single click option is available to go back to the list. Single click option to enable / disable Colour Correction from the list.

invalid path in OCIO env var causes UI to break

While testing some setup I put the wrong path into my OCIO environment variables, and on launching xstudio got these errors:

[2023-03-01 17:31:59.825] [xstudio] [warning] virtual void xstudio::ui::qml::ModuleAttrsToQMLShim::init(caf::actor_system&) caf::sec::invalid_argument
[2023-03-01 17:31:59.855] [xstudio] [warning] virtual void xstudio::ui::qml::ModuleAttrsToQMLShim::init(caf::actor_system&) caf::sec::invalid_argument
[2023-03-01 17:31:59.856] [xstudio] [warning] virtual void xstudio::ui::qml::ModuleAttrsToQMLShim::init(caf::actor_system&) caf::sec::invalid_argument
[2023-03-01 17:31:59.859] [xstudio] [warning] virtual void xstudio::ui::qml::ModuleAttrsToQMLShim::init(caf::actor_system&) caf::sec::invalid_argument
*** unexpected message [id: 533, name: user.scheduled-actor]: message(xstudio::broadcast::broadcast_down_atom(), 191@EA6CE6C334CF53DE51E455BBB0EBCFE5B5D3897D#30902)
[2023-03-01 17:31:59.971] [xstudio] [warning] virtual void xstudio::ui::qml::ModuleAttrsToQMLShim::init(caf::actor_system&) caf::sec::invalid_argument
*** unhandled exception: [id: 255, name: PlayheadActor, exception typeid: std.runtime_error]: GlobalStore is not registered
*** unhandled exception: [id: 430, name: user.scheduled-actor, exception typeid: std.runtime_error]: GlobalStore is not registered
[2023-03-01 17:32:07.615] [xstudio] [warning] caf::mixin::actor_object<Base, EventId>::init(caf::actor_system&) [with Base = QObject; int EventId = 32337]::<lambda()>
*** unhandled exception: [id: 440, name: user.scheduled-actor, exception typeid: std.runtime_error]: GlobalStore is not registered
*** unhandled exception: [id: 447, name: user.scheduled-actor, exception typeid: std.runtime_error]: GlobalStore is not registered
*** unhandled exception: [id: 461, name: user.scheduled-actor, exception typeid: std.runtime_error]: GlobalStore is not registered
[2023-03-01 17:32:08.479] [xstudio] [warning] caf::mixin::actor_object<Base, EventId>::init(caf::actor_system&) [with Base = QObject; int EventId = 32337]::<lambda()>
*** unhandled exception: [id: 472, name: user.scheduled-actor, exception typeid: std.runtime_error]: GlobalStore is not registered
*** unhandled exception: [id: 478, name: user.scheduled-actor, exception typeid: std.runtime_error]: GlobalStore is not registered
[2023-03-01 17:32:34.075] [xstudio] [warning] Failed to save prefs caf::sec::invalid_argument
[2023-03-01 17:32:34.075] [xstudio] [warning] Failed to save prefs caf::sec::invalid_argument
[2023-03-01 17:32:34.075] [xstudio] [warning] Failed to save prefs caf::sec::invalid_argument

The UI then failed to load any of the dropdown menus.

This is fixed by having a valid ocio config in the OCIO variable, but it would be a much better user experience if it simply warned 'the OCIO variable is invalid' rather than breaking the entire application.

`Imath` dependency missing from various component target builds

When attempting to build xstudio from the v0.11.2 tag on CentOS 7, it appears there are some broken CMake recipes related to the lack of Imath inclusion.

CMake Command:

cmake \
        -D CMAKE_INSTALL_PREFIX=/path/to/install_prefix \
        -D CMAKE_EXE_LINKER_FLAGS=-Wl,--enable-new-dtags \
        -D CMAKE_SHARED_LINKER_FLAGS=-Wl,--enable-new-dtags \
        -D CMAKE_CXX_EXTENSIONS=OFF \
        -D CMAKE_CXX_FLAGS="-D_GLIBCXX_USE_CXX11_ABI=0" \
        -D CMAKE_INSTALL_RPATH_USE_LINK_PATH=ON \
        -D Python_ROOT_DIR=/path/to/python_root \  # This doesn't work right, but I will open a separate issue for it
        -D Qt5_DIR=/path/to/qt5_root \
        -D BUILD_DOCS=OFF \
        /path/to/source_dir

The Imath install is being located at build time by its bundled ImathConfig.cmake, which is discovered from the CMAKE_PREFIX_PATH environment variable.

The first error encountered is this:

[  5%] Building CXX object src/utility/src/CMakeFiles/utility_static.dir/container.cpp.o
cd /lumalocal/bonus/dev/rez-build/xstudio/dev/build/platform-linux/gcc-9.3.1/python-3.9/src/utility/src && /opt/rh/devtoolset-9/root/usr/bin/g++ -DBINARY_DIR=\"/lumalocal/bonus/dev/rez-build/xstudio/dev/build/platform-linux/gcc-9.3.1/python-3.9/bin\" -DFMT_LOCALE -DFMT_SHARED -DPROJECT_VERSION=\"0.1.0\" -DROOT_DIR=\"/lumalocal/bonus/dev/rez-build/xstudio/dev/src\" -DSPDLOG_COMPILED_LIB -DSPDLOG_SHARED_LIB -DTEST_RESOURCE=\"/lumalocal/bonus/dev/rez-build/xstudio/dev/src/test_resource\" -DXSTUDIO_GLOBAL_NAME=\"xStudio\" -DXSTUDIO_GLOBAL_VERSION=\"0.11.2\" -D__linux__ -Dtest_private=private -I/lumalocal/bonus/dev/rez-build/xstudio/dev/build/platform-linux/gcc-9.3.1/python-3.9/src/utility/src -I/lumalocal/bonus/dev/rez-build/xstudio/dev/src/src/utility/src -I/lumalocal/bonus/dev/rez-build/xstudio/dev/src/include -I/lumalocal/bonus/dev/rez-build/xstudio/dev/src/src/utility/src/src -I/lumalocal/bonus/dev/rez-build/xstudio/dev/src/src/utility/src/SYSTEM -I/lumalocal/bonus/dev/rez-build/xstudio/dev/src/extern/include -I/lumalocal/bonus/dev/rez-build/xstudio/dev/src/extern/reproc/reproc++/include -isystem /luma/dev/ruschn/rez-release/actor_framework/0.18.4/platform-linux/gcc-9.3.1/include -isystem /luma/dev/ruschn/rez-release/fmt/8.0.1/platform-linux/gcc-9.3.1/include -isystem /luma/dev/ruschn/rez-release/nlohmann_json/3.11.2/platform-linux/include -isystem /luma/dev/ruschn/rez-release/spdlog/1.9.2/platform-linux/gcc-9.3.1/include -D_GLIBCXX_USE_CXX11_ABI=0 -fpic -fmax-errors=5 -fdiagnostics-color=always -O3 -DNDEBUG -fdiagnostics-color=always -pthread -std=c++17 -MD -MT src/utility/src/CMakeFiles/utility_static.dir/container.cpp.o -MF CMakeFiles/utility_static.dir/container.cpp.o.d -o CMakeFiles/utility_static.dir/container.cpp.o -c /lumalocal/bonus/dev/rez-build/xstudio/dev/src/src/utility/src/container.cpp
In file included from /lumalocal/bonus/dev/rez-build/xstudio/dev/src/include/xstudio/utility/uuid.hpp:19,
                 from /lumalocal/bonus/dev/rez-build/xstudio/dev/src/include/xstudio/atoms.hpp:18,
                 from /lumalocal/bonus/dev/rez-build/xstudio/dev/src/include/xstudio/utility/container.hpp:18,
                 from /lumalocal/bonus/dev/rez-build/xstudio/dev/src/src/utility/src/container.cpp:5:
/lumalocal/bonus/dev/rez-build/xstudio/dev/src/include/xstudio/utility/json_store.hpp:14:10: fatal error: Imath/ImathBox.h: No such file or directory
   14 | #include <Imath/ImathBox.h>
      |          ^~~~~~~~~~~~~~~~~~
compilation terminated.

This same issue affects quite a few of the component object builds:

  • broadcast
  • global_store
  • json_store
  • ui
  • utility

In general, the fact that find_package calls are localized and repeated within each dependent object's build definition, instead of performed once at the top level of the project, makes resolving these issues much more repetitive and error-prone than it needs to be.

Also, components that are dependencies of other components should include things like the Imath include directories/libraries in their public include directories/link libraries, so that builds of dependent targets will pull them in automatically.

I'm currently hacking my way through these to get the project to build, but it seems like a re-work of the dependency discovery/resolution might be in order.

Versions

  • CentOS 7.9.2009
  • GCC 9.3.1 (installed via devtoolset-9 RPM)
  • CMake 3.25.1
  • Imath 3.1.9
  • Python 3.9.13

render_annotations_atom, publishing annotations

In Cinesite, we are currently exploring basic functionality of XSTUDIO and how much of it fits with our workflow/pipeline. One of the basic requirements we started out with was publishing annotations.

However, we're coming up with an issue that it difficult to work around.

Our workflow is simply that we pull images from the project server (FTrack), annotate the images, and export the images (from the review application) in a way that allows us to identify the asset version it originally came from. Once we get the entity id, we publish the notes+drawings against the asset version.

Getting Bookmark data is very easy, but associating it with an annotated image is difficult.

The closest functionality in XS is in render_annotations_atom , but according to the comments in the code, it was intended for debugging. render_annotations_atom dumps all annotated images as a single series, not identify the original image, and so it's not possible for us to send these notes back to the server.

Are there any plans of expanding the viewport render toolset that addresses these sort of issues?

(I planned on making an adhoc fix to render_annotations_atom to insert media reference source file path to solve this issue to allow us to continue testing XS in other areas.)

Thanks for reading.

Unknown CMake command add_src_and_test

Hello all,

During the Cmake configuration, I have the following error telling me :

CMake Error at CMakeLists.txt:18 (add_src_and_test):
Unknown CMake command "add_src_and_test".

The Configuring is still incomplete and I don't know what to do.

Cannot link against static FFMPEG libraries on Linux

There are a couple of current blockers to building xStudio against static FFMPEG libraries on Linux:

  1. The shared libraries that link against ffmpeg need to include -Wl,-Bsymbolic in the link flags, as documented here: https://ffmpeg.org/platform.html#Advanced-linking-configuration
    • I think it would be safe to include this unconditionally (i.e. regardless of whether the ffmpeg dependencies are static or shared libs).
  2. The included FindFFMPEG CMake module does not discover and include transitive dependencies in the link flags for libraries that depend on ffmpeg.
    • Static ffmpeg libs do not include the symbols for other codec-/format-specific dependencies, so linking against them requires the ffmpeg dependencies to be pulled into the link command as well. I've got a proof-of-concept of this stubbed out using pkg-config in the FindFFMPEG module, which I'll try to get up as a PR soon.

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.