Skip to content

Mac build fix arm64#6045

Open
jashanpratapsingh wants to merge 284 commits into
OpenShot:developfrom
Zenvi-pro:mac-build-fix-arm64
Open

Mac build fix arm64#6045
jashanpratapsingh wants to merge 284 commits into
OpenShot:developfrom
Zenvi-pro:mac-build-fix-arm64

Conversation

@jashanpratapsingh

Copy link
Copy Markdown

No description provided.

vboxuser and others added 30 commits February 8, 2026 23:58
The release job now runs with `if: always()` so that successful artifacts
(e.g. Linux .deb/.AppImage, Windows .exe) are published even when another
platform (e.g. macOS) fails. At least one artifact must exist or the release
job itself will fail.

Bump version to 1.0.14 to trigger a fresh tag-based release run.

Co-authored-by: Cursor <cursoragent@cursor.com>
The macOS Homebrew cask for OpenShot bundles native bindings compiled against
its own Python, making them ABI-incompatible with the CI Python 3.11. Rather
than hard-failing, freeze.py now tries `import openshot` and only includes
the package when it succeeds (Linux PPA, Windows via ZENVI_OPENSHOT_PYROOT).
When the import fails (macOS CI), the package is excluded and cx_Freeze
proceeds normally.

Also simplify the macOS workflow: stop trying to locate unusable cask bindings.

Bump version to 1.0.15 to trigger a fresh tag-based release run.

Co-authored-by: Cursor <cursoragent@cursor.com>
macOS: Switch from fragile `bdist_mac` to plain `build` + manual .app bundle
construction. This avoids cx_Freeze's mac post-processing failures (rpath
fixing, code signing) that were crashing after copying dylibs.

Release: Download each platform's artifacts independently so a failed platform
doesn't block the others from being published. Clean up release notes with
proper title and formatting.

Bump version to 1.0.16.

Co-authored-by: Cursor <cursoragent@cursor.com>
The installed Windows app crashes at startup with:
  ModuleNotFoundError: No module named 'pydantic.deprecated.decorator'

cx_Freeze doesn't detect pydantic's lazily-imported subpackages or the
langchain ecosystem that sentry_sdk pulls in at startup. Explicitly add
pydantic, pydantic.deprecated, pydantic_core, and all langchain packages
to python_packages in freeze.py.

Bump version to 1.0.17.

