From 9f31cb16f95d10677b58fdd9626435c2b488406b Mon Sep 17 00:00:00 2001 From: "G.Hirpara" Date: Fri, 24 Jul 2026 23:14:25 -0400 Subject: [PATCH] docs: restore PR #27's README section dropped during conflict resolution The README conflict between #27's render-engine-selector work and #28's busy-handling docs resolved to a no-op during the GitHub web merge, so the "Truthful Iray/Viewport render-engine selector" section, its TOC entry, and the version badge/wheel example never landed on master even though the feature code and tests did. Restores that content from the already-resolved review/pr-27-rebased reference branch and bumps the version to 2.8.1 to match (common_version.h, pyproject.toml, dazpy/__init__.py, docs/conf.py, openapi.yaml, CHANGELOG.md). Also fixes two stray blank lines left in the render_animation_submit docstring in dazpy/_client.py from the same conflict resolution. Co-Authored-By: Claude Sonnet 5 --- CHANGELOG.md | 22 +++++++++++++++++++++ README.md | 41 ++++++++++++++++++++++++++++++++++++++-- dazpy/__init__.py | 2 +- dazpy/_client.py | 3 +-- docs/conf.py | 2 +- include/common_version.h | 4 ++-- openapi.yaml | 6 +++--- pyproject.toml | 2 +- 8 files changed, 70 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 549c955..d960c1c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,28 @@ All notable changes to DazScript Server are documented here. +## [2.8.1] - 2026-07-24 + +### Truthful Iray/Viewport render-engine selector + +`DazRenderSettings.render_engine_state()` reads `DzRenderOptions.renderType` +and the active renderer class/name as separate facts, returning a schema-1 +record with a normalized `verified_iray` / `verified_non_iray` / +`unavailable` status and field-level live-readback provenance. A retained +`NVIDIA Iray` active-renderer name never overrides a Viewport/OpenGL +`renderType`. + +`DazRenderSettings.set_render_engine("iray" | "viewport")` is an explicit +persistent setter that selects the registered `DzIrayRenderer` plus +`Software` for Iray, or `ScreenShot` for Viewport, applies the change, and +returns only after exact readback. Missing renderers, mutation/apply +faults, malformed replies, and readback disagreement raise `RenderError`; +unknown engine names raise `ValueError` before dispatch. + +The `engine` field on `/render`, `/render/batch`, and `/render/animation` +also accepts `viewport` and uses the same fail-closed mutation/readback +rules. + ## [2.8.0] - 2026-07-23 DAZ Studio's Qt main thread is single-threaded: if a user drives DAZ Studio diff --git a/README.md b/README.md index d2a19ca..ed79711 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # DazScript Server -**Version 2.8.0** | DAZ Studio 4.5+ | DAZ Studio 6.25+ | Windows & macOS +**Version 2.8.1** | DAZ Studio 4.5+ | DAZ Studio 6.25+ | Windows & macOS [![Docs](https://img.shields.io/badge/docs-dazpy%20SDK-blue)](https://bluemoonfoundry.github.io/daz-script-server/) [![HTTP API](https://img.shields.io/badge/docs-HTTP%20API%20reference-blue)](https://bluemoonfoundry.github.io/daz-script-server/api-reference/) @@ -68,6 +68,7 @@ print(response.json()) ### Getting Started - [Quick Start](#-quick-start) - [Why This Exists](#why-this-exists) +- [What's New in v2.8.1](#whats-new-in-v281) - [What's New in v2.8.0](#whats-new-in-v280) - [What's New in v2.7.2](#whats-new-in-v272) - [What's New in v2.7.1](#whats-new-in-v271) @@ -155,6 +156,42 @@ DAZ Studio is powerful for 3D content creation, but automation is limited to man --- +## What's New in v2.8.1 + +### Truthful Iray/Viewport render-engine selector + +`DazRenderSettings.render_engine_state()` now reads the effective +`DzRenderOptions.renderType` value and the active renderer class/name as separate +facts. Its schema-1 record includes the raw enum value/name, normalized +`verified_iray` / `verified_non_iray` / `unavailable` status, and field-level +live-readback provenance. A retained `NVIDIA Iray` active-renderer name never +overrides a Viewport/OpenGL `renderType`. + +`DazRenderSettings.set_render_engine("iray" | "viewport")` is an explicit +persistent setter. It selects the registered `DzIrayRenderer` plus `Software` for +Iray, or `ScreenShot` for Viewport, calls `applyChanges()`, and returns only after +exact readback. Missing renderers, mutation/apply faults, malformed replies, and +readback disagreement raise `RenderError`; unknown engine names raise `ValueError` +before dispatch. + +```python +settings = DazRenderSettings(client) +before = settings.render_engine_state() +change = settings.set_render_engine("iray") +assert change["readback"]["status"] == "verified_iray" +``` + +The `engine` field on `/render`, `/render/batch`, and `/render/animation` also +accepts `viewport` and uses the same fail-closed mutation/readback rules. These +operations intentionally persist the requested engine. DAZ documents `ScreenShot` +and `HardwareAssisted` as Viewport/OpenGL operations and `Software` as the active +software-renderer operation in the +[DzRenderOptions reference](https://docs.daz3d.com/public/software/dazstudio/4/referenceguide/scripting/api_reference/object_index/renderoptions_dz); +renderer lookup and activation are documented by +[DzRenderMgr](https://docs.daz3d.com/public/software/dazstudio/4/referenceguide/scripting/api_reference/object_index/rendermgr_dz). + +--- + ## What's New in v2.8.0 ### 🚦 Fail Fast When DAZ Studio Is Busy — `503 STUDIO_BUSY` @@ -697,7 +734,7 @@ automation code without authoring DazScript by hand. Download the `.whl` file from the [latest release](https://github.com/bluemoonfoundry/daz-script-server/releases/latest) and install it: ```bash -pip install dazpy-2.8.0-py3-none-any.whl +pip install dazpy-2.8.1-py3-none-any.whl ``` Or install directly from the repo for development: diff --git a/dazpy/__init__.py b/dazpy/__init__.py index 434dc6e..49eb742 100644 --- a/dazpy/__init__.py +++ b/dazpy/__init__.py @@ -13,7 +13,7 @@ figure.find_bone("r_forearm").set_local_rotation(0, 0, 45) """ -__version__ = "2.8.0" +__version__ = "2.8.1" from ._client import DazClient from ._scene import DazScene diff --git a/dazpy/_client.py b/dazpy/_client.py index 85411df..aa01297 100644 --- a/dazpy/_client.py +++ b/dazpy/_client.py @@ -507,14 +507,13 @@ def render_animation_submit( width: Image width in pixels (must be paired with *height*). height: Image height in pixels (must be paired with *width*). camera: Camera label to render from. - - engine: Render engine (``"iray"``, ``"viewport"``, ``"filament"``). retry_on_busy: If ``True``, transparently retry with backoff when the server reports ``StudioBusyError``/``ConcurrencyLimitError``, instead of raising immediately. max_wait: Maximum total seconds to retry when *retry_on_busy* is ``True``, before re-raising the busy error. + Returns: A dict with ``request_id``, ``status`` (``"queued"``), and ``submitted_at`` keys. diff --git a/docs/conf.py b/docs/conf.py index cb7f8bf..07378b2 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -10,7 +10,7 @@ project = "dazpy" copyright = "2024, Blue Moon Foundry" author = "Blue Moon Foundry" -release = "2.8.0" +release = "2.8.1" version = release # ── Extensions ──────────────────────────────────────────────────────────────── diff --git a/include/common_version.h b/include/common_version.h index 5c36987..679b031 100644 --- a/include/common_version.h +++ b/include/common_version.h @@ -4,8 +4,8 @@ // Version number for DazScriptServer #define DZSRV_MAJOR 2 #define DZSRV_MINOR 8 -#define DZSRV_REV 0 +#define DZSRV_REV 1 #define DZSRV_BUILD 0 #define DZSRV_VERSION DZ_MAKE_VERSION( DZSRV_MAJOR, DZSRV_MINOR, DZSRV_REV, DZSRV_BUILD ) -#define DZSRV_VERSION_STR "2.8.0" +#define DZSRV_VERSION_STR "2.8.1" diff --git a/openapi.yaml b/openapi.yaml index 82d9084..2369ae0 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -22,7 +22,7 @@ info: queue behind each other. The `/execute/async` family lets callers submit work without blocking their HTTP connection. - version: 2.8.0 + version: 2.8.1 contact: name: Blue Moon Foundry url: https://github.com/bluemoonfoundry/daz-script-server/issues @@ -64,7 +64,7 @@ paths: $ref: '#/components/schemas/StatusResponse' example: running: true - version: "2.8.0" + version: "2.8.1" /health: get: @@ -81,7 +81,7 @@ paths: $ref: '#/components/schemas/HealthResponse' example: status: ok - version: "2.8.0" + version: "2.8.1" running: true auth_enabled: true active_requests: 2 diff --git a/pyproject.toml b/pyproject.toml index 125bd78..55176eb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "dazpy" -version = "2.8.0" +version = "2.8.1" description = "Python SDK for the DAZ Studio Script Server" readme = "README.md" requires-python = ">=3.10"