Override Frame Set on existing Job that got BinaryFrameSet setted makes the server crash

13 views
Skip to first unread message

Dimitri Marquette

unread,
Feb 17, 2026, 5:20:58 AMFeb 17
to Royal Render Knights Tavern
Hi Holger,

I'm on RR 9.1.12, I have a small issue, since you implemented the BinaryFrameSet
 I was really happy with it! But the small thing is that when a user modify it, the server will crash and I will have to revert the .db files on the server. Let me know if you need any information on this.

Best regards,

Dimitri

RR, Schoenberger

unread,
Feb 17, 2026, 10:25:08 AMFeb 17
to rrKn...@googlegroups.com

Hi

 

I will try to reproduce it.

Perhaps I have to disable that you can change it via the UI at all.

For now, you would need to write your own “Change Frameset” python command in rrControl that reads/writes a new frameset.

 

 

regards,
Holger Schönberger

Craftsman and Keeper of the Royal Render Flame

Please use the rrKnights Tavern
or our support system for new questions.

 

Dimitri Marquette

unread,
Feb 18, 2026, 4:39:18 AMFeb 18
to Royal Render Knights Tavern
Hi,

Thanks for the reply and the feedback, i'm on my way to create my custom python command, I was wondering if there is a proper way to make an user prompt within the RR interface?

My script looks like this, not sure about the Tkinter maybe I should try Qt instead.

import rrJob
import re

from tkinter import simpledialog
from typing import Optional


class FrameError(Exception):
    pass


def ask_data() -> Optional[str]:
    return simpledialog.askstring('Enter Frameset', 'Enter Frameset')


def extract_frames(data: str) -> list[int]:
    frame_list = []
   
    splitted_data = data.split(',')

    for d in splitted_data:
        match = re.match(r'\d{3}(-\d{3})?', d)
       
        if not match:
            raise FrameError(f'{d} not valid!')

        if match.group(1) is None:
            frame_list.append(int(match.group(0)))
        else:
            first_frame, last_frame = d.split('-')

            frame_list.extend(list(range(
                int(first_frame),
                int(last_frame) + 1)
            ))

    return frame_list


def get_frameset_object(frame_list: list[int]) -> str:
    bin_frame_set = rrJob._binaryFrameSet()

    for i, frame in enumerate(frame_list):
        if i == 0:
            bin_frame_set.setStartFileFrame(frame)
           
        bin_frame_set.setFrame(frame, True)

    return bin_frame_set.asString_BitA85()


def main() -> None:
    job = rr.getJob()

    if not job.BinaryFrameSetLock == 'BinaryFrameSetLock':
        return

    data = ask_data()

    if not data:
        return

    frame_list = extract_frames(data)

    binary_frame_set = get_frameset_object(frame_list)

    job.binaryFrameSetName = binary_frame_set


main()

RR, Schoenberger

unread,
Feb 18, 2026, 10:13:10 AMFeb 18
to rrKn...@googlegroups.com

Hi

 

RR offers a simple Qt UI with these functions.

https://www.royalrender.de/help/SDK/sdk/python_reference/rr_builtins.html#rr_builtins_._pythonGenericUI

 

For more complex UIs you have to use some 3rd party module.

Tkinter should be available in rrControl.

Otherwise place the UI module into RR\plugins\python_modules\ (or you define a new path in your script with sys.path.append(“path”))

 

 

 

But I just noticed some issues:
1) The function to add frames to the frame list is available in module rrSubmit, but not in rrControl.
You would have to import that module.

2) The current function is able to add frames to render only.
If you try to replace the complete frameset, then it is not updated at the rrServer.

 


Both issues are logged to the fixed.

 

I have attached an example that uses the module SDK\External\Python\rr_python_utils\ to import the rrSubmit.

Job_SendBinaryFrameSet.txt

Dimitri Marquette

unread,
Feb 18, 2026, 10:58:48 AMFeb 18
to Royal Render Knights Tavern
Hi Holger,

Thanks for your reply and the feedback, I didn't know that a built-in solution was available to make user input in RR, life changer!

I'll wait for the fixes then :)

Best regards,

Dimitri
Reply all
Reply to author
Forward
0 new messages