Skip to content

Latest commit

 

History

History
491 lines (276 loc) · 58.3 KB

File metadata and controls

491 lines (276 loc) · 58.3 KB

PublisherStudio

The offline Publisher workbench that puts documents, spreadsheets, presentations, graphics, audio, and video on one canvas.

PublisherStudio is a local-first desktop publishing environment powered by an ASP.NET Core loopback server. Build print publications, reports, interactive presentations, websites, and recorded media without sending project data to a cloud service.

  • Page layout and presentations: layered, grouped, animated, rotatable objects with rulers, guides, snapping, transitions, print, PDF, HTML, and recorded-presentation export.
  • Word-class stories: embedded DevExpress RichEdit documents with DOCX storage, fields, page settings, and backgrounds.
  • Excel-class workbooks: embedded DevExpress Spreadsheet editing, import/download, and scalable worksheet frames.
  • Picture Studio: a built-in mini image workshop for crop, filters, masks, tinting, transparency, drawing, gradients, layered picture documents, and visible rectangle/ellipse/freehand/magnetic/polygon selection overlays.
  • Audio and video studio: import, record, trim, arrange, preview, and export media directly inside publications, with explicit timeline modes, source-frame-aligned regions, layered filters, open-project import and direct hand-off to the reusable FFmpeg converter.
  • Panel / Div Studio: visually compose reusable, nested, interactive panels and KPI dashboards from the same publication components, data bindings, web sources and export runtime used by the Mainframe.
  • Media Converter Studio: locally convert browser-limited media through a reusable FFmpeg service/controller workflow with profiles, arbitrary dimensions, codecs, filters, metadata and Mainframe/VideoStudio hand-offs.
  • Live data publishing: every DevExtreme Cartesian series type plus pie/doughnut, PolarChart, sparkline, bar/circular/linear gauges, range selector, Sankey, funnel, pyramid, tree map, data grid, KPI visuals, barcodes, QR codes, WordArt, connectors, and data-bound fields.

Your files remain under the signed-in user's control. PublisherStudio listens only on the local loopback interface.

LocalGPT AI Council integration

PublisherStudio discovers LocalGPT through a compact UDP beacon and establishes the approved organic link over TCP. Capability, skill, UI-feature, and hardware directories are exchanged only after the link is approved, avoiding oversized discovery packets while preserving the complete shared catalogue. PublisherStudio can advertise its eye, hand, OpenSCAD, spreadsheet, media, and publishing capabilities and can submit work to configured LocalGPT Council teams.

The normal PublisherStudio web port, LocalGPT web/installer port, 1-Wire TCP service port, and UDP discovery port remain separate contracts. The protocol source and package authority live only in the LocalGPT repository. PublisherStudio contains no mirrored protocol project and consumes the RID-neutral LocalGPT.WireProtocolVersion NuGet release package.

See CHANGELOG-v1.0.89.md and docs/architecture/task-ledger.md.

Optional LocalGPT organic wiring

PublisherStudio remains a complete standalone publication application. Its LocalGPT connection is optional and demonstrates the organic adaptation system rather than creating a hard dependency. PublisherStudio broadcasts or accepts only a compact local discovery identity; after explicit user authorization, the peers establish TCP and exchange the larger capability directory there. The permission matrix decides whether screen capture, browser input, OpenSCAD generation, spreadsheet inspection or another capability may run. A discovered peer never receives automatic control.

The same pattern can be generated for a user's own local software: the application describes a capability contract, LocalGPT helps generate a protocol adapter and Council role/workflow, and the human reviews and enables the result. This is an example of LocalGPT adapting organically to a private local environment while keeping the installation, source and authority under the user's control.

Runtime security is not embedded in the package. PublisherStudio creates its own random secret file only when the user requests it, can rotate or delete it from the Organic Plugins security panel, renders Authenticator and public pairing-ticket QR codes, stores time-limited peer trust locally, and encrypts/signs sensitive envelopes after reciprocal trust. Custom add-ons can use the same permission queue through the HTTP/JSON adapter; see docs/ONEWIRE_RUNTIME_SECURITY_HTTP_JSON.md.

PublisherStudio uses one protocol mode only: an authoritative NuGet package produced by LocalGPT. There is deliberately no src/LocalGPT.WireProtocolVersion directory and no protocol project in PublisherStudio.sln. This prevents two Git repositories from silently diverging on the same wire contract.

The first build prepares packages/LocalGPT.WireProtocolVersion.2.1.0.nupkg before NuGet restore. It can copy the package from a LocalGPT checkout or per-user cache, or download the official asset from the latest LocalGPT GitHub release. The package cache is ignored by Git.

Local development:

.\Build-LocalDevelopment.ps1 -Configuration Debug

Use a local LocalGPT checkout explicitly:

.\Build-LocalDevelopment.ps1 -LocalGptRepository C:\Source\LocalGPT

All supported release runtimes, strictly sequential and reusing one already prepared package:

.\Build-AllRuntimes.ps1

A package URL can be supplied directly with -WireProtocolPackageUrl. Without one, PublisherStudio uses https://github.com/Michi0403/LocalGPT/releases/latest/download/LocalGPT.WireProtocolVersion.2.1.0.nupkg. The installer/update/start wiring remains independent: PublisherStudio can be installed and used without LocalGPT, and the organic page simply reports that no peer is connected until the user starts and authorizes one.

v1.0.88: publish-candidate interaction hardening

  • Fixes the Panel Studio drop race that could terminate a Blazor circuit.
  • Makes HTML/Web/Canvas/3D content arrangeable as a normal object in Mainframe and Panel Studio.
  • Adds shared layout/Z-order service and API, complete layer commands, pointer/touch/keyboard/gamepad input, local stacking rules, structured logging and user notifications.
  • Introduces a mandatory interaction/stacking/export/logging release gate for future components.

See CHANGELOG-v1.0.88.md and docs/architecture/interaction-stacking-and-notification-v1.0.88.md.

v1.0.87: browser runtime raw-string compatibility

This hotfix fixes CS9007 in the reusable blob browser-runtime template. Embedded JavaScript is now a non-interpolated C# raw string with one explicit payload marker, so JavaScript block braces and ${...} template expressions cannot be mistaken for C# interpolation delimiters. A contract test also validates a generated runtime with node --check.

v1.0.86: SDK implicit-content compatibility

