0

Allow explicit loading of non-contiguous sequences

On many occasions, for various editorial and sanity reasons, we need to load non-contiguous image sequences in RV:

my_sequence.0000.dpx
my_sequence.1001.dpx
my_sequence.1002.dpx
...

Obviously, loading this sequence in RV results in a timeline consisting primarily of nonexistent images, with the useful portion of the "sequence" packed on the end. Currently, I use a missing-frame handler to skip over these gaps during playback, but the timeline is still pretty useless.

It would be great if there were a way to explicitly load a non-contiguous sequence in such a way that the missing chunks were factored into the reading of the files from disk, interface updates, etc.

27 comments

  • Avatar
    Jon Morley Official comment

    Hi,

    The ability to collapse missing frames has been added as an optional package in RV 6.2.8. Please give it a shot if you are still looking for this kind of functionality.

    Thanks,
    Jon

  • 0
    Avatar
    Jacob Medendorp

    We need this too!

    Has there been any progress on this?

  • 0
    Avatar
    Alan Trombla

     

     

    Hi Jacob,

    No sorry, this is a very low-level change to the way RV handles sequences, and we haven't figured out a good way to make it possible yet.

    Please note that from the command line, this will load only existing images.  They'll be loaded as separate sources:

    rv -noSequence foo.*.dpx

    Hope that helps,

    Alan

  • 0
    Avatar
    Jim Polk

    Hi Alan,

    Using 4.0.9 and EXRs, this isn't working for us,...the files load, but the behaviour is still "Hold"...

    Is there some kind of mode or other flag we should use?  Any packages need to be loaded or unloaded ?

    If we could get this to work, it would solve a huge problem for us,..

    Thank you,

    Jim

     

  • 0
    Avatar
    Alan Trombla

    Hmm, what platform are you running on ?  Can you please give me the exact command line you used ?

    Thanks,

    Alan

  • 0
    Avatar
    Jim Polk

    Sure,..Apologies, I should have included that,...

    We're on Win7-64....I'm calling RV over our network like so:

        Y:\it\software\networkexe\Tweak\RV\4.0.9\bin\rv.exe -noSequence AA.####.exr

    I just have about a dozen or so EXRs,...numbered as so:

        AA.0420.exr  thru  AA.0425.exr

             then our break for missing frames, then

        AA.0435.exr  thru  AA.0440.exr

     

    Thank you,

     

  • 0
    Avatar
    Jacob Medendorp

    I had the same problem. 

  • 0
    Avatar
    Alan Trombla

    Hi guys,

    Please note the "*" (asterix) in my example command line.  "####" or any other "sequence specifier" won't work.  The -noSequence command line flag basically stops RV from trying to assemble a sequence from a collection of names on the command line.   There is no way (without writing some code), to "unpack" a name that already represents a valid sequence (like " AA.####.exr"), the files have to be provided to RV separately on the command line for this to work.

    Hope that clarifies,

    Alan

  • 0
    Avatar
    Jim Polk

    Hey Alan,

    Yes, I did notice that, and did try it that way.  Unfortunately, I get an error in the RV Console window

           "Error: No files in this sequence AA.*.exr (0)"

    Even though the files *are* there, just as before..

    Thank you,

     

  • 0
    Avatar
    Alan Trombla

    Hi Jim,

    Sorry, I think I'm not being completely clear.  In order for the -noSequence thing to work, the file names have to be provided separately on the command line.  Unfortunately, I'm not familiar enough with the windows shell, but it looks like it's just passing AA.*.exr as-is to rv.exe instead of expanding the wild card.  If you can figure out some way to make the shell expand the wildcard, or otherwise get a list of separate files for RV, that's what we want.  Also, if there is only that AA sequence alone in a directory, you could pass the dir name to RV instead (with -noSequence).

    Hope that helps,

    Alan

  • 0
    Avatar
    Jim Polk

    Hi Alan,

    Hmm,..well...Along the lines of your last two sentences,...I also tried both of the following,..

    Example 1:

    Y:\it\software\networkexe\Tweak\RV\4.0.9\bin\rv.exe -noSequence AA.0420.exr AA.0421.exr AA.0422.exr AA.0423.exr AA.0424.exr AA.0425.exr AA.0435.exr AA.0436.exr AA.0437.exr AA.0438.exr AA.0439.exr AA.0440.exr

    and

    Example 2:

    Y:\it\software\networkexe\Tweak\RV\4.0.9\bin\rv.exe -noSequence ./temp

    (where the EXR's are in "temp",etc)

     

    Both ways yield the same results,...RV is opened, image files are loaded...unfortunately two things happen...

    First, again using both syntax's, I get 12 sequences each of 20 frames length,...

    and second,  the "missing frames" are again in a "Hold" behaviour.

     

    Sorry, it just appears that the "-noSequence" flag just isn't working correctly for us...

    Thank you for your time and patience,

    Jim

     

  • 0
    Avatar
    Alan Trombla

    Hah, I think RV is out-smarting us (or we're out-smarting ourselves ;-) ).  Do you perhaps have the "Sequence From File" package turned on ?  If so then I think -noSequence is working fine (making 12 single-frame sources), but then the sequence-from-file code wakes up and turns each one of those into a full sequence.

    Try this:

    Y:\it\software\networkexe\Tweak\RV\4.0.9\bin\rv.exe -flags ModeManagerReject=sequence_from_file -noSequence ./temp

    Alan

  • 0
    Avatar
    Jim Polk

    Yes, I do have that package loaded....I had asked about that earlier, if a package needed loading or unloading,..but no worries..I'll try unloading that...

    and your the new command line..

    Thanks!!

     

  • 0
    Avatar
    Jim Polk

    Sooo close!....that last command does what we want...but the frames are out of numerical order...

  • 0
    Avatar
    Alan Trombla

    Arg!  Unfortunately that's just what we're getting from the directory traversal.  I think the only option is to explicitly list the files on the command line (as in your "Example 1"); does that work ?  Not fun to type, but maybe this is a scripting situation ?

    Anyway, whether that works or not, we'll try to bump up the priority of a "don't render missing frames at all" option of some kind.

    Cheers,

    Alan

  • 0
    Avatar
    Jim Polk

    Hey again Alan,...

    Looking at "missing_frame_bling_mode.mu", I see a function named "renderNothing",...while it's companion functions show up

    on the View menu, the "renderNothing" function does not,...would enabling/calling that function do the trick you think?

    Thanks,

    Jim

     

  • 0
    Avatar
    Alan Trombla

    Hi Jim,

    No, sorry, if you look carefully in that code you'll see that the renderNothing() function corresponds to the "hold" menu item.  That's because all this mode is doing is rendering something "on top" of what RV's core is rendering and RV's default behavior is to render a previous (in the sequence) existing file for files that don't exist.

    Cheers,

    Alan

  • 0
    Avatar
    Jim Polk

    Hi Alan,

    ...ahh, I see....before I go too far down this trail,...is it possible for a customer/developer like myself to use either Python or Mu to create an RV package

    that would achieve our goal?

    Thanks,

    Jim

     

  • 0
    Avatar
    Alan Trombla

    Well, I think the "real" solution (getting RV to "remap" the frames of a sequence of files so that only the existing files appear in the sequence) is not accessible to scripting code (or even C++ plugin code).  It's very deep in the core of RV (which is why we haven't provided a solution yet).

    On the other hand the workaround we were trying to achieve above (with the -noSequence flag) would be fairly trivial to implement as a Package.

    If you want to try that the steps would be something like:

    1. On request from the user (menu item or whatever), get the value of the #RVFileSource.media.movie property from the current source, suppose it's something like "foo.1-300#.jpg".
    2. Call existingFilesInSequence() to get the list of files in the "foo" sequence that actually exist (I'm not sure in what order you'll get this back on windows, but you might need to sort the list at this point).
    3. (Call addSourceVerbose() for each existing file to make each one a separate source.
    4. ((probably) delete the original source.

    Note that you'd have to turn off or otherwise disable the "Sequence From File" functionality to make this work, otherwise it will still blow up each of those files into the whole sequence.

    Hope that helps,

    Alan

  • 0
    Avatar
    Nathan Rusch

    Somewhat tangential to this discussion, I've often wished for some kind of frame mapping capability on the RVFileSource node itself. I know the RVSequence node has some EDL control possibilities, but if you need to remap the frames for a single source (which is basically the goal of my original request), you end up creating all kinds of otherwise useless top-level nodes in the session just to get things to play as expected.

    It would be really cool if the RVFileSource (and I guess RVImageSource) nodes had properties on them that could be used to define input-output frame mappings for this sort of precise retiming.

  • 0
    Avatar
    Jim Polk

    Hey Alan,...apologies, got pulled away for a while, now back at this...

     

    Maybe I'm not finding/selected the "source"...but in trying to find a handle to the frame nodes,..i did something like:

     

        types = commands.nodeTypes()

        for type in types:

            nodes = commands.nodesOfType( type )

            print type, ": ", nodes

     

    and RVFileSource (as well as RVImageSource) are empty lists,...I even went further (thinking it might be in one of those "Default" entities)

    and tried a

         for node in nodes:

               seqFiles = commands.existingFilesInSequence( node )

     

    but all nada,..all empty lists,..what am I doing wrong here?

    Thank you,

    Jim

     

    Have attached my *very* simplistic code example..

  • 0
    Avatar
    Alan Trombla

    Hi Jim,

    Hmm, not sure what could be going wrong there; nodesOfType("RVFilesSource") should only return nothing in the case where there are in fact no Sources loaded.

    I just tested the whole procedure, and it seemed to work as expected.  Here's that code:


    sources = rv.commands.nodesOfType("RVFileSource")
    for s in sources :
    media = rv.commands.getStringProperty(s + ".media.movie")[0]
    files = rv.commands.existingFilesInSequence(media)
    for f in files :
    rv.commands.addSource(f)
    rv.commands.deleteNode(rv.commands.nodeGroup(s))

    This was in RV 4.0.10 on the mac.  Can you tell me what version you're using on what platform ?

    EDIT: oh, sorry.  Looking at your code more carefully, I see you're calling nodesOfType in the init() function of the mode.  If the mode is loaded automatically, this means your code will run before any sources are loaded.  You need to call it in response to user input (hotkey or menu item) or other event, so that it can operate on sources after they are loaded.

    Cheers,

    Alan

  • 0
    Avatar
    Jim Polk

    Doh!...I shoulda' thought of that!....

    Now, works like a charm! :-) 

    Thank you very much, Alan

    Cheers,

     

  • 0
    Avatar
    Jim Polk

    Hey Alan,...have one more question along this tangent ;-)

     

    Currently, I'm using command line syntax to reject "sequence_from_file" and load our custom "NoGaps" plugin,

    whose mode is triggered when user hits "Alt + 1".   The artists love it, but are asking it this mode could toggled off...;-)

    Thinking abstractly,...Let's say I define "Alt + 2" to...

    1)  deleteMode()  for NoGaps,..Is there such a command as 'deleteMode()' or does a change of current mode achieved by just creating a new mode?

         (Btw,..are these modes "stacked"?....can I push a mode, pop one off the stack? etc..)

    2) Unload NoGaps

    3) Load Sequence_From_File

     

    Before I start digging,..is something like this even possible ?

    Thanks!

    Jim

     

  • 0
    Avatar
    Jim Polk

    Hi Alan,

    I believe you may have said that a  "don't render missing frames at all" option would be in the next release...

    When do you predict the next new release would be released?

    Thank you,

    Jim

     

     

    >> Anyway, whether that works or not, we'll try to bump up the priority of a "don't render missing frames at all" option of some kind

  • 0
    Avatar
    Alan Trombla

    Hi Jim,

    No, sorry, "bump up the priority" definitely does not mean "will be in the next release".  A lot depends on how hard it turns out to be.  The only reason we didn't add something like this the first time it came up, is that its not easy.  It's not scheduled at the moment, but if I can nail it down enough to get it on the schedule, I'll let you know.

    To answer your general question, we're releasing 4.0.11 today, and the next release will probably be out in 1-2 months.

    Sorry I forgot to respond to your earlier question about modes.

    Generally: 

    • RV has any number of Modes active simultaneously.
    • In addition to being loaded, a mode can be "active" or "inactive" (inactive modes do not receive any events).
    • The active/inactive state of a mode can be controlled by another mode.  This might be a little tricky from Python (since the ModeManager is written in Mu).

    If the "Alt-1" action is to do the work of "blowing up" the source into a lot of one-frame-sources, as we discussed above, then I think you just want to deactivate the sequence_from_frame mode during that action.

    If you want to open a support ticket and send me your code, I can probably offer pointers.

    Cheers,

    Alan

  • 0
    Avatar
    Sally Slade

    Hi Alan!

    Thank you for all the information you've provided on this topic. I was able to implement a Python package using the "one source per frame" paradigm for non-contiguous sequence playback based on your advice.

    I see it's been a few months, and RV 4.0.13 is in Beta: is "one source per frame" still the best approach?

    Thank you for your help!

Please sign in to leave a comment.