Mac build fix arm64#6045
Open
jashanpratapsingh wants to merge 284 commits into
Open
Conversation
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>
…s/setup-python-6'
…s/upload-artifact-6'
…n/actions-label-merge-conflict-3.0.3'
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>
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)
|
Merge conflicts have been detected on this PR, please resolve. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.