Skip to content

Add native installers and independent arena annotation workflow - #1

Merged
Andrianarivelo merged 1 commit into
masterfrom
main
Oct 19, 2026
Merged

Andrianarivelo merged 1 commit into
masterfrom
main

Conversation

@Andrianarivelo

Copy link
Copy Markdown
Collaborator

No description provided.

Copilot AI balanced review requested due to automatic review settings October 19, 2026 16:02
@Andrianarivelo
Andrianarivelo merged commit 2ba3739 into master Oct 19, 2026
3 of 9 checks passed

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Unresolved annotation-state, installation-recovery, and platform-compatibility issues affect reliable use.

7 open issues
What changed in this PR

Adds native installation and updates, plus independent arena annotation sessions within the existing video editor.

Changes:

  • Adds cross-platform installers, release packaging, and native smoke checks.
  • Introduces arena detection, crop export, isolated annotations, and progress tracking.
  • Improves frame caching and atomic saves, with regression tests and preview tools.
File Description
tools/​preview_arena_workflow.py Generates synthetic UI previews.
tools/​plot_export_benchmark.py Plots paired export timings.
tests/​test_video_frame_integrity.py Checks frame identity and cache bounds.
tests/​test_arena_workflow.py Tests arena isolation and failure handling.
tests/​test_arena_backend.py Tests export integrity and benchmarks.
requirements.txt Adds FFmpeg and headless OpenCV dependencies.
README.md Documents installation and arena workflows.
installer/​test_backend.py Tests installation transactions and safeguards.
installer/​setup.spec Packages graphical Setup.
installer/​native_smoke.py Verifies packaged installation and application.
installer/​INSTALLATION.md Documents native builds and updates.
installer/​gui.py Adds installation and update interface.
installer/​entry.py Provides packaged Setup entry point.
installer/​build.py Builds native release artifacts.
installer/​backend.py Implements installation, downloads, and shortcuts.
installer/​application.spec Packages application resources and dependencies.
installer/​app_entry.py Sets writable storage and runs smoke checks.
installer/​__main__.py Enables source-based Setup launch.
installer/​__init__.py Defines installer package.
ethoscore.py Integrates arena sessions and save guards.
annotator_libs/​video_handling.py Isolates decoders and bounds frame caching.
annotator_libs/​arena_workflow.py Manages arena selection and persistence.
annotator_libs/​arena_ui.py Adds crop editing and export controls.
annotator_libs/​arena_model.py Defines geometry, detection, and manifests.
annotator_libs/​arena_export.py Exports and validates cropped videos.
annotator_libs/​annotation_logic.py Saves annotations atomically.
.gitignore Excludes build and validation artifacts.
.github/​workflows/​publish.yml Builds, validates, and publishes native packages.

Review effort: Balanced

if os.name == "nt":
os.rename(staged, destination)
else:
os.link(staged, destination)
def prepare_video_change(self):
"""Save the current arena before switching; failed saves cancel the switch."""
self._settle_arena_input()
if self.video_path and not self.view_only_mode and (self.active_arena() is not None or self.annotations):
Comment on lines +404 to +405
'range_labeling_start', 'gamepad_button_states'):
getattr(self, name).clear()
Comment thread ethoscore.py
if self.view_only_mode:
return

self.mark_arena_edited()
Comment thread installer/backend.py
def atomic_text(path: Path, text: str) -> None:
"""Replace a small control file atomically, keeping partial writes invisible."""
temporary = path.with_name(path.name + "." + uuid.uuid4().hex + ".tmp")
temporary.write_text(text, encoding="utf-8")
Comment thread installer/backend.py
Comment on lines +183 to +186
stage.rename(final)
stage = None
user_data = destination / "user-data"
user_data.mkdir(exist_ok=True)
Comment thread installer/backend.py
Comment on lines +190 to +191
atomic_text(destination / MARKER, json.dumps(state, indent=2))
_write_launcher(destination, state)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants