0

Open RV to a specific frame in a image sequence.

In our render management software we would like to be able to open the rendered image sequence in rv and set the current frame to a specific frame.

So far I haven't found anything in the docs. -in wont work because the artists want playback to cover the full image sequence but look at the specific frame they selected in our render management software when we launch rv.

It looks like the .rv file stores a currentFrame, but even when I in the session, but when I open that .rv file the playhead ends up on the first frame.

4 comments

  • Avatar
    Jon Morley Official comment

    HI Mike,

    In order to do this you will need to know enough information to calculate the global frame number and bind a function to be executed after the files are loaded to set the frame. The most sensible approach I think would be to make a package that reads frame number input from the command line (with commands.commandLineFlag) and waits for the "after-progressive-loading" event to set the frame (with commands.setFrame).

    However...

    I think it might make more sense to leave RV open and use its network control API to load sources and set the frame if you are planning on reviewing lots of material. That is much more efficient than to open and close RV constantly.

    Please tell me more about how your software interacts with RV and have a look at the following documentation:

    http://tweaksoftware.com/static/documentation/rv/current/html/rv_reference.html#Chapter_13_Network_Communication

    Thanks,
    Jon

  • 0
    Avatar
    Mike Hendricks

    Thanks, that helped a lot.

    For the time being the artists want to launch a new instance of RV each time, so I went with the first option. Here is the Mode code I came up with. It works great. `rv  -flags currentFrame=20 /path/to/image/sequence.#.jpg` This command will open the filename and set the play head to the 20th frame in the sequence(1 indexed)

    ```
    from rv import commands
    from rv.rvtypes import MinorMode

    class CurrentFrameMode(MinorMode):
        def afterProgressiveLoading(self, event):
            cmdFlag = commands.commandLineFlag('currentFrame', None)
            if cmdFlag is not None:
                commands.setFrame(int(cmdFlag))
            event.reject()

        def __init__(self):
            MinorMode.__init__(self)
                self.init("py-CurrentFrame-mode",[("after-progressive-loading", self.afterProgressiveLoading, "")],None, None)

    def createMode():
        return CurrentFrameMode()
    ```

    I was able to get a proof of concept of using the network control API using rvshell. If the artists change their minds down the road, I think it will work well, especially as we would be using a Qt app to launch it. The Network control API looks like it can be very useful.

  • 0
    Avatar
    Mike Hendricks

    By the way, here is how the artist is using this:

    The user uses our render management software to see their render jobs on the farm.

    They can right click on a job that has rendered frames, and select the 'Open in RV' menu item. This will open RV and load the specified frame sequence using `rv /path/to/image/sequence.#.jpg`. It defaults to the first frame of the sequence.

    They can also see the render status of each individual frame. If they right click on one of the frames they can select 'Open in RV'. This will open RV and load the frame sequence. But they want it to default to the frame they have selected.

  • 0
    Avatar
    Jon Morley

    That is terrific, Mike! Thank you for sharing as well!

Please sign in to leave a comment.