This hotfix keeps the v1.0.85 localization design intact while correcting its MSBuild item metadata. The Web SDK already discovers Localization/*.json as content, so the project now uses Content Update to attach copy-to-output/publish behavior instead of including the same files a second time. A repository contract protects this rule against future NETSDK1022 regressions.

v1.0.85: interface-first automation, OpenSCAD and render evolution

This source package adds reusable DI interfaces and loopback controller access for OpenSCAD generation, Video Studio interchange, LocalGPT/AICouncil browser commands, screenshots, business-object discovery, programming-language text commands, localization, configurable paths and render-export capability analysis. OpenSCAD is represented as an extensible node graph with typed properties and per-part $t animation tracks so a later visual builder can use the same model. PNG/JPEG/SVG render export now snapshots canvas effects and current video frames instead of exporting blank cloned media.

The implementation is intentionally evolutionary. Existing component APIs and exporters remain available. Remaining legacy-static migration, a visual OpenSCAD builder, native OpenSCAD process execution, full UI-string migration, non-English spelling dictionaries and OS-global input are tracked explicitly in docs/architecture/task-ledger.md.

Developer setup: Node.js 20 or newer is required only on a licensed developer/build machine. Run Prepare-DevExpressAssets.cmd after a clean checkout. It restores the local browser packages and uses the matching devextreme-license CLI to generate the public runtime key required by PublisherStudio and standalone HTML exports. Published/installed releases do not require Node.js, npm, npx, or a private DevExpress license at runtime.

Implemented in this source package

  • DevExpress Blazor DxRibbon with File, Home, Insert, Page Design, View, Animations, Picture Tools, Text Box Tools, WordArt Tools, Connector Tools, Shape Tools, and Data Tools tabs.
  • DevExpress DxContextMenu on the page, selected publication objects, Picture Studio canvas/layers, and data-visual preview.
  • Multi-page workspace with page thumbnails, layers, selection handles, drag, resize, rotation, ordering, alignment, duplication, copy/paste, undo, and redo.
  • Canvas-linked horizontal and vertical rulers that follow page position, scroll, zoom, and the selected unit.
  • Millimetre, centimetre, inch, and pixel ruler units.
  • Guides created by dragging from either ruler, movable guides, guide deletion by dragging outside the page, grid display, and snap options.
  • A larger preset catalogue: A3, A4, A5, Letter, Legal, Tabloid, business card, landscape variants, and square, plus custom dimensions.
  • Text frames edited with DevExpress Blazor RichEdit and its Office ribbon; stories use DOCX storage, support dynamic fields, and download as DOCX, RTF, TXT, or HTML.
  • First-class spreadsheet frames edited with the DevExpress ASP.NET Core Spreadsheet control in an application-styled modal; workbooks support XLSX, XLSM, XLS, CSV, and text import, formula editing, worksheet tabs, download, embedded publication storage, static canvas/print previews, layering, transforms, and double-click editing.
  • Image frames with preserved PNG alpha, replacement, fit/fill, interactive crop panning, wheel-based crop zoom, picture rotation, flipping, opacity, brightness, contrast, saturation, hue, inversion, grayscale, sepia, blur, masks, borders, shadows, tint/full recolor, blend modes, color-key transparency, and frame-ratio presets.
  • A separate Picture Studio opened by Insert > Create picture or Picture Tools > Edit in Picture Studio, with transparent canvases, direct transforms, undo/redo, a layer clipboard, keyboard shortcuts, contextual right-click commands, and editable raster, text, shape, fill, paint, and procedural-render layers.
  • Publication-level reusable data objects sourced from imported or pasted CSV/TSV, JSON, XML, live publication-object metadata, the local PublisherStudio monolith API, configurable REST polling, or tokenized webhooks.
  • Insertable live DevExpress/DevExtreme visuals: all 23 Cartesian series types (including range, bubble, stock, and candlestick), pie/doughnut, every PolarChart series, every Sparkline series, bar/circular/linear gauges, range selector, Sankey, funnel, pyramid, tree map, data grid, and KPI progress.
  • A guided data-visual editor for choosing component type, chart subtype, category, grouped/multiple series, range values, bubble size, OHLC fields, Sankey targets, tree-map parents, labels, legends, gauges, and row limits with a live preview.
  • Picture Studio effects include tint/recolor, soften/blur, tonal and color adjustments, gradients, Clouds, Noise, Stripes, Vignette, Bloom, Neon, Lens Flare, Grain, Motion Blur, Wind, and Ocean Waves; drawing includes brush, pencil, spray, toothbrush, lines, arrows, base forms, area selections, and solid/gradient selection fills.
  • Rectangles, rounded rectangles, ellipses, lines, and WordArt/LogoArt with fixed transforms plus freely drawn text paths.
  • Attached straight, elbow, and curved connectors with eight ports per object, reconnectable endpoints, line styles, and arrow/triangle/diamond markers.
  • Native self-contained JSON publication format (.pubstudio.json).
  • Per-page PNG and JPEG export (ZIP for multi-page documents), browser-oriented SVG export, and browser-capture WebM presentation export.
  • Page-wide animation timelines, object entrance/emphasis/motion/exit effects, page transitions, click triggers, playback timing, and object interactions across every publication element type.
  • Embedded audio and video page objects with import, camera/screen/microphone recording, generated sample audio, non-destructive trims, fades, playback settings, media animation cues, and layer integration.
  • An on-demand page timeline docked to the bottom of the workspace with playhead transport, a DevExpress visible-range selector, draggable/resizable animation clips, and draggable/trim-enabled media clips.
  • Self-contained animated HTML presentation export with responsive scaling, keyboard/control navigation, fullscreen, replay, looping, automatic advance, and print fallback.
  • Browser print workflow suitable for printing or the browser's Save as PDF command.
  • Insertable QR and linear barcodes with common symbologies, colors, readable text, module designs, and QR error correction.
  • Cross-platform InstallerConsole bootstrapper that downloads the latest release, installs or updates PublisherStudio, starts the single application process, provisions FFmpeg through an available operating-system package manager, and creates Windows shortcuts without requiring Git.

Design reference boundary

GIMP and Inkscape were used only as behavioural references for rulers, guides, crop interaction, and non-destructive image adjustments. Blazor.Diagrams was used only as a behavioural reference for ports, snapping, routing, and endpoint reconnection. No source code, binaries, packages, or assets from those projects are included. The implementation remains native Blazor/C#/JavaScript and keeps the Apache-2.0 project boundary.

Requirements

  • Visual Studio with the .NET 10 SDK. The included global.json accepts .NET 10 feature bands starting at 10.0.100.
  • DevExpress DXperience 25.2 packages and a configured DevExpress NuGet feed.
  • A valid DevExpress license.
  • Node.js 20 or newer with npm and npx is a source-development/build-machine requirement only for DevExpress client-asset preparation and public DevExtreme runtime-key generation. Normal application use and installed PublisherStudio releases do not invoke Node.js, npm, or npx.
  • A current Chromium-based browser is recommended for the raster/SVG export pipeline.
  • FFmpeg is required for provider encoding, native capture devices, isolated application audio, recording, and HLS/RTSP delivery. Browser webcam, microphone, screen, window, and tab capture can still preview through browser APIs without FFmpeg. PublisherStudio.Setup checks and installs FFmpeg by default during installation/update; use --check-ffmpeg, --install-ffmpeg, or --skip-ffmpeg for explicit control.

Build and run

.\Prepare-DevExpressAssets.cmd
dotnet restore PublisherStudio.sln
dotnet build PublisherStudio.sln -c Debug
dotnet run --project src/PublisherStudio.Web

Prepare-DevExpressAssets.cmd is required once after extracting a clean source archive and again whenever the pinned DevExtreme version changes or the licensed build identity changes. It finds standard Node.js/NVM installations even when Visual Studio was opened with an older PATH, restores the committed npm packages, temporarily pulls the matching devextreme CLI package with npx, and creates wwwroot/vendor/devextreme-license.js in non-modular form. The old Prepare-SpreadsheetAssets.cmd command remains as a compatibility alias.

The private DevExpress license is read only by the official generator from the licensed machine or the DevExpress_License environment variable. PublisherStudio stores and distributes only the generated public/runtime key. The source archive intentionally excludes that generated file, while published binaries include it beside the local DevExtreme assets.

The published application serves Spreadsheet, DevExtreme, jQuery, and the runtime-license script from its own ASP.NET Core host. Standalone HTML export inlines the same files in the required order: jQuery, dx.all.js, generated runtime license, then PublisherStudio's visualization/data runtime. No CDN or internet connection is required at end-user runtime.

Detailed setup, CI, ordering, and troubleshooting notes are in docs/DEVEXTREME_RUNTIME_LICENSE.md.

Optional fixed port:

dotnet run --project src/PublisherStudio.Web -- --port 5198

Without a supplied port, Kestrel asks the operating system for a loopback port and writes the resolved endpoint to:

%LOCALAPPDATA%/PublisherStudio/runtime/server.json

First-use workflow

  1. Add or select a picture.
  2. Use Picture Tools > Crop, then drag the picture inside its frame and use the mouse wheel to zoom.
  3. Double-click the picture or choose Finish crop to leave crop mode.
  4. Open the right-hand Properties tab for live picture adjustments.
  5. Drag from a ruler onto the page to create a guide.
  6. Choose Insert > Connector or Arrow connector, then drag from one round object port to another. Drag a selected endpoint to reconnect it; Esc stops the tool.
  7. Select WordArt and choose WordArt Tools > Draw path. Pick a preset or click Draw freehand, then drag the control points to refine the baseline.
  8. Choose Insert > Create picture to start a transparent layered image, or select an image and choose Picture Tools > Edit in Picture Studio. Use Insert into publication / Apply to picture to retain the editable layer source.
  9. Choose Insert > Spreadsheet to import XLSX, XLSM, XLS, CSV, or text, or choose Create spreadsheet for a blank workbook. Edit it in Spreadsheet Studio and use Apply to frame to keep the workbook embedded in the publication. Double-click the frame to reopen it.
  10. Choose Insert > Manage data to create a reusable data object from JSON, pasted CSV/TSV, live page/object metadata, the local monolith API, an external REST endpoint, or a webhook inbox.
  11. Choose any visual from Insert > Charts and data. The Cartesian editor exposes every DevExtreme series type, while the remaining entries cover the full pie, PolarChart, Sparkline, gauge, range, Sankey, funnel, pyramid, tree-map, grid, and KPI families.
  12. For live standalone HTML, enable Allow standalone HTML to fetch this endpoint on the data object. The export always contains the last successful snapshot; connect it to a running PublisherStudio instance with ?publisherApi=http://127.0.0.1:PORT, or let it call a CORS-enabled external endpoint directly.
  13. Choose Insert > Media to embed audio/video, or open Create audio / Create video for microphone, camera, screen, generated-tone, trim, fade, volume, and playback controls.
  14. Select an object and open the Animations inspector tab or ribbon tab to add entrance, emphasis, motion, or exit steps. Open the docked timeline pane from the Animations, View, or Media Tools ribbon tabs and use it to drag animation timing and arrange or trim media clips against one page playhead.
  15. Right-click the page, page thumbnails, selected objects, timeline clips/background, Picture Studio canvas/layers, Media Studio preview/range, or a data-visual preview for commands relevant to that location.
  16. Use Insert > Barcode / QR for QR, Code 128, Code 39, EAN-13, UPC-A, ITF-14, or Codabar objects.
  17. Use File for JSON save/open and PNG, JPEG, SVG, animated website, WebM presentation capture, or print/PDF output.

The file picker is reset before every picture/open command, so selecting the same file again also triggers replacement.

InstallerConsole

Build the self-contained, multi-file application and setup payload into the shared release location:

.\Build-Release.ps1 -Runtime win-x64

The command-line workflow and the Visual Studio publish profiles both write to artifacts\release. Extract setupwinx64.zip as a complete folder and run Install.cmd; the setup executable intentionally depends on the adjacent self-contained runtime files and is no longer published as a misleading standalone file.

For a direct application publish, keep the same reviewed properties:

dotnet publish src/PublisherStudio.Web -c Release -r win-x64 --self-contained true -p:PublishSingleFile=false -p:PublishTrimmed=false -p:PublishReadyToRun=false -o artifacts/release/winx64

Maintainer and development assistance

PublisherStudio / BlazorPublisher is created and maintained by Michael Fleischer (Michi0403). AI systems, including ChatGPT, have been used as development assistants for research, code review, debugging, test design, and documentation. This does not imply vendor endorsement or transfer release responsibility away from the maintainer.

Logging integrity guardrail

Structured logging and clear exception handling are application behavior, not disposable noise. Refactors should preserve useful diagnostics while avoiding secrets, full payloads, and blame-oriented user messages. Repository validation scripts are developer-invoked and are not injected into ordinary builds.

Deliberate limits

This is a substantial offline workbench, not a claim of complete Publisher/InDesign parity. Text-frame linking, master pages, full pen-tool Bézier handles, obstacle-aware connector routing, color management, CMYK/PDF-X prepress, imposition, and full packaging of external assets remain later milestones. Picture Studio now includes editable brush, pencil, line, eraser, and eyedropper tools in addition to compositing and non-destructive layers; lasso selections, pixel masks, clone/heal tools, and pressure-sensitive input remain later milestones. Data visuals support embedded files, publication-object data, local monolith APIs, configurable HTTP requests, and webhook snapshots. Database-specific adapters, OAuth credential vaults, GIS/tile providers, report designers, and the planned LAN/VLC/provider streaming workbench remain later integrations. Spreadsheet Studio is a separate first-class workbook object rather than a chart/data-visual substitute. SVG export currently uses an SVG foreignObject representation so it preserves the HTML text-frame rendering in Chromium; a future pure-vector exporter should translate each publication element directly to SVG primitives. The animation/media document model is exporter-neutral and animated HTML plus browser-capture WebM export are implemented; native PowerPoint timing-tree/media output and direct server-side video encoding remain later exporter modules. Media trimming is non-destructive and browser recording formats depend on MediaRecorder support in the active browser.

See CHANGELOG-v1.0.md, CHANGELOG-v0.9.md, docs/ARCHITECTURE.md, docs/ANIMATION_EXPORT.md, and VALIDATION.md.

v0.3.1 WordArt visibility hotfix

See CHANGELOG-v0.3.1.md.

v0.3.2 RichEdit popup hotfix

See CHANGELOG-v0.3.2.md. The custom Edit Story backdrop now stays below DevExpress popup layers, so RichEdit ribbon drop-downs and dialogs remain visible and interactive.

v0.4 custom WordArt paths

See CHANGELOG-v0.4.md. WordArt can follow eight presets or a freehand path with draggable points, reversible direction, text-position control, and path-distance control.

v0.4.1 Razor SVG text hotfix

See CHANGELOG-v0.4.1.md. WordArt SVG text nodes are emitted by a small Blazor render component so Razor no longer mistakes SVG <text> elements for its reserved pseudo-element.

v0.5 Picture Studio

See CHANGELOG-v0.5.md. A decoupled layered Picture Studio can create transparent raster assets from scratch, edit existing publication pictures, render procedural clouds/noise/stripes/vignettes, preserve its editable source in the publication, and return a normal PNG to the established page workflow. Ribbon command foreground colors are also stabilized.

v0.6 publication data and DevExpress visuals

See CHANGELOG-v0.6.md. Publications can now store reusable data objects and insert live DevExpress Cartesian, pie/doughnut, polar, sparkline, bar-gauge, grid, and KPI visuals. Data can come from CSV/TSV, JSON, XML, or the publication's own page/object metadata.

v0.7 Picture Studio drawing and recovery

See CHANGELOG-v0.7.md. Picture Studio now uses a DevExpress Ribbon for insert, render, drawing, raster, and effect commands; adds editable paint layers with Brush, Pencil, Line, Eraser, and Eyedropper tools; and fixes the literal initial-image binding that caused repeated image decode exceptions.

v0.8 desktop context menus

See CHANGELOG-v0.8.md. Picture Studio now has hit-tested canvas and layer-list context menus, an internal layer clipboard, and focused-canvas keyboard shortcuts. The publication canvas and data-visual editor context menus now expose more relevant insert, type, display, page, and editing commands.

v0.9 animations and interactive presentation export

See CHANGELOG-v0.9.md. Every publication element can participate in a page-wide animation timeline, pages have independent transitions and advance rules, and objects can navigate, open links, reveal/hide other objects, or replay animations. Website export is now an animated, self-contained presentation.

v1.0 media studios and visual page timeline

See CHANGELOG-v1.0.md. Audio and video are first-class publication objects, Video Studio and Audio Studio provide simple browser-native creation and non-destructive editing, and the page timeline provides a second visual way to arrange animations and media.

v1.0.5 beta stabilization

See CHANGELOG-v1.0.5.md. Presentation video recording, publisher pointer state, deterministic layer ordering, CSV/XML data import, barcode value import, and Story Editor ribbon sizing were stabilized for beta.

v1.0.19 recording and presentation export stabilization

See CHANGELOG-v1.0.19.md. Browser recordings remain available as local downloadable blobs until Media Studio closes, large recordings are embedded only on demand through small JS-interop chunks, and HTML/video presentation exports share one fixed publication frame with working page transitions. Versions v1.0.12 through v1.0.18 were iterative releases without separate changelog files.

v1.0.20 object workflow and recovery stabilization

See CHANGELOG-v1.0.20.md. Desktop file drag/drop now creates live-positioned picture, video, text, and Markdown objects; grouping is respected by alignment, z-order and animation; chart layering and minimum sizing are stabilized; WordArt gains a font selector; timeline dragging terminates reliably; and atomic local recovery protects work around navigation and presentation export.

v1.0.21 interaction, story and canvas-state stabilization

See CHANGELOG-v1.0.21.md. Multi-object clipboard and keyboard editing now work as one coherent canvas workflow; quick inserts and desktop files display live drag previews; animation and pointer states return reliably to selection mode; RichEdit formatting is preserved in canvas, print and exported output; and chart content remains stable across z-order changes.

v1.0.22 selection and desktop clipboard stabilization

See CHANGELOG-v1.0.22.md. Mouse selection is restored without removing the v1.0.21 drag/drop and keyboard workflow; selected and grouped objects move together across z-levels; and files or text copied from the desktop can be pasted at the last canvas position.

v1.0.23 story fidelity and command-surface completion

See CHANGELOG-v1.0.23.md. RichEdit formatting and document backgrounds now survive apply, reopen, canvas display, print and HTML/video export; Publisher and Picture Studio context menus expose the relevant animation and layer settings; selected renderer properties are clearly identified; and all ribbon commands have built-in icons.

v1.0.24 story print and marquee selection

See CHANGELOG-v1.0.24.md. Story documents containing embedded pictures can be applied through chunked interop, print output retains page and text highlight fills, and mouse rectangle selection again works across every visible z-level while respecting persistent groups.

v1.0.25 dropped-story stability

See CHANGELOG-v1.0.25.md. Dropped text and Markdown now enter the publication as native OpenXML stories, legacy HTML stories upgrade only after RichEdit reports the document loaded, and mail-merge settings attach only after that same safe lifecycle point so opening a dropped story cannot terminate the Blazor circuit.

v1.0.26 Story print-preview isolation and DOCX drop import

See CHANGELOG-v1.0.26.md. Story Editor printing now runs from an independent blob-backed preview window with materialized print fills, so page colors and highlights print without keeping an iframe attached to the Blazor circuit. DOCX files can be dropped directly onto the publication as editable OpenXML stories.

v1.0.27 DOCX-aligned Story printing

See CHANGELOG-v1.0.27.md. Story Editor print preview, browser printing, PDF output, and standalone HTML now use the page size, orientation, margins, and gutter stored in the live DOCX, while preserving full-page background colors and text fills.

v1.0.28 exact Story PDF preview and print

See CHANGELOG-v1.0.28.md. Story printing now paginates into explicit physical sheets using the live DOCX paper size and margins, removes RichEdit HTML preview-width centering, and opens an application-generated PDF instead of printing the preview HTML. This keeps the Word/LibreOffice placement and prevents browser-added date/title, URL, and page-number decorations.

v1.0.29 Spreadsheet Studio

See CHANGELOG-v1.0.29.md. Spreadsheet workbooks are now first-class publication layers. The supported DevExpress ASP.NET Core Spreadsheet control runs as a same-origin MVC/Razor island inside the Blazor editor shell, with local assets, CSRF-protected document requests, session-bound saves, XLSX/XLSM/XLS/CSV/TXT import, workbook download, double-click editing, and safe static previews for canvas, print, and export.

v1.0.30 Spreadsheet build and compiler fixes

See CHANGELOG-v1.0.30.md. Normal Visual Studio builds no longer execute npm install, so a missing or stale Node.js PATH cannot surface as the opaque MSBuild exit code 9009. The shared Spreadsheet result model is now compiled from a normal C# source file, fixing the SpreadsheetEditorResult CS0246 errors. The preparation command also avoids restoring unused peer packages that caused the lodash.isequal deprecation warning. Run Prepare-SpreadsheetAssets.cmd once from the solution root; publishing still refuses to create an incomplete package when the local Spreadsheet browser files are absent.

v1.0.31 Spreadsheet hibernation startup fix

See CHANGELOG-v1.0.31.md. PublisherStudio now creates %LOCALAPPDATA%\PublisherStudio\SpreadsheetHibernation before DevExpress Spreadsheet hibernation is configured, preventing first-run DirectoryNotFoundException failures. The folder is reused when already present. Node.js remains required only for developers and release-build machines preparing the offline Spreadsheet browser assets; end-user runtime installations do not require Node.js or npm.

v1.0.32 Spreadsheet toolbar workbook loading

See CHANGELOG-v1.0.32.md. Spreadsheet Studio now contains an Open workbook command directly on the DevExpress Home ribbon. It loads XLSX, XLSM, XLS, CSV, TXT, or TSV into the current creation/editing session, updates the workbook name, and reloads the control with a fresh document identifier while retaining the existing drag-and-drop workflow. The import remains local and CSRF-protected. Node.js is still a development/release-build requirement only and is not required on end-user systems.

v1.0.33 workbook scale modes and rotation-aware transforms

See CHANGELOG-v1.0.33.md. PublisherStudio no longer imposes application-level file upload ceilings. Spreadsheet Studio gains an original Open Workbook icon, permanent workbook commands, and dedicated Publisher, Format, and Cells & Data ribbon tabs so essential commands remain directly reachable at compact editor sizes. Spreadsheet and RichEdit text objects now support Natural/Clip, Fit, Fill, and Stretch display modes. Rotated objects resize along their own axes, resize cursors follow the visual handles, connectors update during the gesture, and WordArt plus its freehand path editor follow the actual object proportions.

v1.0.34 text-frame display parity and canvas polish

See CHANGELOG-v1.0.34.md. Text frames now expose Natural/Clip, Fit, Fill, and Stretch directly from their canvas context menu as well as Text Box Tools and Properties. Spreadsheet frames gain an optional worksheet-name badge, the Spreadsheet island places All controls at the far left without injecting another Open command into Home, and rotated resize cursors now match the real visual drag axis.

v1.0.35 complete visualization and web-data workbench

See CHANGELOG-v1.0.35.md. This release adds the complete DevExtreme chart-series catalogue and publisher-focused supplemental data visuals, plus a transport-neutral web binding used by local monolith routes, configurable REST requests, and tokenized webhook inboxes. Open publications are exposed through read-only DTO endpoints rather than mutable Blazor state. Web data keeps an embedded snapshot, refreshes on open or on a configurable polling interval, and can be forced immediately before HTML/video export.

Standalone HTML remains useful with no server: it renders the embedded snapshot and carries the local DevExtreme runtime inside the single exported file. When live retrieval is explicitly enabled, JavaScript can call a CORS-enabled external API or reconnect to PublisherStudio. The generated HTML remembers the loopback origin active at export time; ?publisherApi=http://127.0.0.1:PORT overrides it after a restart or port change. Reconnection uses a per-binding tokenized rows endpoint, including for webhook-backed data. The transport contract deliberately reserves Stream for the later LAN/VLC/provider streaming workbench; no streaming implementation is included yet.

Spreadsheet Studio now labels PublisherStudio's far-left workflow tab Home and renames the built-in, command-dense DevExpress Home tab to All controls, removing the ambiguous duplicate Home labels.

v1.0.36 automatic parsing and spreadsheet selection data

See CHANGELOG-v1.0.36.md. Web/API and webhook snapshots now parse automatically on fetch, save, editor blur, and parsing-option changes. JSON arrays, encoded JSON strings, common wrapper arrays, and nested objects are expanded into reusable columns. All parsed fields are visible in the data-field picker; Boolean values use 1/0 and non-empty text/date values can be counted.

Spreadsheet Studio now includes Create data object. Select a bounded range, review whether the first row contains headers, correct or define the column names, and create an embedded publication data snapshot that is immediately available to charts and data tables.

v1.0.37 DevExtreme runtime-license export repair

See CHANGELOG-v1.0.37.md. The DevExpress browser-asset preparation now generates the official public DevExtreme runtime key from the licensed build identity, validates its version, blocks publish when it is absent, and registers it in the main app, Spreadsheet Studio, and self-contained HTML exports before any DevExtreme component is created. The exported file remains self-contained and end users do not need Node.js or a private DevExpress license.

v1.0.38 stable video and animation timeline

See CHANGELOG-v1.0.38.md. Repeated playback can no longer leave stale animation-frame loops or queued Blazor playhead callbacks behind. Timeline runs are identity-checked end to end, progress updates are coalesced, and extreme pointer movement is bounded before media or animation clips are committed. Existing non-destructive video/audio trimming, clip movement, fades, playback rate, looping, and page-duration behavior are preserved.

v1.0.39 browser-native components and single-file sites

See CHANGELOG-v1.0.39.md and docs/COMPONENT_RUNTIME.md. PublisherStudio now inserts a curated set of browser-native DevExtreme grids, Scheduler, Pivot Grid, forms/editors, menus, galleries, buttons, and layout containers as publication objects. Components bind to publication datasets, direct REST/JSON, or OData; support CRUD and smart cross-component actions; can synchronize across pages; and work in both the preserved interactive-presentation HTML export and a new hash-routed single-file website export. Existing standalone charts remain unchanged.

v1.0.40 larger studios, maps, and movable embedded content

See CHANGELOG-v1.0.40.md and docs/COMPONENT_RUNTIME.md. The main editing studios now use nearly the entire browser viewport. DevExtreme Map and Vector Map are first-class publication components with live data, bundled predefined geographic layers, marker/route bindings, and a click-to-draw vector editor with precise coordinates and GeoJSON import. Text/Docx, spreadsheet, map, and vector-map objects can pan and zoom their visible internal content, and DevExtreme components accept normalized custom CSS classes and inline declarations.

v1.0.41 SVG paths and offline Signal Arrows

See CHANGELOG-v1.0.41.md and docs/ANIMATION_EXPORT.md. Picture Studio can now download self-contained SVG files and edit path nodes precisely. Signal Arrows and Signal Connectors can join objects or exact page positions, emit click/hover gestures, animate an object's inner viewport, highlight spreadsheet cells or chart/HTML parts, control visibility/media/CSS classes, and continue through a chained signal sequence. The runtime is embedded into standalone presentation and website HTML exports, so these interactions work offline without a PublisherStudio server.

v1.0.42 reversible previews and signal resizing

See CHANGELOG-v1.0.42.md and docs/ANIMATION_EXPORT.md. Stop preview now restores object transforms, dimensions, opacity, visibility, CSS classes, and media state after both ordinary animation previews and Signal Arrow/Connector playback. Signals add independent width/height resizing, page-entry playback starts from a clean baseline, and delegated click/hover monitoring survives rerendered DevExtreme, spreadsheet, chart, and custom HTML targets. These behaviors are included in offline single-file HTML exports.

v1.0.43 navigable menus and selectable publication fields

See CHANGELOG-v1.0.43.md. Menu and Context Menu items can target stable publication pages, external URLs, or no navigation without automatically adding pages. Data-driven menus can bind directly to the self-updating Publication pages object. Component Studio now selects source properties and key fields from the active dataset schema, filters behavior settings by component capability, supports horizontal/vertical Menu layout, and avoids loading the DevExtreme bundle twice.

v1.0.44 component movement and editable connector geometry

See CHANGELOG-v1.0.44.md. Editable menus render without a dataset, invalid date values no longer abort DevExtreme rendering, and components can be moved directly from their canvas content while preserving normal clicks. Objects can hold persistent custom connector points anywhere inside their bounds; connector drops can create those points automatically, and selected arrows expose draggable Bézier and route controls.

v1.0.45 component orientation and hidden-panel layout

Vertical DevExtreme menus now use natural row heights instead of DevExtreme's horizontal-menubar height:100% item rule, so every item remains visible in Component Studio, on the canvas, and in offline HTML exports. The shared component runtime also observes host resizing and refreshes DevExtreme dimensions after publication-object resizing, tab/multi-view changes, splitter operations, and hidden-panel activation. See CHANGELOG-v1.0.45.md.

v1.0.46 media data and isolated stream chat

Component Studio now includes a media-first Gallery/Tile View workflow and a DevExtreme Chat component. The built-in Publication media object is generated from pictures, videos, and audio already placed in the publication, so the normal Publisher insert workflow remains the single source of truth and exported media stays self-contained. Gallery and Tile View can also bind ordinary JSON, REST, or OData rows by selecting media type, source, poster, title, and alternative-text properties.

Chat rows can be mapped to platform, channel, message, timestamp, author ID, author name, and avatar fields. Runtime delivery is platform/channel isolated and can be connected later through window.PublisherStudioChatBridge. Offline HTML exports contain the UI and isolation runtime; a real Twitch/YouTube connection still requires the future authenticated streaming adapter. See CHANGELOG-v1.0.46.md and docs/COMPONENT_RUNTIME.md.

v1.0.47 document-first streaming

PublisherStudio now treats live streaming as another output workflow of the publication. The Streaming ribbon and Streaming Studio configure reusable provider profiles, outputs, recording variants, LAN delivery, devices, timing, and hotkeys. Camera, screen, window, browser-tab, capture-device, microphone, system-audio, application-audio, network-media, and Now Playing sources are inserted as normal page objects.

The streaming runtime owns FFmpeg pipelines, segmented recording, global Windows hotkeys, HLS, token-protected LAN browser playback, and ID3 metadata. In the current solution it is compiled directly into PublisherStudio.Web; there is no separately launched Media Host executable. See CHANGELOG-v1.0.47.md, CHANGELOG-v1.0.50.md, and docs/STREAMING.md.

v1.0.48 multi-output streaming completion

See CHANGELOG-v1.0.48.md and docs/STREAMING.md. The publication is captured once as a clean base and composed into independent provider variants only where required. One authored Chat object now renders Twitch-only messages into the Twitch output and YouTube-only messages into the YouTube output, while its answer field remains operator-only. The integrated runtime adds encrypted Chat OAuth storage, Twitch/YouTube receive/send adapters, native capture discovery, Windows process-tree audio loopback, WebRTC browser delivery, HLS, RTSP, and selected output recording without requiring public streaming.

v1.0.49 PublishingSuite interface alignment

See CHANGELOG-v1.0.49.md. Streaming Studio now follows the same ribbon, contextual-command, profile-navigation, settings-card, status, and SubApp footer workflow as the rest of PublishingSuite. Canvas double-click and right-click handling now reaches embedded DevExtreme/media/SVG content reliably, and application-wide explanatory tooltips cover native and dynamically rendered controls. Provider, output, recording, LAN, device, hotkey, publication, and streaming-runtime data flows remain unchanged.

v1.0.50 single-process streaming and capture reliability

See CHANGELOG-v1.0.50.md and docs/STREAMING.md. The former standalone Media Host was folded into PublisherStudio.Web, so native capture, FFmpeg orchestration, recording, provider delivery, Chat, hotkeys, and same-origin browser/WebSocket endpoints now share the main application lifecycle and its dynamically selected loopback port. Native-device refresh no longer calls a fixed 127.0.0.1:17847 service. Context-menu coordinates now preserve browser page coordinates, tooltip stacking follows the active DevExpress overlay, live sources can be activated by double-click or context menu, and the InstallerConsole can detect or install FFmpeg on Windows, macOS, and common Linux distributions. During an update, the installer also removes obsolete standalone Media Host payloads left by older releases.

v1.0.51 pointer ownership and tooltip top layer

See CHANGELOG-v1.0.51.md. Exported DevExtreme charts and components now release stale hover/tooltips when the pointer moves onto another overlapping publication object, while non-interactive decorative shapes, WordArt, and barcodes no longer consume presentation pointer events. Interactive media, components, data visuals, publication actions, and Signal Arrow click/hover sources remain pointer owners. In the main Publisher frame, explanatory tooltips keep one stable owner while the pointer moves through nested SVG or component children and render through the browser top layer so publication objects and DevExpress stacking contexts cannot cover them. Publication and Signal Arrow coordinate data is unchanged.

v1.0.66 compiler-safe reintegration

See CHANGELOG-v1.0.66.md, AGENTS.md, ADR-008 and docs/architecture/system-overview.md. The compiler fixes from Michael's working tree are reintegrated without IDE state, build output, .cr, .vs, node_modules, or Git metadata. Program.cs explicitly imports the Streaming HostedServices namespace for TwitchOAuthMaintenanceService. Streaming Chat and RTSP code use global::System.Text.Encoding because the sibling Services.Streaming.Encoding namespace otherwise shadows the BCL type. A new executable compilation-safety contract checks composition-root namespace visibility and sibling-namespace/framework-type collisions. Runtime behavior, publication format 1.48, Picture Studio format 1.3, and package dependencies are unchanged.

v1.0.65 open interchange, real paths, and WordArt media fills

See CHANGELOG-v1.0.65.md, ADR-007 and docs/architecture/interchange-formats.md. Picture Studio now imports structured SVG/SVGZ objects and layered OpenRaster documents into native vector/raster layers while retaining source groups, hidden layers, paint definitions and transforms where representable. The Path tool is node-based rather than a brush alias. WordArt accepts picture or video fills through the same glyph/path mask and keeps those fills across interactive HTML, print/PDF, raster and SVG exports. PublisherStudio can import OpenDocument Drawing/Presentation pages (.odg, .odp, .fodg, .fodp) into its native page system with explicit compatibility reporting. All adapters use the existing Domain/Services architecture and BCL APIs; no new package dependency was added. Publication format is 1.48; Picture Studio format is 1.3.

v1.0.64 canonical shared contracts

See CHANGELOG-v1.0.64.md, AGENTS.md, ADR-006 and docs/architecture/streaming.md. The duplicate Service-local MediaHostHotkeyEvent left by the v1.0.63 streaming move has been removed; all hotkey producers and consumers now use the single Domain/Streaming record. Repository rules and a dedicated C# contract-ownership test reject Services shadowing Domain/Models types and reject duplicate simple type names exposed through GlobalUsings*.cs. Streaming behavior and publication formats are unchanged. Clean bin/obj in an existing v1.0.63 checkout before rebuilding so Visual Studio drops the removed design-time type.

v1.0.63 shared Services and explicit Hub roots

See CHANGELOG-v1.0.63.md, AGENTS.md, and docs/architecture/streaming.md. The duplicate Backend root has been removed. Controllers are the normal request-driven start of the backend, persistent Chat/WebRTC entry roles are under Hubs, and reusable FFmpeg, capture, provider, LAN, metadata, hotkey and session work is under Services/Streaming. Components, Controllers, Hubs and HostedServices can reuse those Services directly. Global hotkeys are now a reusable Service with a thin HostedService lifecycle adapter, and architecture tests reject a returning Backend root or Services depending back on UI/entry/lifecycle roots. All streaming routes and runtime behavior remain compatible.

v1.0.62 architecture contract and streaming restoration

See CHANGELOG-v1.0.62.md, AGENTS.md, and docs/architecture/streaming.md. This release introduced the first repository architecture contract, UseCases subnamespace rule, controller-owned main routes and interchange capability matrix. Its initial separate Backend placement was corrected by v1.0.63; current contributors must follow the v1.0.63 AGENTS.md rule that reusable implementation belongs to Services and persistent connection entry roles belong to Hubs.

v1.0.61 stable exact zoom control

See CHANGELOG-v1.0.61.md. The mainframe zoom slider now uses deterministic percentage values and commits only when a drag finishes, so a Blazor canvas rerender cannot pull the native thumb away from the pointer. Plus/minus use exact 5% steps, an editable percentage field accepts exact values, and a dedicated 100% reset is available. Both canvas renderers continue to use live text/vector content rather than bitmap snapshots, which is why Chromium/Edge can keep both modes sharp on UHD displays. Publication format remains 1.47.

v1.0.60 deterministic Gallery controls and selectable zoom rendering

See CHANGELOG-v1.0.60.md. Gallery navigation controls in the main publication frame no longer share a pointer sequence with object dragging: selected component controls own their clicks, designer swipe recognition is disabled, and the current item is retained across harmless component rerenders. HTML export keeps native Gallery swipe and animation. The View > Zoom ribbon now switches between Sharp CSS layout (default) and the previous Compact transform renderer, and the choice is saved with the publication/template. Professional Components use the transform-compatible path in either mode to protect DevExtreme pointer and layout calculations, while ordinary document content can use sharp CSS rerasterization. Publication format is 1.47.

v1.0.59 UHD workspace, provider-safe maps, and chart mapping

See CHANGELOG-v1.0.59.md. The editor uses Chromium CSS layout zoom when available, so text, RichEdit output, native media controls, and Professional Components are rerasterized at high canvas zoom instead of permanently enlarging a low-resolution transformed layer. Provider Map is now opt-in: a supported provider and its own API key are required before Component Studio can apply the component or the browser runtime can make a provider request. The bundled Vector Map remains the keyless/offline choice. Map viewport changes are committed only after a real pointer, touch, wheel, or control-bar gesture finishes, preventing the zoom control from fighting publication rerenders. Chart Studio adds typed argument axes, repeated-category aggregation, point sorting, numeric-measure guidance, and automatic field mapping. Main creative dialogs use the available viewport with one equal shadow gap on every side. Publication format is 1.46.

v1.0.58 explicit Map and Vector Map mouse modes

See CHANGELOG-v1.0.58.md. Professional Component maps now expose two deterministic designer modes: Move map object moves the publication frame while native map gestures are blocked; Pan / zoom map content gives pointer and wheel ownership only to the selected map. The active mode is shown in the canvas mouse indicator, Component Tools ribbon, and context menu. Selection changes exit content mode, unselected maps cannot keep panning, and manual center/zoom changes are saved with the publication. Export and presentation interaction paths are unchanged.

v1.0.57 uniform editor zoom

See CHANGELOG-v1.0.57.md. Canvas zoom now scales each complete publication object from a stable 96-DPI authored layout. RichEdit text keeps its line wrapping, native audio/video controls shrink and grow with the object, and WordArt, spreadsheets, barcodes, data visuals, live sources, and Professional Components follow the same zoom as pictures. Movement, resizing, snapping, connector geometry, and export rendering remain on their established paths.

v1.0.56 repeatable preview, publication settings, and map drag stability

See CHANGELOG-v1.0.56.md. Repeated animation Preview runs now restart from the authored element transforms instead of stacking the previous run. Standard canvas settings such as zoom, rulers, grid, guides, snapping, spacing, and export DPI are saved with publications and templates. Streaming routing, recording, LAN, and hotkey settings stay in an encrypted local per-publication store and are omitted from shared publication JSON. Designer-mode Professional Components maps no longer pan their internal map content while the publication frame is dragged; exported and presentation maps remain interactive.

v1.0.55 offline system fonts and explicit stream stops

See CHANGELOG-v1.0.55.md and docs/STREAMING.md. WordArt, Picture Studio, RichEdit, Spreadsheet Studio, and their font selectors now read installed font families from the local operating system without contacting an online font service. Editable selectors still accept manual font-family values. Twitch OAuth errors remain visible in the reserved authorization window, and the Streaming ribbon now provides separate stop commands for provider streaming, recording, and the complete session. Final MediaRecorder chunks are drained before ingest sockets close.

v1.0.54 resilient installer and FFmpeg provisioning

See CHANGELOG-v1.0.54.md. The setup helper now survives slow or intermittent GitHub/CDN transfers by retrying release metadata, resuming partial release assets, validating cached ZIPs, and staging both payloads before modifying an existing installation. FFmpeg provisioning is pinned to the WinGet community source on Windows, has visible heartbeat output and bounded timeouts, retries once through the package-manager cache, and can no longer keep the installer waiting indefinitely. PublisherStudio remains usable when optional FFmpeg provisioning fails and FFmpeg can be installed later from Streaming Studio or PublisherStudio.Setup --install-ffmpeg.

v1.0.53 Twitch OAuth and ingest selection

See CHANGELOG-v1.0.53.md and docs/STREAMING.md. Streaming Studio now supports Twitch public-client Device Code OAuth alongside the unchanged manual stream-key workflow. It retrieves the authorized broadcaster identity and stream key, protects OAuth/refresh credentials with the machine profile store, validates sessions at startup and hourly, rotates refresh tokens, and can select the lowest-latency reachable endpoint from Twitch's official ingest list. A registered Twitch public application Client ID is required.

Other providers remain on their existing manual profiles until a provider-specific OAuth and stream-provisioning adapter is implemented; PublisherStudio does not present a generic OAuth option that cannot actually complete the provider's official flow.

v1.0.52 standalone visual tooltip coordinates

See CHANGELOG-v1.0.52.md. Self-contained presentation and site exports now keep DevExtreme visual tooltips inside the transformed publication object. Doughnut/pie charts and the other live visual types therefore preserve tooltip-to-point alignment while the exported page is centered, fitted, scaled, or animated. Authoring behavior, pointer ownership, overlap cleanup, Signal Arrow geometry, and document coordinates are unchanged.

v1.0.67 interpolation-safe compiler correction

See CHANGELOG-v1.0.67.md, AGENTS.md, ADR-008 and VALIDATION.md. The v1.0.66 namespace-collision repair is corrected so global:: is no longer placed directly in an interpolated-string hole. Streaming Chat and RTSP use the explicit TextEncoding alias, and RTSP calculates SDP content length before formatting the header. The compilation-safety contract now rejects the exact parser trap that produced CS0103. Runtime behavior, publication format 1.48, Picture Studio format 1.3, and package dependencies remain unchanged.

v1.0.84 interchange compiler compatibility

VideoLayerInterchangeService no longer depends on Math.Hypot, uses a numerically stable SDK-compatible Euclidean distance helper, passes concrete polygon lists through the hot resampling path, and uses C# collection expressions consistently. This clears the reported CS0117, CA1859 and IDE0305 diagnostics without changing OpenSCAD, HTML canvas, morphing or temporal-selection behavior. See CHANGELOG-v1.0.84.md.

v1.0.83 temporal selection layers and 3D HTML interchange

Committed Video Studio ranges can become their own time-bound effect layers. Polygon points retain selection ownership for property editing and exact deletion. Layers can morph between two drawn regions as animated 3D blobs, generate OpenSCAD interchange, and move directly between Video Studio, Mainframe, Panel Studio and HTML export. Effects now display native, canvas-runtime or render-before-export compatibility. See CHANGELOG-v1.0.83.md.

v1.0.82 OpenRaster and media frontend completion

The missing OpenRaster parsing/decoding helpers are restored, including strict SVG/SVGZ handling and PNG dimension reads. Media Converter Studio now routes image, audio, and video sources/results to their matching Studio; Audio Studio can send its selected trimmed clip to the converter; and conversion-job right-click actions are wired to the selected job. See CHANGELOG-v1.0.82.md.

Panel/Div Studio and optional FFmpeg conversion

PublisherStudio includes reusable authored panels and dashboards built from the same components used on publication pages. v1.0.81 adds a visual composer with a DevExpress Ribbon, draggable pre-rendered component palette, live arrange/test modes, move/resize handles and reusable document-local modules that preserve complete component, data-source, chart and web configuration. Panels can contain multiple navigable views, nested panels, live KPI/data components, streaming inputs, media, and sandboxed HTML/CSS/optional JavaScript. They remain interactive in Mainframe preview and HTML exports.

Media Converter Studio can use a separately installed FFmpeg executable to create browser-oriented derivatives for media the browser cannot decode directly. Its shared service/controller API supports profiles, trim ranges, arbitrary dimensions, scaling, frame rate, codecs, quality/bitrate, pixel format, audio layout/loudness, metadata, filter graphs and protected advanced arguments. Mainframe exports can open directly in the converter; completed output can return to Mainframe or open in Picture Studio, Audio Studio, or Video Studio. Configure PublisherStudio:FFmpegPath, set PUBLISHERSTUDIO_FFMPEG, or place FFmpeg on PATH. PublisherStudio does not bundle FFmpeg.

PublisherStudio intentionally defines no product-level file-size quota for local imports and conversion uploads. The real ceiling is the user's available memory, temporary storage, browser/OS behavior and installed FFmpeg build; structural archive, XML and sandbox validation remains enforced. See CHANGELOG-v1.0.81.md, CHANGELOG-v1.0.82.md, docs/architecture/panel-composer-media-workflow.md, and docs/architecture/media-component-frontend-review-v1.0.82.md.