Adopt Shotcut's melt invocation shape; show version in the nav drawer #9
Loading…
Reference in a new issue
No description provided.
Delete branch "d/melt-invocation"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Every render now goes through a render-only XML in system temp with absolute media paths and the avformat consumer embedded as an XML element, invoked as melt -verbose -progress2 -abort xml:, with the multi consumer engaged when resolution or frame rate overrides the project profile. Smoke-tested against the installed melt including an ffprobe-verified 720p30 override render. Also shows the app version at the bottom of the nav drawer like the sibling apps.
🤖 Claude AI Code Review
Summary
Refactors melt invocation to Shotcut's XML-consumer shape and adds an app version display in the nav drawer. Well-organized and documented change.
Code Quality
⭐⭐⭐⭐☆
Clear separation of concerns and excellent comments explaining the Shotcut-parity rationale.
Issues
🟡 MeltRenderService.cs —
Uri.EscapeDataStringmay over-escape the path forxml:URL.EscapeDataStringpercent-encodes/,\, and:(drive-letter colon on Windows), which melt'sxml:producer parser may not decode back to a valid filesystem path. Shotcut usesQUrl::toPercentEncodingwith reserved chars excluded (it does not encode path separators). Verify melt actually opens the resulting URL on Windows paths likeC:\Temp\...— the smoke test was on a single platform. Consider escaping only problematic chars (&,#, spaces) rather than the whole path.🟡 MeltRenderService.cs —
?multi:1appended to the percent-encoded URL. Since the whole path was escaped, any?in the path would already be encoded, but appending the query afterUri.EscapeDataString(renderXmlPath)means the URL isxml:<fully-escaped-path>?multi:1. If melt treats everything afterxml:as the file argument (not a real URL), the?multi:1suffix may be interpreted as part of the filename and fail. Confirm the multi-consumer path was actually exercised — the smoke test mentions a 720p30 override render, so likely OK, but the path-escaping interaction is worth double-checking.🟢 MeltRenderService.cs —
MakeResourcePathsAbsoluteiteratesproject.Chainand appendsproject.Producer?.Property. Chains/producers can also carry proxy or alternateresourceproperties; if a producer has multipleresourceentriesFirstOrDefaultonly rewrites one. Likely fine given MLT structure, but verify producers don't nest additional resources needing rewrite.🟢 AppVersion.cs —
Assembly.GetEntryAssembly()can return null in some hosting scenarios (already handled via fallback). Fine.Uri.EscapeDataStringover-escaping of the render XML path (path separators, drive-letter colon) so melt'sxml:producer can open it cross-platform; escape only reserved chars if needed.?multi:1is not swallowed into the escaped path argument by melt.📊 Tokens: 10609 input + 915 output | 💰 Cost: ~$0.0759
Generated by Claude Opus 4.8 via Gitea Actions