Skip to content

Allow a profile to create multiple render passes - #104

Merged
rdelillo merged 28 commits into
ynput:developfrom
bEpic-studio:contrib/multi-representation-render-from-single-profile
Sep 21, 2026
Merged

rdelillo merged 28 commits into
ynput:developfrom
bEpic-studio:contrib/multi-representation-render-from-single-profile

Conversation

@tweak-wtf

@tweak-wtf tweak-wtf commented Jun 12, 2026 •

Copy link
Copy Markdown
Contributor

Changelog Description

This draft shall make it possible to render more than 1 representation per instance.
Also it aims at making source clip integration optional.

General goal of this is to make use of resolve rendering engine as much as possible to not needing to go through extract_review as this comes with performance penalties compared to resolve.

Additional review information

  • changes profile structure to allow multiple representations to be rendered
  • adds Upload as reviewable tag (really just webreview under the hood)

I tested this for plate and editorial_pkg products on windows only.

Testing notes:

  • build & upload the addon
  • configure more than 1 representation pass
  • publish and check for your expected output

@jakubjezek001 jakubjezek001 added type: enhancement Improvement of existing functionality or minor addition community Issues and PRs coming from the community members labels Jun 23, 2026
@jakubjezek001 jakubjezek001 self-assigned this Jun 23, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the Resolve publish settings/schema and extraction logic to support rendering multiple representations (“render passes”) per instance, and introduces an additional representation tag intended for a “reviewable upload” workflow.

Changes:

  • Extends publish profile settings to define multiple render-pass entries per product base type (plate/editorial_pkg), with shared representation attributes.
  • Updates ExtractProductResources to iterate over multiple output settings and optionally disable “clip source” representation integration.
  • Adds a new representation tag option: webreview (“Upload as reviewable”).

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 5 comments.

File Description
server/settings.py Adds new settings models/structure to support multiple render-pass entries and introduces the webreview tag; defaults block was commented out.
client/ayon_resolve/plugins/publish/extract_product_resources.py Updates extraction to handle multiple passes, adds optional clip source integration behavior, and normalizes new nested settings structure.
Comments suppressed due to low confidence (1)

client/ayon_resolve/plugins/publish/extract_product_resources.py:157

  • get_default_settings doesn't include required keys like name/tags/custom_tags (and with_handles for plates). When defaults are used, later code accesses settings['name'] and will raise a KeyError.
    def get_default_settings(self, product_base_type="editorial_pkg"):
        """Return hard-coded defaults when no matching preset is found."""
        if product_base_type == "plate":
            return {
                "file_format": "EXR",
                "codec":       "RGB half (DWAA)",
                "preset_path": (
                    "{ayon_render_presets}/clip/EXR_RGB_half_(DWAA).xml"
                ),
            }
        return {
            "file_format":   "QuickTime",
            "codec":         "H.264",
            "preset_path":   (
                "{ayon_render_presets}/timeline/QuickTime_H264.xml"
            ),
            "export_otio": True,
            "otio_rootless": True,
        }

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread client/ayon_resolve/plugins/publish/extract_product_resources.py Outdated
Comment thread client/ayon_resolve/plugins/publish/extract_product_resources.py
Comment thread client/ayon_resolve/plugins/publish/extract_product_resources.py
Comment thread client/ayon_resolve/plugins/publish/extract_product_resources.py
Comment thread server/settings.py Outdated

return (profile["integrate_clip_source"], result)

def _normalize_preset(self, preset):

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it make more sense for this to return a dataclass? So that the process methods also take these dataclasses? Would probably make the code way more sane?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tbh i only used what was already there trying to be minimally invasive.

but sure. refactor everything preset related into 1 dataclass. can do that ✌️

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Happy to do so in separate PR though @jakubjezek001 ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

alrighty, then i'll continue to adress the notes where possible and eventually set this to be ready for review.
on that note thanks for checking this out already

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would have to be raw class, dataclasses are failing to be importable in publish plugins.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

noted. i'll pick this up in a separate PR then or shall i adress it in here?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Id agree with initial comment from Roy separate PR is fine for this one.

Comment thread client/ayon_resolve/plugins/publish/extract_product_resources.py Outdated
Comment thread client/ayon_resolve/plugins/publish/extract_product_resources.py
@tweak-wtf
tweak-wtf marked this pull request as ready for review July 27, 2026 13:04
Comment thread server/settings.py Outdated
Comment thread server/settings.py
{"value": "review", "label": "Extract review processing"},
{"value": "delete", "label": "Delete - as intermediate"},
{"value": "passing", "label": "Skip Extract Review"},
{"value": "webreview", "label": "Upload as reviewable"},