Co-authored-by: Cursor <cursoragent@cursor.com>
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4 to 7.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](actions/download-artifact@v4...v7)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [eps1lon/actions-label-merge-conflict](https://github.com/eps1lon/actions-label-merge-conflict) from 2.1.0 to 3.0.3.
- [Release notes](https://github.com/eps1lon/actions-label-merge-conflict/releases)
- [Changelog](https://github.com/eps1lon/actions-label-merge-conflict/blob/main/CHANGELOG.md)
- [Commits](eps1lon/actions-label-merge-conflict@v2.1.0...v3.0.3)

---
updated-dependencies:
- dependency-name: eps1lon/actions-label-merge-conflict
  dependency-version: 3.0.3
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 6.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](actions/upload-artifact@v4...v6)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 3 to 6.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](actions/setup-python@v3...v6)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Delete auto_updater.py, update_installer.py, and version.py modules.
Remove all auto-update integration points from app.py (startup/shutdown),
launch.py (staged update application), and main_window.py (signals,
handlers, version check). Clean up unused GITHUB_REPO and UPDATE_PATH
from info.py. The auto-update feature will be re-implemented from
scratch on this branch.

Co-authored-by: Cursor <cursoragent@cursor.com>
- Fixed Manim detection to work in virtualenv by trying import first before shutil.which
- Fixed Unicode encoding errors by adding encoding='utf-8' and errors='replace' to subprocess
- Changed manim command to use sys.executable -m manim for venv compatibility
- Added critical error detection to prevent LLM from rephrasing installation errors
- Removed debug instrumentation after successful testing

Co-authored-by: Cursor <cursoragent@cursor.com>
…unware features

Features added from mahima:
- AI morph transition creation between two clips
- AI object replacement in video frames (e.g., replace water bottle with Red Bull can)
- Video editor utilities for frame-level editing
- Improved runware processing with padding for segments <3s
- Enhanced video agent to support object replacement tasks

Merged with conflict resolution in root_agent.py to preserve all six tools
while adding object replacement capabilities to video agent.

Co-authored-by: Cursor <cursoragent@cursor.com>
…ment planning

This commit introduces a comprehensive AI Directors system that provides expert
feedback and actionable improvement plans for video content from multiple perspectives.

Core Components:
- Director orchestration and consensus system
- Plan creation, review, and execution pipeline
- Director marketplace for discovering and installing directors
- OpenAI TTS integration for narration and voice overlay

Directors System:
- director_agent.py: Individual director AI agents with specialized expertise
- director_orchestrator.py: Coordinates multiple directors and builds consensus
- director_consensus.py: Analyzes feedback from multiple directors
- director_plan.py: Creates structured, actionable improvement plans
- director_tools.py: Tools for directors to analyze videos and projects
- director_loader.py: Dynamic loading of director configurations
- director_marketplace.py: Browse and install community directors

Built-in Directors:
- YouTube Director: Optimizes for YouTube engagement and retention
- GenZ Director: Ensures content resonates with Gen Z audience
- Cinematic Director: Provides filmmaking and cinematography feedback

UI Components:
- Director Panel: Browse directors, view analysis, and manage feedback
- Plan Review Panel: Review and approve improvement plans before execution
- Director Marketplace: Discover and install new directors

TTS Integration:
- ai_tts_tools.py: OpenAI TTS tools for voice generation
- tts_generation/: TTS client for narration and voice overlays
- Settings for voice selection, model, and speed control

Plan Execution:
- ai_plan_executor.py: Executes director improvement plans
- Automatic or manual execution modes
- Progress tracking and error handling

Integration:
- Connected to root agent via invoke_directors tool
- Integrated into main window with dockable panels
- Settings added for TTS voice, model, and speed preferences

Test Coverage:
- test_directors_system.py: Tests for director loading and execution

Co-authored-by: Cursor <cursoragent@cursor.com>
- New plan_graph package (src/plan_graph): builder, storage, dock, ui
- Hook into root agent and MainThreadToolRunner; SQLite plan history
- Plan Graph dock (View → Docks → Plan Graph)
- libopenshot minimum 0.3.2; BUILD_AND_RUN and breakdown doc
This merge integrates the plan-graph feature which provides:
- Agent edit hierarchy (root → branches → steps) visualization
- Plan graph builder, storage, and dock UI
- Integration with existing AI agents (video, manim, voice_music, music)
- Documentation: BUILD_AND_RUN.md and PLAN_GRAPH_FEATURE_BREAKDOWN.md

Conflict resolutions:
- root_agent.py: Combined AI object replacement feature with plan_graph tracking
- info.py: Added libopenshot version comment
- main_window.py: Kept both Director Panel/Plan Review AND Plan Graph dock

All existing features remain intact including:
- AI Directors system
- Multi-agent routing
- Object replacement
- Voice/music generation

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Enhanced director agent functionality
- Updated director panel styling and behavior
- Added director feature enhancements documentation
- Added test file for directors UI

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
New Features:
- Created ai_transitions_tools.py with 4 specialized tools:
  * list_transitions_tool: Browse all 412+ transitions
  * search_transitions_tool: Find transitions by name/style
  * add_transition_between_clips_tool: Apply transitions between clips
  * add_transition_to_clip_tool: Add fade in/out effects

- Added run_transitions_agent() to sub_agents.py
  * Specialized agent with transition expertise
  * Combines transition tools with clip listing tools
  * Provides workflow guidance for users

- Updated root_agent.py routing:
  * Added invoke_transitions_agent tool
  * Updated system prompt to include transitions
  * Integrated with plan-graph tracking

Documentation:
- TRANSITIONS_AGENT_GUIDE.md with complete usage guide
- Examples, troubleshooting, and verification steps

Transitions Available:
- Common: fade, circle in/out, wipe (4 directions)
- Extra: 405 artistic effects (ripples, blurs, blinds, etc.)

Testing:
- Verified all imports load successfully
- Tested list and search functionality
- Confirmed root agent integration

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Comprehensive test suite with 7 tests (all passing)
- Complete implementation summary with statistics
- Verification that all 412 transitions are accessible
- Documentation of architecture and usage

Test Results: 7/7 PASSED ✅
- Imports: ✓
- List transitions: ✓ (412 found)
- Search: ✓ (fade, wipe, blur, circle)
- LangChain tools: ✓ (4 tools)
- Root agent integration: ✓
- File existence: ✓
- System prompt: ✓

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
jashanpratapsingh and others added 28 commits March 30, 2026 01:26
feat: .zvn as canonical project ext, legacy .osp/.flow, explicit time-range AI slice
- freeze.py: add "websocket" to python_packages so websocket-client is
  explicitly included in the cx_Freeze bundle
- freeze.py: use dirs_exist_ok=True in copytree so the build doesn't
  fail when both src/ and openshot_qt/ directories already exist
- build-mac-dmg.sh: strip quarantine attrs, remove non-code files,
  fix file permissions (strip +x from non-binaries before codesign),
  remove --deep from codesign to avoid "bundle format unrecognized" errors
- zenvi.entitlements: remove get-task-allow (debug entitlement not
  needed in release builds)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fixes sign-in URL: old release had zenvi.app hardcoded, new build uses
zenvi.pro. This version bump triggers a new CI release with the fix.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Merges arm64 CI fix, auth token expiry, sign-out option, and Linux
build fixes from v1.0.128 into release branch alongside credits system,
websocket support, and zenvi.pro sign-in URL fix.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sphinx workflow was failing with "No rule to make target html" because
doc/ had conf.py but was missing the Makefile and root index.rst.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
CI was failing with "No such file or directory" because src/tests/ and
query_tests.py never existed in this repo. Added smoke tests covering:
- info.py version format, product name, backend URL (zenvi.pro check)
- settings module loads and default settings file exists
- auth_manager ZENVI_WEBSITE points to zenvi.pro not zenvi.app

All 8 tests pass locally with -platform minimal.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- qt.conf: add LibraryExecutables path so Qt finds QtWebEngineProcess
  helper at share/QtWebEngineProcess.app (where cx_Freeze bundles it)
- launch-mac: set QTWEBENGINEPROCESS_PATH, QTWEBENGINE_DISABLE_SANDBOX,
  QT_MAC_WANTS_LAYER=1 (required for OpenGL widget rendering on macOS 12+)
- build-mac-dmg.sh: symlink MacOS/resources and MacOS/translations to
  PyQt5/Qt5 location so QtWebEngine finds its .pak files at default path
- bump to v1.0.130

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
AutoUpdater was wired to signals but never instantiated or started —
so the background check never ran. Add AutoUpdater() start() call in
main_window after signals are connected. Bump to v1.0.131.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
auto_updater.py referenced info.UPDATE_PATH which was never defined,
causing an AttributeError at import time that silently crashed the app
on launch. Use info.USER_PATH + 'updates' instead (matches
update_installer.py). Bump to v1.0.132.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…r handling

- info.py: add GITHUB_REPO = "Zenvi-pro/zenvi-core" to fix auto-updater crash
  (AttributeError: module 'classes.info' has no attribute 'GITHUB_REPO')
- preview_thread.py: add detailed logging to initPlayer() so we can see
  if renderer address is obtained, SetQWidget succeeds, and present signal
  connects; wrap Start() calls in try/except so exceptions are logged (not
  silently swallowed by PyQt5 slot mechanism in the background thread)
- video_widget.py: add per-second debug log in present() to confirm frames
  are arriving; skip null/empty QImages instead of storing them
- release.yml: add Apple Developer certificate installation step for signing

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- paintEvent: move mutex.lock() code inside try/finally so any exception
  in update_title() or other pre-paint logic doesn't leave the mutex locked
  (which would cause every subsequent paintEvent to deadlock)
- paintEvent: explicitly convert pix_size*scale to QSize(int,int) to avoid
  QSizeF type issues on Retina displays (devicePixelRatioF() = 2.0)
- wrap update_title() in try/except so a stale preview_thread reference
  can never crash or deadlock the video rendering loop

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add chat tab bar with close, unread, and processing indicators; auto-grow textarea\n- Slash-command palette for timeline actions (add track, split, export, captions, transition)\n- Add track_display helpers mapping UI track index to OpenShot layer_number\n- Wire tool handlers, OpenShot tools, API client, and ai_chat_ui for the new UX

Made-with: Cursor
Prevent accidental commits of local Debian build artifacts.

Made-with: Cursor
… valid cert

- add id:cert + continue-on-error:true to cert install step
- gate Sign .app bundle and Sign/notarize DMG on steps.cert.outcome==success
- bump VERSION to 1.0.134

Both macOS builds failed in v1.0.133 because APPLE_CERT_PASSWORD secret does
not match the .p12 cert. Previously (<=v1.0.132) no signing step existed.
This restores build so unsigned DMGs are produced when cert is unavailable.
v1.0.133 replaced the working per-binary magic-bytes signing (from v1.0.132)
with cert-based bundle signing. The Apple cert password is wrong so signing
was never applied, leaving install_name_tool-modified dylibs unsigned and
causing SIGKILL (Code Signature Invalid) at runtime.

Changes:
- Restore assembly step: per-binary ad-hoc signing via magic byte detection
  (same approach that produced working DMGs in v1.0.130-1.0.132)
- Remove broken symlink step (MacOS/lib -> ../../Resources/lib was wrong path)
- Keep cert install step as optional (continue-on-error: true)
- Gate bundle-level cert signing and notarization on cert success
- Bump VERSION to 1.0.135
- timeline.py: ClearAllCache(True) + refreshFrameSignal after ApplyJsonDiff
  so libopenshot serves updated frames after clip is added
- preview_thread.py: player.Reader(timeline) in refreshFrame to pick up
  new clip data; Play+Pause after Seek when paused to force present() signal
- api_client.py: SSL bypass for non-production backend WebSocket connections
- video_widget.py: demote looping-points log spam from info to debug
- tool_handlers.py: add watch_clip_and_play() — imports Feral trailer,
  adds to timeline, seeks to start, starts playback. Registered as
  watch_clip_tool in TOOL_HANDLERS.
- ai_chat_ui.py: local command interceptor _try_local_command() handles
  "watch clip", "play the feral", "show me the clip" etc. without backend.
  Wired into both send_message() and _handle_web_send_message().
- tests/smoke_test.py: first smoke test file (PyQt5, structure, video,
  conflict markers, info constants, ZenviBackendClient SSL flag).
- info.py: bump to v1.0.136; GITHUB_REPO now reads ZENVI_GITHUB_REPO env.
Wires the new "token" event into the chat UI so assistant responses
paint incrementally as the LLM generates them, instead of appearing all
at once when the turn finishes.

- ZenviBackendClient.send_message_ws accepts on_token(text)
- AIChatWorker emits token_received(str)
- AIChatWindow.appendOrUpdateStreamingMessage / finalizeStreamingMessage
  paint a placeholder bubble that's swapped for the markdown-rendered
  message once assistant_response arrives.

Made-with: Cursor
Resolves black-preview / no-playback on macOS 26 / arm64 / FFmpeg 8.
Root cause: libopenshot v0.5.0 uses legacy SWR option API silently ignored
by FFmpeg 8 (FrameMapper.cpp). swr_init() fails -> playback clock never
starts -> no video frames -> black preview, even with v1.0.136 cache fixes.

- installer/mac-patches/libopenshot-v0.5.0-mac.patch (5 fixes)
- installer/mac-patches/libopenshot-audio-v0.5.0-mac.patch (AGL removal)
- scripts/build-mac-libopenshot.sh: full automation (brew, clone, patch,
  build, install_name_tool to share PyQt5 Qt and avoid dual-Qt segfault)
- agent-log.md: root cause + bonus findings documented
Single source of truth: CI's macOS libopenshot build now applies the same
patch files used by scripts/build-mac-libopenshot.sh locally. Previously
the macOS section had inline sed/python patches that lacked the SWR
channel-layout fix — that's why CI-built DMGs had broken playback.

- libopenshot-audio: apply mac-patches/libopenshot-audio-v0.5.0-mac.patch
  (removes -framework AGL, gone since macOS 10.14)
- libopenshot: replace 30+ lines of inline patches with one git apply
  of mac-patches/libopenshot-v0.5.0-mac.patch (covers FFmpeg 8 compat
  AND the critical SWR channel-layout fix)
- Keep OpenMP-disable + stub omp.h (CI environment workaround, not
  applicable to local builds which use real libomp)
- Bump cache key v2 → v3-swr-chlayout so cached broken binaries don't
  shadow the new build
agent-log.md was an AI-agent session scratchpad: developer-local paths,
cycle-by-cycle debugging notes, certificate-handling discussion, and
internal workflow rules. Not project documentation and not appropriate
for a release branch.

Removes the file and adds an ignore block covering similar agent-state
artifacts (agent-log.md, AGENTS.md, CLAUDE.md, .cursor/, .claude/) so it
cannot be re-committed.

Co-authored-by: Cursor <cursoragent@cursor.com>
feat(chat): render streaming tokens from backend WebSocket
chore: stop tracking agent-log.md (internal AI scratchpad)
chore(sync): align mac-build-fix-arm64 with release/v1.0.20 (streaming + v1.0.153)
@github-actions github-actions Bot added the conflicts A PR with unresolved merge conflicts label May 21, 2026
@github-actions

Copy link
Copy Markdown

Merge conflicts have been detected on this PR, please resolve.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

conflicts A PR with unresolved merge conflicts

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants