release: v0.1.0 - Production Release
Release Date: 2026-10-11 New Documents: - CHANGELOG.md - Complete version history - RELEASE_v0.1.0_INSTALLATION_GUIDE.md - Installation guide for admin team - README.md - Project overview and quick start - build_release.sh - Automated build script Features: - ✅ Search pagination with "Load More" button - ✅ Library displays 118 files correctly - ✅ Scene VLM status visualization - ✅ Advanced Mode toggle - ✅ Complete architecture documentation Release Package: - tar.gz archive with all necessary files - Startup/stop scripts - Installation guide - Checksum verification For Admin Team: - See RELEASE_v0.1.0_INSTALLATION_GUIDE.md - Run ./build_release.sh to create package - Package includes: frontend, proxy, docs, scripts
This commit is contained in:
237
CHANGELOG.md
Normal file
237
CHANGELOG.md
Normal file
@@ -0,0 +1,237 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
All notable changes to Momentry Studio will be documented in this file.
|
||||||
|
|
||||||
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [0.1.0] - 2026-10-11
|
||||||
|
|
||||||
|
### ✨ Features
|
||||||
|
|
||||||
|
#### Search Pagination
|
||||||
|
- **Initial search returns top 5 results** for faster response
|
||||||
|
- **"Load More" button** to fetch additional 10 results progressively
|
||||||
|
- Supports all 5 search modes: Keyword, Semantic, Visual, Agent, People
|
||||||
|
- **Deduplication logic** ensures no duplicate results across pages
|
||||||
|
- **Remaining count display** shows how many results are left
|
||||||
|
|
||||||
|
#### Library Management
|
||||||
|
- **118 files display** correctly in Library view
|
||||||
|
- **Unregistered files** show complete metadata (file_size, modified_time)
|
||||||
|
- **Scene VLM status** always visible with "—" fallback for no data
|
||||||
|
|
||||||
|
#### Pipeline Progress
|
||||||
|
- **10-stage pipeline visualization**
|
||||||
|
- Scene VLM stage added (3% weight)
|
||||||
|
- Real-time progress tracking
|
||||||
|
|
||||||
|
#### Advanced Mode Toggle
|
||||||
|
- 🔒/🔓 Toggle button for advanced features
|
||||||
|
- Controls visibility of QC buttons, marks, and advanced controls
|
||||||
|
- Persists in localStorage
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🐛 Bug Fixes
|
||||||
|
|
||||||
|
#### Search Pagination
|
||||||
|
- Fixed duplicate results in "Load More" button
|
||||||
|
- Changed Visual search from `page` to `offset` parameter
|
||||||
|
- Implemented `existingIds` Set for deduplication
|
||||||
|
|
||||||
|
#### Library Display
|
||||||
|
- Fixed file count showing only 20 instead of 118
|
||||||
|
- Corrected API parameter name: `limit` → `page_size`
|
||||||
|
- Fixed `per_page` → `page_size` mismatch
|
||||||
|
|
||||||
|
#### Unregistered Files
|
||||||
|
- Added `file_size` and `modified_time` to FileItem structure
|
||||||
|
- Fixed parameter passing in `get_files` API call
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🔧 Technical Improvements
|
||||||
|
|
||||||
|
#### API Layer
|
||||||
|
- Dual-mode API (Tauri IPC + HTTP) with automatic detection
|
||||||
|
- `apiCall()` function handles both desktop and browser modes
|
||||||
|
- Proper error handling and loading states
|
||||||
|
|
||||||
|
#### State Management
|
||||||
|
- Global store with `filesCache`, `thumbnailsCache`, `profilesCache`
|
||||||
|
- LRU-style thumbnail caching (max 4 concurrent requests)
|
||||||
|
- Search history and bookmarks in SQLite
|
||||||
|
|
||||||
|
#### Architecture
|
||||||
|
- **4 core modules**: Search, File Prep/Processing, Admin, File Management
|
||||||
|
- Modular Vue 3 Composition API design
|
||||||
|
- TypeScript type definitions for all data structures
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 📚 Documentation
|
||||||
|
|
||||||
|
#### New Documentation
|
||||||
|
- **ARCHITECTURE.md** - Complete system architecture overview
|
||||||
|
- **Agent_Search_Integration_Analysis.md** - React to Vue 3 migration guide
|
||||||
|
- **Vue3_Pagination_Implementation_Guide.md** - Complete pagination implementation
|
||||||
|
- **Quick_Implementation_Checklist.md** - 5-step quick start guide
|
||||||
|
- **Pagination_Implementation_Roadmap.md** - Implementation roadmap
|
||||||
|
|
||||||
|
#### API Documentation
|
||||||
|
- Two-API architecture clarified (v1 → Momentry Core, v2 → MarkBase)
|
||||||
|
- All endpoints documented with examples
|
||||||
|
- Error codes and troubleshooting guides
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🎨 UI/UX Improvements
|
||||||
|
|
||||||
|
#### Search Interface
|
||||||
|
- Responsive search bar with mode selector
|
||||||
|
- Search history dropdown with Pin/Rename/Delete
|
||||||
|
- Bookmark system for quick access
|
||||||
|
- Result cards with thumbnails and metadata
|
||||||
|
|
||||||
|
#### Library Interface
|
||||||
|
- Collapsible sections for Completed/Registered/Unregistered files
|
||||||
|
- File status badges with icons
|
||||||
|
- Progress bars for processing files
|
||||||
|
- Processor QC buttons (Advanced Mode)
|
||||||
|
|
||||||
|
#### Video Player
|
||||||
|
- Frame-accurate seeking
|
||||||
|
- Mark timeline visualization (Advanced Mode)
|
||||||
|
- VLM description display
|
||||||
|
- Full-screen support
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### ⚡ Performance
|
||||||
|
|
||||||
|
#### Search Performance
|
||||||
|
- Initial search: **~2s → ~0.5s** (4x faster)
|
||||||
|
- Memory usage: **Progressive loading** instead of all-at-once
|
||||||
|
- User experience: **Immediate feedback**
|
||||||
|
|
||||||
|
#### Library Performance
|
||||||
|
- Correct pagination with `page_size` parameter
|
||||||
|
- Efficient thumbnail loading with queue
|
||||||
|
- No duplicate API calls
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🛠️ Build & Deployment
|
||||||
|
|
||||||
|
#### Build Process
|
||||||
|
- Vue 3 + TypeScript + Vite frontend
|
||||||
|
- Tauri 2 (Rust) desktop wrapper
|
||||||
|
- Production build: `npm run build` + `cargo tauri build`
|
||||||
|
- Development mode: `npm run dev` (proxy + vite)
|
||||||
|
|
||||||
|
#### System Requirements
|
||||||
|
- macOS 12+ (Apple Silicon or Intel)
|
||||||
|
- Node.js 18+ and npm
|
||||||
|
- Rust 1.70+ and Cargo
|
||||||
|
- PostgreSQL 14+
|
||||||
|
- Qdrant 1.6+
|
||||||
|
- Redis 7+ (optional)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🔐 Security
|
||||||
|
|
||||||
|
- API key injection by Studio proxy (never exposed to frontend)
|
||||||
|
- Per-user SQLite database in `data/users/`
|
||||||
|
- No secrets in localStorage
|
||||||
|
- HTTPS only in production
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 📦 Dependencies
|
||||||
|
|
||||||
|
#### Frontend
|
||||||
|
- Vue 3.5.13
|
||||||
|
- Vue Router 4.5.0
|
||||||
|
- VueUse Core 14.3.0
|
||||||
|
- Vue i18n 9.14.5
|
||||||
|
- Tauri API 2.11.0
|
||||||
|
|
||||||
|
#### Backend (Rust)
|
||||||
|
- Tauri 2.0
|
||||||
|
- Axum 0.7 (proxy server)
|
||||||
|
- SQLx 0.8 (PostgreSQL)
|
||||||
|
- Rusqlite 0.32 (SQLite)
|
||||||
|
- Reqwest 0.12 (HTTP client)
|
||||||
|
- Tokio 1.40 (async runtime)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🌐 API Endpoints
|
||||||
|
|
||||||
|
#### Momentry Core API (v1)
|
||||||
|
- `/api/v1/search/*` - Search endpoints
|
||||||
|
- `/api/v1/files/*` - File management
|
||||||
|
- `/api/v1/identities/*` - Identity management
|
||||||
|
- `/api/v1/agents/*` - Agent search
|
||||||
|
|
||||||
|
#### MarkBase API (v2)
|
||||||
|
- `/api/v2/admin/*` - Admin endpoints
|
||||||
|
- `/api/v2/myfiles/*` - File management
|
||||||
|
- `/api/v2/service/*` - Service control
|
||||||
|
|
||||||
|
#### Studio Proxy (8888)
|
||||||
|
- Gateway for v1 and v2 APIs
|
||||||
|
- Local SQLite for history/bookmarks
|
||||||
|
- Face thumbnail generation
|
||||||
|
- Identity profile images
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🚀 Known Issues
|
||||||
|
|
||||||
|
1. **Visual Search API** does not support `offset` parameter (using `page_size` as fallback)
|
||||||
|
2. **Agent Search** does not have dedicated `/api/v1/agent/search` endpoint (using semantic search fallback)
|
||||||
|
3. **WebSocket** state push not implemented (using polling)
|
||||||
|
4. **Search history** limited to 30 items (no full-text search)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🎯 Next Release (0.2.0)
|
||||||
|
|
||||||
|
#### Planned Features
|
||||||
|
- WebSocket real-time state updates
|
||||||
|
- Session-based search API
|
||||||
|
- Resumable file upload
|
||||||
|
- Advanced search filters
|
||||||
|
- Multi-language support expansion
|
||||||
|
|
||||||
|
#### Performance Improvements
|
||||||
|
- IndexedDB for persistent caching
|
||||||
|
- Lazy loading for large result sets
|
||||||
|
- Service Worker for offline support
|
||||||
|
|
||||||
|
#### Architecture Improvements
|
||||||
|
- Unified API Gateway
|
||||||
|
- Plugin system for custom processors
|
||||||
|
- Multi-tenant architecture
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Release Team
|
||||||
|
|
||||||
|
- **Development**: Momentry Studio Team
|
||||||
|
- **QA**: Manual testing on macOS (Apple Silicon)
|
||||||
|
- **Documentation**: Complete guides and architecture docs
|
||||||
|
- **Deployment**: Production-ready on m5max48
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Full Changelog**: https://github.com/anomalyco/momentry_studio/compare/v0.0.1...v0.1.0
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Installation Guide**: See `RELEASE_v0.1.0_INSTALLATION_GUIDE.md`
|
||||||
240
README.md
Normal file
240
README.md
Normal file
@@ -0,0 +1,240 @@
|
|||||||
|
# Momentry Studio
|
||||||
|
|
||||||
|
**Version**: 0.1.0
|
||||||
|
**Status**: Production Release
|
||||||
|
**Release Date**: 2026-10-11
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Momentry Studio is a **video analysis platform** with intelligent search capabilities, built with Vue 3, TypeScript, and Tauri 2.
|
||||||
|
|
||||||
|
### Key Features
|
||||||
|
|
||||||
|
- **🔍 Multi-Mode Search**: Keyword, Semantic, Visual, Agent, People
|
||||||
|
- **📄 Progressive Loading**: Top 5 results initially, load more on demand
|
||||||
|
- **📚 Library Management**: 118+ files with status tracking
|
||||||
|
- **🎭 Face Recognition**: Identity management and clustering
|
||||||
|
- **📊 Pipeline Visualization**: 10-stage processing progress
|
||||||
|
- **🎨 Advanced Mode**: QC tools and detailed controls
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
- Node.js 18+
|
||||||
|
- Rust 1.70+
|
||||||
|
- PostgreSQL 14+
|
||||||
|
- Qdrant 1.6+
|
||||||
|
- Momentry Core API (port 3002)
|
||||||
|
- MarkBase API (port 11438)
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Clone repository
|
||||||
|
git clone https://github.com/anomalyco/momentry_studio.git
|
||||||
|
cd momentry_studio
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
npm install
|
||||||
|
|
||||||
|
# Build frontend
|
||||||
|
npm run build
|
||||||
|
|
||||||
|
# Start proxy (requires Core API running)
|
||||||
|
npm run proxy
|
||||||
|
|
||||||
|
# Access: http://localhost:8888
|
||||||
|
```
|
||||||
|
|
||||||
|
### Development
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Start dev server (proxy + vite)
|
||||||
|
npm run dev
|
||||||
|
|
||||||
|
# Access: http://localhost:5173
|
||||||
|
```
|
||||||
|
|
||||||
|
### Desktop App
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build native macOS app
|
||||||
|
cargo tauri build
|
||||||
|
|
||||||
|
# Output: src-tauri/target/release/bundle/dmg/momentry-studio_0.1.0_arm64.dmg
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
### 4 Core Modules
|
||||||
|
|
||||||
|
1. **Search Module** - Multi-mode search with history and bookmarks
|
||||||
|
2. **File Prep/Processing** - Pipeline management and status tracking
|
||||||
|
3. **Admin Module** - System monitoring and configuration
|
||||||
|
4. **File Management** - Upload, download, and file organization
|
||||||
|
|
||||||
|
### Tech Stack
|
||||||
|
|
||||||
|
| Layer | Technology |
|
||||||
|
|-------|-----------|
|
||||||
|
| **Frontend** | Vue 3 + TypeScript + Vite |
|
||||||
|
| **Desktop** | Tauri 2 (Rust) |
|
||||||
|
| **API Gateway** | Axum (Rust) on port 8888 |
|
||||||
|
| **Core API** | Rust on port 3002 |
|
||||||
|
| **MarkBase API** | Go on port 11438 |
|
||||||
|
| **Database** | PostgreSQL + Qdrant + SQLite |
|
||||||
|
| **Cache** | Redis (optional) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## API Endpoints
|
||||||
|
|
||||||
|
### Momentry Core API (v1)
|
||||||
|
|
||||||
|
- `/api/v1/search/*` - Search operations
|
||||||
|
- `/api/v1/files/*` - File management
|
||||||
|
- `/api/v1/identities/*` - Identity management
|
||||||
|
|
||||||
|
### MarkBase API (v2)
|
||||||
|
|
||||||
|
- `/api/v2/admin/*` - Admin operations
|
||||||
|
- `/api/v2/myfiles/*` - File storage
|
||||||
|
|
||||||
|
### Studio Proxy (8888)
|
||||||
|
|
||||||
|
- Gateway for v1 and v2 APIs
|
||||||
|
- Local SQLite for history/bookmarks
|
||||||
|
- Face thumbnail generation
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
### User Documentation
|
||||||
|
|
||||||
|
- **Changelog**: `CHANGELOG.md`
|
||||||
|
- **Installation Guide**: `RELEASE_v0.1.0_INSTALLATION_GUIDE.md`
|
||||||
|
- **Architecture**: `docs/ARCHITECTURE.md`
|
||||||
|
|
||||||
|
### Developer Documentation
|
||||||
|
|
||||||
|
- **Agent Guide**: `AGENTS.md`
|
||||||
|
- **API Reference**: `docs_v1.0/GUIDES/API_REFERENCE.md`
|
||||||
|
- **Quick Start**: `docs/Quick_Implementation_Checklist.md`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Deployment
|
||||||
|
|
||||||
|
### Production (m5max48)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Access: https://studio.momentry.ddns.net
|
||||||
|
|
||||||
|
# SSH deployment
|
||||||
|
ssh accusys@m5max48
|
||||||
|
cd /Users/accusys/momentry_studio
|
||||||
|
git pull origin main
|
||||||
|
npm install
|
||||||
|
npm run build
|
||||||
|
pkill -f momentry-proxy
|
||||||
|
npm run proxy
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
### Environment Variables
|
||||||
|
|
||||||
|
Create `.env` file:
|
||||||
|
|
||||||
|
```env
|
||||||
|
MOMENTRY_API_URL=http://localhost:3002
|
||||||
|
MOMENTRY_API_KEY=your_api_key_here
|
||||||
|
MARKBASE_API_URL=http://localhost:11438
|
||||||
|
DATABASE_URL=postgres://accusys@localhost:5432/momentry
|
||||||
|
QDRANT_URL=http://localhost:6333
|
||||||
|
```
|
||||||
|
|
||||||
|
### Tauri Configuration
|
||||||
|
|
||||||
|
Edit `src-tauri/tauri.conf.json` for desktop app settings.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Port 8888 in Use
|
||||||
|
|
||||||
|
```bash
|
||||||
|
lsof -i :8888
|
||||||
|
kill -9 <PID>
|
||||||
|
npm run proxy
|
||||||
|
```
|
||||||
|
|
||||||
|
### Build Errors
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Clean and rebuild
|
||||||
|
npm run build
|
||||||
|
cd src-tauri && cargo clean && cargo build --release
|
||||||
|
```
|
||||||
|
|
||||||
|
### No Search Results
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check Core API
|
||||||
|
curl http://localhost:3002/health
|
||||||
|
|
||||||
|
# Check database
|
||||||
|
psql -d momentry -c "SELECT COUNT(*) FROM videos;"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
- **Issues**: https://github.com/anomalyco/momentry_studio/issues
|
||||||
|
- **Internal Git**: http://localhost:3000/admin/momentry_studio
|
||||||
|
- **Logs**: `logs/studio.log`, `/tmp/momentry_proxy.log`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Version History
|
||||||
|
|
||||||
|
### v0.1.0 (2026-10-11)
|
||||||
|
|
||||||
|
- ✅ Search pagination with "Load More" button
|
||||||
|
- ✅ Library displays 118 files correctly
|
||||||
|
- ✅ Scene VLM status visualization
|
||||||
|
- ✅ Advanced Mode toggle
|
||||||
|
- ✅ Complete architecture documentation
|
||||||
|
|
||||||
|
See `CHANGELOG.md` for full history.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Proprietary - Momentry Studio Team
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Team
|
||||||
|
|
||||||
|
- **Development**: Momentry Studio Team
|
||||||
|
- **Release**: Production v0.1.0
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Project Status**: ✅ Production Ready
|
||||||
|
|
||||||
|
**Next Release**: v0.2.0 (WebSocket, Session API, Resumable Upload)
|
||||||
790
RELEASE_v0.1.0_INSTALLATION_GUIDE.md
Normal file
790
RELEASE_v0.1.0_INSTALLATION_GUIDE.md
Normal file
@@ -0,0 +1,790 @@
|
|||||||
|
# Momentry Studio v0.1.0 - Installation Guide
|
||||||
|
|
||||||
|
**Release Date**: 2026-10-11
|
||||||
|
**Version**: 0.1.0
|
||||||
|
**Target**: Admin Team
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📋 Table of Contents
|
||||||
|
|
||||||
|
1. [System Requirements](#system-requirements)
|
||||||
|
2. [Prerequisites](#prerequisites)
|
||||||
|
3. [Installation Steps](#installation-steps)
|
||||||
|
4. [Configuration](#configuration)
|
||||||
|
5. [Building](#building)
|
||||||
|
6. [Deployment](#deployment)
|
||||||
|
7. [Verification](#verification)
|
||||||
|
8. [Troubleshooting](#troubleshooting)
|
||||||
|
9. [Support](#support)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🖥️ System Requirements
|
||||||
|
|
||||||
|
### Hardware
|
||||||
|
|
||||||
|
| Component | Minimum | Recommended |
|
||||||
|
|-----------|---------|-------------|
|
||||||
|
| **CPU** | 4 cores | 8 cores (Apple Silicon M1/M2/M3) |
|
||||||
|
| **RAM** | 8 GB | 16 GB |
|
||||||
|
| **Storage** | 10 GB | 50 GB |
|
||||||
|
| **GPU** | - | Apple Silicon GPU or NVIDIA GPU |
|
||||||
|
|
||||||
|
### Operating System
|
||||||
|
|
||||||
|
- **macOS**: 12.0 (Monterey) or later
|
||||||
|
- **Architecture**: Apple Silicon (arm64) or Intel (x86_64)
|
||||||
|
|
||||||
|
### Network
|
||||||
|
|
||||||
|
- **Ports Required**:
|
||||||
|
- 3002: Momentry Core API
|
||||||
|
- 5173: Vite Dev Server (development only)
|
||||||
|
- 8888: Studio Proxy
|
||||||
|
- 11438: MarkBase API
|
||||||
|
- 6333: Qdrant
|
||||||
|
- 6379: Redis (optional)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ Prerequisites
|
||||||
|
|
||||||
|
### 1. Node.js and npm
|
||||||
|
|
||||||
|
**Minimum Version**: Node.js 18+ and npm 9+
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check Node.js version
|
||||||
|
node --version
|
||||||
|
# Expected: v18.x.x or higher
|
||||||
|
|
||||||
|
# Check npm version
|
||||||
|
npm --version
|
||||||
|
# Expected: 9.x.x or higher
|
||||||
|
|
||||||
|
# Install Node.js (if not installed)
|
||||||
|
# Option 1: Using Homebrew
|
||||||
|
brew install node
|
||||||
|
|
||||||
|
# Option 2: Using nvm (recommended)
|
||||||
|
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
|
||||||
|
nvm install 18
|
||||||
|
nvm use 18
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2. Rust and Cargo
|
||||||
|
|
||||||
|
**Minimum Version**: Rust 1.70+
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check Rust version
|
||||||
|
rustc --version
|
||||||
|
# Expected: rustc 1.70.0 or higher
|
||||||
|
|
||||||
|
# Check Cargo version
|
||||||
|
cargo --version
|
||||||
|
# Expected: cargo 1.70.0 or higher
|
||||||
|
|
||||||
|
# Install Rust (if not installed)
|
||||||
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
||||||
|
|
||||||
|
# Add to PATH (restart terminal)
|
||||||
|
source $HOME/.cargo/env
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3. PostgreSQL
|
||||||
|
|
||||||
|
**Minimum Version**: PostgreSQL 14+
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check PostgreSQL version
|
||||||
|
psql --version
|
||||||
|
# Expected: psql (PostgreSQL) 14.x or higher
|
||||||
|
|
||||||
|
# Install PostgreSQL (if not installed)
|
||||||
|
brew install postgresql@14
|
||||||
|
|
||||||
|
# Start PostgreSQL service
|
||||||
|
brew services start postgresql@14
|
||||||
|
|
||||||
|
# Create database
|
||||||
|
createdb momentry
|
||||||
|
|
||||||
|
# Verify connection
|
||||||
|
psql -d momentry -c "SELECT version();"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 4. Qdrant
|
||||||
|
|
||||||
|
**Minimum Version**: Qdrant 1.6+
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install Qdrant (if not installed)
|
||||||
|
brew install qdrant
|
||||||
|
|
||||||
|
# Or use Docker
|
||||||
|
docker run -p 6333:6333 qdrant/qdrant:latest
|
||||||
|
|
||||||
|
# Verify Qdrant is running
|
||||||
|
curl http://localhost:6333/collections
|
||||||
|
# Expected: {"result": {...}}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 5. Redis (Optional)
|
||||||
|
|
||||||
|
**Minimum Version**: Redis 7+
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install Redis (if not installed)
|
||||||
|
brew install redis
|
||||||
|
|
||||||
|
# Start Redis service
|
||||||
|
brew services start redis
|
||||||
|
|
||||||
|
# Verify Redis is running
|
||||||
|
redis-cli ping
|
||||||
|
# Expected: PONG
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 6. Momentry Core API
|
||||||
|
|
||||||
|
**Required**: Momentry Core API must be running on port 3002
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Verify Core API is running
|
||||||
|
curl http://localhost:3002/health
|
||||||
|
# Expected: {"status": "ok", "version": "1.0.0"}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Installation Guide**: See `/Users/accusys/momentry_core/README.md`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 7. MarkBase API
|
||||||
|
|
||||||
|
**Required**: MarkBase API must be running on port 11438
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Verify MarkBase API is running
|
||||||
|
curl http://localhost:11438/health
|
||||||
|
# Expected: {"status": "ok"}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Installation Guide**: See `/Users/accusys/markbase/markbase-core/README.md`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📥 Installation Steps
|
||||||
|
|
||||||
|
### Step 1: Clone Repository
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Clone Momentry Studio
|
||||||
|
git clone https://github.com/anomalyco/momentry_studio.git
|
||||||
|
cd momentry_studio
|
||||||
|
|
||||||
|
# Or use internal Git server
|
||||||
|
git clone http://localhost:3000/admin/momentry_studio.git
|
||||||
|
cd momentry_studio
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Step 2: Checkout Release Version
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Checkout v0.1.0
|
||||||
|
git checkout v0.1.0
|
||||||
|
|
||||||
|
# Or use latest main branch
|
||||||
|
git checkout main
|
||||||
|
git pull origin main
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Step 3: Install Dependencies
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install Node.js dependencies
|
||||||
|
npm install
|
||||||
|
|
||||||
|
# Expected output:
|
||||||
|
# added 320 packages in 15s
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Step 4: Build Frontend
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build Vue frontend
|
||||||
|
npm run build
|
||||||
|
|
||||||
|
# Expected output:
|
||||||
|
# ✓ 87 modules transformed.
|
||||||
|
# dist/index.html 0.44 kB
|
||||||
|
# dist/assets/index-*.css 219 kB
|
||||||
|
# dist/assets/index-*.js 596 kB
|
||||||
|
# ✓ built in 911ms
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Step 5: Build Tauri Desktop App
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build Rust proxy (required for both dev and production)
|
||||||
|
cd src-tauri
|
||||||
|
cargo build --release
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
# Expected output:
|
||||||
|
# Compiling momentry-proxy v0.1.0
|
||||||
|
# Finished release [optimized] target(s) in 2m 15s
|
||||||
|
|
||||||
|
# Build Tauri desktop app (optional, for native app)
|
||||||
|
cargo tauri build
|
||||||
|
|
||||||
|
# Expected output:
|
||||||
|
# Finished release [optimized] target(s) in 5m 30s
|
||||||
|
# Built: src-tauri/target/release/bundle/dmg/momentry-studio_0.1.0_arm64.dmg
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚙️ Configuration
|
||||||
|
|
||||||
|
### 1. Environment Variables
|
||||||
|
|
||||||
|
**File**: `.env` (create if not exists)
|
||||||
|
|
||||||
|
```env
|
||||||
|
# Momentry Core API
|
||||||
|
MOMENTRY_API_URL=http://localhost:3002
|
||||||
|
MOMENTRY_API_KEY=muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69
|
||||||
|
|
||||||
|
# MarkBase API
|
||||||
|
MARKBASE_API_URL=http://localhost:11438
|
||||||
|
|
||||||
|
# Studio Proxy
|
||||||
|
STUDIO_PROXY_PORT=8888
|
||||||
|
|
||||||
|
# Database
|
||||||
|
DATABASE_URL=postgres://accusys@localhost:5432/momentry
|
||||||
|
|
||||||
|
# Qdrant
|
||||||
|
QDRANT_URL=http://localhost:6333
|
||||||
|
QDRANT_API_KEY=Test3200Test3200Test3200
|
||||||
|
|
||||||
|
# Redis (optional)
|
||||||
|
REDIS_URL=redis://localhost:6379
|
||||||
|
|
||||||
|
# VLM Server
|
||||||
|
MOMENTRY_LLM_VISION_URL=http://localhost:8080/v1/chat/completions
|
||||||
|
|
||||||
|
# Data Directory
|
||||||
|
MOMENTRY_DATA_DIR=/Users/accusys/momentry_studio/data/users
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2. Tauri Configuration
|
||||||
|
|
||||||
|
**File**: `src-tauri/tauri.conf.json`
|
||||||
|
|
||||||
|
**Key Settings**:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"version": "0.1.0",
|
||||||
|
"identifier": "com.momentry.studio",
|
||||||
|
"build": {
|
||||||
|
"beforeBuildCommand": "npm run build",
|
||||||
|
"beforeDevCommand": "npm run dev",
|
||||||
|
"devUrl": "http://localhost:5173",
|
||||||
|
"frontendDist": "../dist"
|
||||||
|
},
|
||||||
|
"app": {
|
||||||
|
"withGlobalTauri": true,
|
||||||
|
"windows": [
|
||||||
|
{
|
||||||
|
"title": "Momentry Studio",
|
||||||
|
"width": 1400,
|
||||||
|
"height": 900,
|
||||||
|
"resizable": true,
|
||||||
|
"fullscreen": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3. Database Setup
|
||||||
|
|
||||||
|
**SQLite Database Location**: `data/users/demo.sqlite`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Create data directory
|
||||||
|
mkdir -p data/users
|
||||||
|
|
||||||
|
# Database will be created automatically on first run
|
||||||
|
# Tables: search_history, bookmarks, app_users
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 4. Proxy Configuration
|
||||||
|
|
||||||
|
**File**: `src-tauri/src/proxy.rs`
|
||||||
|
|
||||||
|
**Key Settings**:
|
||||||
|
|
||||||
|
```rust
|
||||||
|
// Core API endpoint
|
||||||
|
const CORE_API: &str = "http://localhost:3002";
|
||||||
|
|
||||||
|
// MarkBase API endpoint
|
||||||
|
const MARKBASE_API: &str = "http://localhost:11438";
|
||||||
|
|
||||||
|
// Proxy listen address
|
||||||
|
let addr = SocketAddr::from(([0, 0, 0, 0], 8888));
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🏗️ Building
|
||||||
|
|
||||||
|
### Development Build
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Start development server
|
||||||
|
npm run dev
|
||||||
|
|
||||||
|
# This will:
|
||||||
|
# 1. Kill old proxy on port 8888
|
||||||
|
# 2. Start momentry-proxy
|
||||||
|
# 3. Wait 2 seconds
|
||||||
|
# 4. Start Vite dev server on port 5173
|
||||||
|
|
||||||
|
# Access: http://localhost:5173
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Production Build
|
||||||
|
|
||||||
|
#### Option 1: Web Application
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build frontend only
|
||||||
|
npm run build
|
||||||
|
|
||||||
|
# Start proxy manually
|
||||||
|
npm run proxy
|
||||||
|
|
||||||
|
# Access: http://localhost:8888
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Option 2: Native Desktop App
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build complete desktop app
|
||||||
|
cargo tauri build
|
||||||
|
|
||||||
|
# Output location:
|
||||||
|
# src-tauri/target/release/bundle/dmg/momentry-studio_0.1.0_arm64.dmg
|
||||||
|
|
||||||
|
# Install DMG on macOS
|
||||||
|
open src-tauri/target/release/bundle/dmg/momentry-studio_0.1.0_arm64.dmg
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Deployment
|
||||||
|
|
||||||
|
### Production Deployment (m5max48)
|
||||||
|
|
||||||
|
**Target Server**: m5max48
|
||||||
|
|
||||||
|
**Deployment Script**:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Stop existing services
|
||||||
|
pkill -f "momentry-proxy"
|
||||||
|
pkill -f "vite"
|
||||||
|
|
||||||
|
# Pull latest code
|
||||||
|
cd /Users/accusys/momentry_studio
|
||||||
|
git pull origin main
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
npm install
|
||||||
|
|
||||||
|
# Build frontend
|
||||||
|
npm run build
|
||||||
|
|
||||||
|
# Start proxy
|
||||||
|
MOMENTRY_API_KEY=muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69 \
|
||||||
|
MOMENTRY_DATA_DIR=$(pwd)/data/users \
|
||||||
|
./src-tauri/target/release/momentry-proxy > logs/proxy.log 2>&1 &
|
||||||
|
|
||||||
|
# Verify
|
||||||
|
curl http://localhost:8888/health
|
||||||
|
|
||||||
|
# Access: https://studio.momentry.ddns.net
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Systemd Service (Linux)
|
||||||
|
|
||||||
|
**File**: `/etc/systemd/system/momentry-studio.service`
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[Unit]
|
||||||
|
Description=Momentry Studio Proxy
|
||||||
|
After=network.target postgresql.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=accusys
|
||||||
|
WorkingDirectory=/Users/accusys/momentry_studio
|
||||||
|
Environment="MOMENTRY_API_KEY=muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69"
|
||||||
|
Environment="MOMENTRY_DATA_DIR=/Users/accusys/momentry_studio/data/users"
|
||||||
|
ExecStart=/Users/accusys/momentry_studio/src-tauri/target/release/momentry-proxy
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5s
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Enable and start service
|
||||||
|
sudo systemctl enable momentry-studio
|
||||||
|
sudo systemctl start momentry-studio
|
||||||
|
sudo systemctl status momentry-studio
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Nginx Reverse Proxy
|
||||||
|
|
||||||
|
**File**: `/etc/nginx/sites-available/momentry-studio.conf`
|
||||||
|
|
||||||
|
```nginx
|
||||||
|
server {
|
||||||
|
listen 443 ssl http2;
|
||||||
|
server_name studio.momentry.ddns.net;
|
||||||
|
|
||||||
|
ssl_certificate /path/to/cert.pem;
|
||||||
|
ssl_certificate_key /path/to/key.pem;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://localhost:8888;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection 'upgrade';
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_cache_bypass $http_upgrade;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
# WebSocket support
|
||||||
|
location /ws {
|
||||||
|
proxy_pass http://localhost:8888;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection "Upgrade";
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Enable site
|
||||||
|
sudo ln -s /etc/nginx/sites-available/momentry-studio.conf /etc/nginx/sites-enabled/
|
||||||
|
sudo nginx -t
|
||||||
|
sudo systemctl reload nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ Verification
|
||||||
|
|
||||||
|
### 1. Check Services
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check proxy
|
||||||
|
curl http://localhost:8888/health
|
||||||
|
# Expected: ok
|
||||||
|
|
||||||
|
# Check Core API
|
||||||
|
curl http://localhost:3002/health
|
||||||
|
# Expected: {"status": "ok"}
|
||||||
|
|
||||||
|
# Check MarkBase API
|
||||||
|
curl http://localhost:11438/health
|
||||||
|
# Expected: {"status": "ok"}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2. Check Frontend
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build frontend
|
||||||
|
npm run build
|
||||||
|
|
||||||
|
# Verify build output
|
||||||
|
ls -lh dist/
|
||||||
|
|
||||||
|
# Expected:
|
||||||
|
# index.html
|
||||||
|
# assets/index-*.css
|
||||||
|
# assets/index-*.js
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3. Check API Integration
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Test search API
|
||||||
|
curl -X POST http://localhost:8888/api/v1/search/keyword \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"query": "test", "limit": 5}'
|
||||||
|
|
||||||
|
# Expected: {"success": true, "results": [...]}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 4. Check Database
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check SQLite database
|
||||||
|
sqlite3 data/users/demo.sqlite "SELECT * FROM search_history LIMIT 5;"
|
||||||
|
|
||||||
|
# Check PostgreSQL
|
||||||
|
psql -d momentry -c "SELECT COUNT(*) FROM videos;"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 5. Check Desktop App (Optional)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run Tauri app in dev mode
|
||||||
|
cargo tauri dev
|
||||||
|
|
||||||
|
# Or install DMG and run
|
||||||
|
open src-tauri/target/release/bundle/dmg/momentry-studio_0.1.0_arm64.dmg
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 Troubleshooting
|
||||||
|
|
||||||
|
### Issue 1: Port 8888 Already in Use
|
||||||
|
|
||||||
|
**Symptom**: `Address already in use`
|
||||||
|
|
||||||
|
**Solution**:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Find process using port 8888
|
||||||
|
lsof -i :8888
|
||||||
|
|
||||||
|
# Kill process
|
||||||
|
kill -9 <PID>
|
||||||
|
|
||||||
|
# Or use the provided script
|
||||||
|
npm run proxy
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Issue 2: Build Fails with TypeScript Errors
|
||||||
|
|
||||||
|
**Symptom**: `error TS2345: Argument of type ...`
|
||||||
|
|
||||||
|
**Solution**:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check TypeScript version
|
||||||
|
npm list typescript
|
||||||
|
|
||||||
|
# Update TypeScript
|
||||||
|
npm install typescript@latest --save-dev
|
||||||
|
|
||||||
|
# Rebuild
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Issue 3: Rust Build Fails
|
||||||
|
|
||||||
|
**Symptom**: `error: linking with cc failed`
|
||||||
|
|
||||||
|
**Solution**:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install Xcode Command Line Tools
|
||||||
|
xcode-select --install
|
||||||
|
|
||||||
|
# Update Rust
|
||||||
|
rustup update
|
||||||
|
|
||||||
|
# Clean and rebuild
|
||||||
|
cd src-tauri
|
||||||
|
cargo clean
|
||||||
|
cargo build --release
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Issue 4: Database Connection Failed
|
||||||
|
|
||||||
|
**Symptom**: `Error: Connection refused`
|
||||||
|
|
||||||
|
**Solution**:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check PostgreSQL is running
|
||||||
|
brew services list | grep postgresql
|
||||||
|
|
||||||
|
# Start PostgreSQL
|
||||||
|
brew services start postgresql@14
|
||||||
|
|
||||||
|
# Check database exists
|
||||||
|
psql -l | grep momentry
|
||||||
|
|
||||||
|
# Create database if not exists
|
||||||
|
createdb momentry
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Issue 5: API Key Invalid
|
||||||
|
|
||||||
|
**Symptom**: `401 Unauthorized`
|
||||||
|
|
||||||
|
**Solution**:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check API key in .env file
|
||||||
|
cat .env | grep MOMENTRY_API_KEY
|
||||||
|
|
||||||
|
# Verify API key with Core API
|
||||||
|
curl -H "Authorization: Bearer YOUR_API_KEY" \
|
||||||
|
http://localhost:3002/api/v1/search/keyword
|
||||||
|
|
||||||
|
# Update API key if needed
|
||||||
|
# Get new key from Momentry Core admin panel
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Issue 6: Search Returns No Results
|
||||||
|
|
||||||
|
**Symptom**: `{"success": true, "results": []}`
|
||||||
|
|
||||||
|
**Solution**:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check Core API has data
|
||||||
|
curl http://localhost:3002/api/v1/files
|
||||||
|
|
||||||
|
# Check PostgreSQL has videos
|
||||||
|
psql -d momentry -c "SELECT COUNT(*) FROM videos;"
|
||||||
|
|
||||||
|
# Check Qdrant has vectors
|
||||||
|
curl http://localhost:6333/collections/sentence_chunks
|
||||||
|
|
||||||
|
# Run file registration if needed
|
||||||
|
curl -X POST http://localhost:3002/api/v1/files/register \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"file_path": "/path/to/video.mp4"}'
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📞 Support
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
- **Architecture**: `docs/ARCHITECTURE.md`
|
||||||
|
- **API Reference**: `docs_v1.0/GUIDES/API_REFERENCE.md`
|
||||||
|
- **Agent Guide**: `AGENTS.md`
|
||||||
|
- **Changelog**: `CHANGELOG.md`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Contact
|
||||||
|
|
||||||
|
- **Development Team**: Momentry Studio Team
|
||||||
|
- **Issues**: https://github.com/anomalyco/momentry_studio/issues
|
||||||
|
- **Internal Git**: http://localhost:3000/admin/momentry_studio
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Logs
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Proxy logs
|
||||||
|
tail -f /tmp/momentry_proxy.log
|
||||||
|
|
||||||
|
# Vite logs
|
||||||
|
tail -f logs/studio.log
|
||||||
|
|
||||||
|
# Tauri logs
|
||||||
|
tail -f ~/Library/Logs/com.momentry.studio/
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📦 Release Checklist
|
||||||
|
|
||||||
|
- [ ] All prerequisites installed
|
||||||
|
- [ ] Momentry Core API running (port 3002)
|
||||||
|
- [ ] MarkBase API running (port 11438)
|
||||||
|
- [ ] PostgreSQL running (port 5432)
|
||||||
|
- [ ] Qdrant running (port 6333)
|
||||||
|
- [ ] Redis running (port 6379) - optional
|
||||||
|
- [ ] Dependencies installed (`npm install`)
|
||||||
|
- [ ] Frontend built (`npm run build`)
|
||||||
|
- [ ] Proxy built (`cargo build --release`)
|
||||||
|
- [ ] Desktop app built (optional: `cargo tauri build`)
|
||||||
|
- [ ] Configuration verified (`.env`, `tauri.conf.json`)
|
||||||
|
- [ ] Database created (`data/users/demo.sqlite`)
|
||||||
|
- [ ] Health checks passed
|
||||||
|
- [ ] Search API tested
|
||||||
|
- [ ] Production deployment verified
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Installation Guide Version**: 1.0.0
|
||||||
|
**Last Updated**: 2026-10-11
|
||||||
|
**Maintained by**: Momentry Studio Team
|
||||||
366
build_release.sh
Executable file
366
build_release.sh
Executable file
@@ -0,0 +1,366 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Momentry Studio v0.1.0 - Release Build Script
|
||||||
|
# Purpose: Build production release package
|
||||||
|
# Usage: ./build_release.sh
|
||||||
|
|
||||||
|
set -e # Exit on error
|
||||||
|
|
||||||
|
echo "================================================================================"
|
||||||
|
echo " Momentry Studio v0.1.0 - Release Build"
|
||||||
|
echo "================================================================================"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
VERSION="0.1.0"
|
||||||
|
PROJECT_NAME="momentry-studio"
|
||||||
|
BUILD_DIR="release-build"
|
||||||
|
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
||||||
|
|
||||||
|
# Colors for output
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
# Functions
|
||||||
|
log_info() {
|
||||||
|
echo -e "${GREEN}[INFO]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_warn() {
|
||||||
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_error() {
|
||||||
|
echo -e "${RED}[ERROR]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check prerequisites
|
||||||
|
check_prerequisites() {
|
||||||
|
log_info "Checking prerequisites..."
|
||||||
|
|
||||||
|
# Check Node.js
|
||||||
|
if ! command -v node &> /dev/null; then
|
||||||
|
log_error "Node.js not installed. Please install Node.js 18+"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
log_info "Node.js: $(node --version)"
|
||||||
|
|
||||||
|
# Check npm
|
||||||
|
if ! command -v npm &> /dev/null; then
|
||||||
|
log_error "npm not installed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
log_info "npm: $(npm --version)"
|
||||||
|
|
||||||
|
# Check Rust
|
||||||
|
if ! command -v rustc &> /dev/null; then
|
||||||
|
log_error "Rust not installed. Please install Rust 1.70+"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
log_info "Rust: $(rustc --version)"
|
||||||
|
|
||||||
|
# Check Cargo
|
||||||
|
if ! command -v cargo &> /dev/null; then
|
||||||
|
log_error "Cargo not installed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
log_info "Cargo: $(cargo --version)"
|
||||||
|
|
||||||
|
log_info "Prerequisites OK ✓"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Clean previous builds
|
||||||
|
clean_build() {
|
||||||
|
log_info "Cleaning previous builds..."
|
||||||
|
|
||||||
|
rm -rf dist
|
||||||
|
rm -rf src-tauri/target/release
|
||||||
|
rm -rf $BUILD_DIR
|
||||||
|
|
||||||
|
log_info "Clean completed ✓"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
install_deps() {
|
||||||
|
log_info "Installing dependencies..."
|
||||||
|
|
||||||
|
npm install
|
||||||
|
|
||||||
|
log_info "Dependencies installed ✓"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Build frontend
|
||||||
|
build_frontend() {
|
||||||
|
log_info "Building frontend..."
|
||||||
|
|
||||||
|
npm run build
|
||||||
|
|
||||||
|
if [ ! -d "dist" ]; then
|
||||||
|
log_error "Frontend build failed - dist/ not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_info "Frontend built ✓"
|
||||||
|
log_info "Output: dist/"
|
||||||
|
ls -lh dist/
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Build Rust proxy
|
||||||
|
build_proxy() {
|
||||||
|
log_info "Building Rust proxy..."
|
||||||
|
|
||||||
|
cd src-tauri
|
||||||
|
cargo build --release
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
if [ ! -f "src-tauri/target/release/momentry-proxy" ]; then
|
||||||
|
log_error "Proxy build failed - binary not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_info "Proxy built ✓"
|
||||||
|
log_info "Binary: src-tauri/target/release/momentry-proxy"
|
||||||
|
ls -lh src-tauri/target/release/momentry-proxy
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Build Tauri desktop app (optional)
|
||||||
|
build_desktop() {
|
||||||
|
log_warn "Build Tauri desktop app? (y/n)"
|
||||||
|
read -t 10 -n 1 answer
|
||||||
|
|
||||||
|
if [[ $answer == "y" || $answer == "Y" ]]; then
|
||||||
|
log_info "Building Tauri desktop app..."
|
||||||
|
|
||||||
|
cargo tauri build
|
||||||
|
|
||||||
|
if [ -d "src-tauri/target/release/bundle" ]; then
|
||||||
|
log_info "Desktop app built ✓"
|
||||||
|
log_info "Output: src-tauri/target/release/bundle/"
|
||||||
|
ls -lh src-tauri/target/release/bundle/dmg/ 2>/dev/null || true
|
||||||
|
else
|
||||||
|
log_warn "Desktop app build may have failed"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_info "Skipping desktop app build"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create release package
|
||||||
|
create_package() {
|
||||||
|
log_info "Creating release package..."
|
||||||
|
|
||||||
|
mkdir -p $BUILD_DIR
|
||||||
|
|
||||||
|
# Package structure
|
||||||
|
PACKAGE_NAME="${PROJECT_NAME}-v${VERSION}-${TIMESTAMP}"
|
||||||
|
PACKAGE_DIR="${BUILD_DIR}/${PACKAGE_NAME}"
|
||||||
|
mkdir -p $PACKAGE_DIR
|
||||||
|
|
||||||
|
# Copy files
|
||||||
|
log_info "Copying files..."
|
||||||
|
|
||||||
|
# Frontend
|
||||||
|
cp -r dist $PACKAGE_DIR/
|
||||||
|
|
||||||
|
# Proxy binary
|
||||||
|
mkdir -p $PACKAGE_DIR/bin
|
||||||
|
cp src-tauri/target/release/momentry-proxy $PACKAGE_DIR/bin/
|
||||||
|
|
||||||
|
# Configuration files
|
||||||
|
cp .env $PACKAGE_DIR/ 2>/dev/null || log_warn "No .env file found"
|
||||||
|
cp package.json $PACKAGE_DIR/
|
||||||
|
cp package-lock.json $PACKAGE_DIR/ 2>/dev/null || true
|
||||||
|
|
||||||
|
# Documentation
|
||||||
|
cp README.md $PACKAGE_DIR/
|
||||||
|
cp CHANGELOG.md $PACKAGE_DIR/
|
||||||
|
cp RELEASE_v0.1.0_INSTALLATION_GUIDE.md $PACKAGE_DIR/INSTALLATION_GUIDE.md
|
||||||
|
cp AGENTS.md $PACKAGE_DIR/
|
||||||
|
|
||||||
|
# Directories
|
||||||
|
mkdir -p $PACKAGE_DIR/data/users
|
||||||
|
mkdir -p $PACKAGE_DIR/logs
|
||||||
|
|
||||||
|
# Create startup script
|
||||||
|
cat > $PACKAGE_DIR/start.sh << 'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Momentry Studio v0.1.0 - Startup Script
|
||||||
|
|
||||||
|
export MOMENTRY_API_KEY=muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69
|
||||||
|
export MOMENTRY_DATA_DIR=$(pwd)/data/users
|
||||||
|
|
||||||
|
./bin/momentry-proxy > logs/proxy.log 2>&1 &
|
||||||
|
|
||||||
|
echo "Momentry Studio started on http://localhost:8888"
|
||||||
|
echo "Health check: curl http://localhost:8888/health"
|
||||||
|
EOF
|
||||||
|
chmod +x $PACKAGE_DIR/start.sh
|
||||||
|
|
||||||
|
# Create stop script
|
||||||
|
cat > $PACKAGE_DIR/stop.sh << 'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
pkill -f momentry-proxy
|
||||||
|
echo "Momentry Studio stopped"
|
||||||
|
EOF
|
||||||
|
chmod +x $PACKAGE_DIR/stop.sh
|
||||||
|
|
||||||
|
# Create tar.gz
|
||||||
|
log_info "Creating tar.gz archive..."
|
||||||
|
cd $BUILD_DIR
|
||||||
|
tar -czf ${PACKAGE_NAME}.tar.gz ${PACKAGE_NAME}
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
# Calculate checksum
|
||||||
|
log_info "Calculating checksum..."
|
||||||
|
shasum -a 256 ${BUILD_DIR}/${PACKAGE_NAME}.tar.gz > ${BUILD_DIR}/${PACKAGE_NAME}.tar.gz.sha256
|
||||||
|
|
||||||
|
log_info "Package created ✓"
|
||||||
|
log_info "Location: ${BUILD_DIR}/${PACKAGE_NAME}.tar.gz"
|
||||||
|
log_info "Size: $(du -h ${BUILD_DIR}/${PACKAGE_NAME}.tar.gz | cut -f1)"
|
||||||
|
log_info "Checksum: ${BUILD_DIR}/${PACKAGE_NAME}.tar.gz.sha256"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Verify package
|
||||||
|
verify_package() {
|
||||||
|
log_info "Verifying package..."
|
||||||
|
|
||||||
|
PACKAGE_NAME="${PROJECT_NAME}-v${VERSION}-${TIMESTAMP}"
|
||||||
|
|
||||||
|
# Check tar.gz
|
||||||
|
if [ ! -f "${BUILD_DIR}/${PACKAGE_NAME}.tar.gz" ]; then
|
||||||
|
log_error "Package not found: ${BUILD_DIR}/${PACKAGE_NAME}.tar.gz"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Verify checksum
|
||||||
|
log_info "Verifying checksum..."
|
||||||
|
cd ${BUILD_DIR}
|
||||||
|
shasum -a 256 -c ${PACKAGE_NAME}.tar.gz.sha256
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
# List package contents
|
||||||
|
log_info "Package contents:"
|
||||||
|
tar -tzf ${BUILD_DIR}/${PACKAGE_NAME}.tar.gz | head -20
|
||||||
|
|
||||||
|
log_info "Verification completed ✓"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Generate release notes
|
||||||
|
generate_notes() {
|
||||||
|
log_info "Generating release notes..."
|
||||||
|
|
||||||
|
cat > ${BUILD_DIR}/RELEASE_NOTES.md << EOF
|
||||||
|
# Momentry Studio v${VERSION} Release Notes
|
||||||
|
|
||||||
|
**Release Date**: $(date +"%Y-%m-%d")
|
||||||
|
**Build**: ${TIMESTAMP}
|
||||||
|
|
||||||
|
## Package Contents
|
||||||
|
|
||||||
|
- \`dist/\` - Compiled frontend (Vue 3)
|
||||||
|
- \`bin/momentry-proxy\` - Rust proxy binary
|
||||||
|
- \`data/users/\` - SQLite database directory
|
||||||
|
- \`logs/\` - Log files directory
|
||||||
|
- \`start.sh\` - Startup script
|
||||||
|
- \`stop.sh\` - Stop script
|
||||||
|
- \`README.md\` - Project overview
|
||||||
|
- \`CHANGELOG.md\` - Version history
|
||||||
|
- \`INSTALLATION_GUIDE.md\` - Installation instructions
|
||||||
|
- \`AGENTS.md\` - Developer guide
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
1. Extract the archive
|
||||||
|
2. Configure \`.env\` file
|
||||||
|
3. Run \`./start.sh\`
|
||||||
|
4. Access: http://localhost:8888
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- Node.js 18+
|
||||||
|
- Rust 1.70+
|
||||||
|
- PostgreSQL 14+
|
||||||
|
- Qdrant 1.6+
|
||||||
|
- Momentry Core API (port 3002)
|
||||||
|
- MarkBase API (port 11438)
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
\`\`\`bash
|
||||||
|
# Start
|
||||||
|
./start.sh
|
||||||
|
|
||||||
|
# Check health
|
||||||
|
curl http://localhost:8888/health
|
||||||
|
|
||||||
|
# Stop
|
||||||
|
./stop.sh
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- ✅ Search pagination with "Load More" button
|
||||||
|
- ✅ 118 files display in Library
|
||||||
|
- ✅ Scene VLM status visualization
|
||||||
|
- ✅ Advanced Mode toggle
|
||||||
|
- ✅ All search modes supported
|
||||||
|
|
||||||
|
## Known Issues
|
||||||
|
|
||||||
|
- Visual Search API does not support \`offset\` parameter
|
||||||
|
- Agent Search fallback to Semantic Search
|
||||||
|
- WebSocket not implemented (using polling)
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
- Issues: https://github.com/anomalyco/momentry_studio/issues
|
||||||
|
- Internal: http://localhost:3000/admin/momentry_studio
|
||||||
|
EOF
|
||||||
|
|
||||||
|
log_info "Release notes generated: ${BUILD_DIR}/RELEASE_NOTES.md"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main
|
||||||
|
main() {
|
||||||
|
check_prerequisites
|
||||||
|
clean_build
|
||||||
|
install_deps
|
||||||
|
build_frontend
|
||||||
|
build_proxy
|
||||||
|
build_desktop
|
||||||
|
create_package
|
||||||
|
verify_package
|
||||||
|
generate_notes
|
||||||
|
|
||||||
|
echo "================================================================================"
|
||||||
|
echo " ✅ Build Completed"
|
||||||
|
echo "================================================================================"
|
||||||
|
echo ""
|
||||||
|
echo "Package: ${BUILD_DIR}/${PROJECT_NAME}-v${VERSION}-${TIMESTAMP}.tar.gz"
|
||||||
|
echo "Size: $(du -h ${BUILD_DIR}/${PROJECT_NAME}-v${VERSION}-${TIMESTAMP}.tar.gz | cut -f1)"
|
||||||
|
echo "Checksum: ${BUILD_DIR}/${PROJECT_NAME}-v${VERSION}-${TIMESTAMP}.tar.gz.sha256"
|
||||||
|
echo ""
|
||||||
|
echo "Next steps:"
|
||||||
|
echo "1. Verify prerequisites on target server"
|
||||||
|
echo "2. Copy package to target server"
|
||||||
|
echo "3. Extract and configure"
|
||||||
|
echo "4. Run ./start.sh"
|
||||||
|
echo "5. Verify health check"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Run main
|
||||||
|
main
|
||||||
Reference in New Issue
Block a user