@iLLiCiTiT iLLiCiTiT Aug 25, 2026 •

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does it mean that this can skip ExtractReview with this change?

This will mark the representation to be used for AYON web review. Which means that all output representations from ExtractReview will have it too (even if the the output definition in the settings won't have it).

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hm not really, this change just lets me add a tag to a representation defined in resolve's export preset.

I'm using this PR without anything configured for resolve in Extract Review. I'm completely bypassing it which is the goal of this PR.

General goal of this is to make use of resolve rendering engine as much as possible to not needing to go through extract_review as this comes with performance penalties compared to resolve.

Comment thread client/ayon_resolve/plugins/publish/extract_product_resources.py Outdated
Comment thread client/ayon_resolve/plugins/publish/extract_product_resources.py Outdated
Comment thread server/settings.py Outdated
Comment thread client/ayon_resolve/plugins/publish/extract_product_resources.py Outdated
Comment thread client/ayon_resolve/plugins/publish/extract_product_resources.py Outdated
Comment thread client/ayon_resolve/plugins/publish/extract_product_resources.py Outdated
``file_format``, ``codec``, ``preset_path``,
and for *editorial_pkg* only: ``export_otio``, ``otio_rootless``.
"""
entity = get_current_task_entity()

@iLLiCiTiT iLLiCiTiT Aug 25, 2026 •

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why this uses get_current_task_entity instead of context.data["taskEntity"]?

BTW Why was the validation removed? Is it validated ahead in validations?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why this uses get_current_task_entity instead of context.data["taskEntity"]?

can't really tell, this is part of the current codebase and was introduced here: 8e95826#diff-1967197894dd67b098a925d8f9b4cf1f525872550105a43ce555004a25f0e335R71

but I also don't see why this can't just be retrieved from context. @jakubjezek001 any gotchas here?

BTW Why was the validation removed? Is it validated ahead in validations?

i removed it in 72ff09d as i found this scenario to be impossible to reach.
AYON requires a task to open a DCC, so if i can't open resolve from a non-task context how can there ever be no task entity collected?
but i can just revert this commit if u want. just wanted to cut down on a few lines

@BigRoy BigRoy Sep 3, 2026 •

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jakubjezek001 can you comment here and resolve if you're ok? Using the context taskEntity might be better?

@jakubjezek001 jakubjezek001 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tested and with some improvements form bEpic-studio#1 this could be merged

…der-from-single-profile-yn

Small enhancements for contribution pr#104
@jakubjezek001

Copy link
Copy Markdown
Member

@iLLiCiTiT or @BigRoy can this be merged and released?

Comment thread client/ayon_resolve/plugins/publish/extract_product_resources.py Outdated

@BigRoy BigRoy left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mostly good to solve the pending comments, but if it works and you're happy @jakubjezek001 then I'm ok with it. Feel free to poke Robin if you really need a more in-depth review/testing.

@jakubjezek001

Copy link
Copy Markdown
Member

@rdelillo will you have a time to test and review the code?

@rdelillo

rdelillo commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Sure. Will test this tomorrow.

@rdelillo rdelillo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overhall looks good, I just added a few fixes consolidation here: 9ac832cf849a64c65dec57479b94fa3080d402b3

  • Fix defaults settings settings -> output_defs in default dicts
  • Handle settings conversion from previous ayon-resolve version
  • Default representation name to extension
  • Raise when no output_def is defined in settings

@tweak-wtf feel free to merge my commit with your branch, or we can merge mine and close this one.
@jakubjezek001 would be great if you could quickly give it another try before we merge.

@tweak-wtf

Copy link
Copy Markdown
Contributor Author

hey @rdelillo thanks for the additions :)
just merged it in

@rdelillo

Copy link
Copy Markdown
Contributor

@tweak-wtf I believe this good to merge.
I'd have done it myself from this PR but looks like I don't have the permissio to push on your branch.

@tweak-wtf

Copy link
Copy Markdown
Contributor Author

@tweak-wtf I believe this good to merge. I'd have done it myself from this PR but looks like I don't have the permissio to push on your branch.

sweet... just pulled in develop ✌️

@rdelillo
rdelillo merged commit a939119 into ynput:develop Sep 21, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

community Issues and PRs coming from the community members type: enhancement Improvement of existing functionality or minor addition

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants