Compare commits
2 Commits
4efdce8983
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| ac7241b1b9 | |||
| b7628ab316 |
@@ -1,5 +1,5 @@
|
||||
# ============================================
|
||||
# TranscriptorIO Configuration
|
||||
# Transcriptarr Configuration
|
||||
# ============================================
|
||||
#
|
||||
# IMPORTANT: Most configuration is now stored in the database
|
||||
|
||||
50
.github/workflows/build_CPU.yml
vendored
50
.github/workflows/build_CPU.yml
vendored
@@ -1,50 +0,0 @@
|
||||
name: Build_Subgen_Dockerfile_CPU
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'requirements.txt'
|
||||
- 'Dockerfile.cpu'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Get version from transcriptarr.py
|
||||
id: get_version
|
||||
run: |
|
||||
version=$(grep -oP "subgen_version\s*=\s*'\K[^']+" subgen.py)
|
||||
echo "version=$version" >> $GITHUB_ENV
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
with:
|
||||
#platforms: all
|
||||
image: tonistiigi/binfmt:qemu-v7.0.0
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Build and push CPU Docker image
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
platforms: linux/amd64,linux/arm64
|
||||
file: ./Dockerfile.cpu
|
||||
push: true
|
||||
tags: |
|
||||
mccloud/subgen:cpu
|
||||
mccloud/subgen:${{ env.version }}-cpu
|
||||
39
.github/workflows/build_GPU.yml
vendored
39
.github/workflows/build_GPU.yml
vendored
@@ -1,39 +0,0 @@
|
||||
name: Build_Subgen_Dockerfile_GPU
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'requirements.txt'
|
||||
- 'Dockerfile'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
runs-on: [self-hosted]
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Get version from transcriptarr.py
|
||||
id: get_version
|
||||
run: |
|
||||
version=$(grep -oP "subgen_version\s*=\s*'\K[^']+" subgen.py)
|
||||
echo "version=$version" >> $GITHUB_ENV
|
||||
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Build and push GPU Docker image
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
tags: |
|
||||
mccloud/subgen:latest
|
||||
mccloud/subgen:${{ env.version }}
|
||||
55
.github/workflows/calver.yml
vendored
55
.github/workflows/calver.yml
vendored
@@ -1,55 +0,0 @@
|
||||
name: Update_CalVer_Amend
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'main'
|
||||
paths:
|
||||
- '../../transcriptarr.py'
|
||||
workflow_dispatch: # Allow manual triggering
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0 # Crucial for getting full history
|
||||
|
||||
- name: Calculate version
|
||||
id: version
|
||||
run: |
|
||||
YEAR=$(date +%Y)
|
||||
MONTH=$(date +%m)
|
||||
COMMIT_COUNT=$(git rev-list --count HEAD --since="$YEAR-$MONTH-01")
|
||||
echo "COMMIT_COUNT=$COMMIT_COUNT"
|
||||
echo "VERSION=${YEAR}.${MONTH}.${COMMIT_COUNT}" >> $GITHUB_ENV
|
||||
|
||||
- name: Update transcriptarr.py with version
|
||||
run: |
|
||||
sed -i "s/subgen_version =.*/subgen_version = '${{ env.VERSION }}'/" subgen.py
|
||||
|
||||
- name: Check if transcriptarr.py was actually changed (compare with HEAD)
|
||||
id: check_change
|
||||
run: |
|
||||
if git diff --quiet HEAD subgen.py; then
|
||||
echo "::set-output name=changed::false"
|
||||
else
|
||||
echo "::set-output name=changed::true"
|
||||
fi
|
||||
|
||||
- name: Amend commit if transcriptarr.py changed
|
||||
if: steps.check_change.outputs.changed == 'true'
|
||||
env:
|
||||
GIT_AUTHOR_NAME: "McCloudS"
|
||||
GIT_AUTHOR_EMAIL: "scott@mccloud.dev"
|
||||
run: |
|
||||
git config user.name "${GIT_AUTHOR_NAME}"
|
||||
git config user.email "${GIT_AUTHOR_EMAIL}"
|
||||
|
||||
git add subgen.py
|
||||
git commit --amend --reuse-message=HEAD --author="${GIT_AUTHOR_NAME} <${GIT_AUTHOR_EMAIL}>" # Amend the last commit
|
||||
|
||||
# Push with force-with-lease (safer than --force)
|
||||
git push --force-with-lease origin HEAD:main
|
||||
@@ -1,4 +1,4 @@
|
||||
# 🎬 TranscriptorIO
|
||||
# 🎬 Transcriptarr
|
||||
|
||||
**AI-powered subtitle transcription service with REST API and Web UI**
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
[](https://vuejs.org/)
|
||||
[](LICENSE)
|
||||
|
||||
TranscriptorIO is an AI-powered subtitle transcription service based on [Subgen](https://github.com/McCloudS/subgen), featuring a modern FastAPI backend with 45+ REST endpoints, a Vue 3 web interface, and a distributed worker pool architecture.
|
||||
Transcriptarr is an AI-powered subtitle transcription service based on [Subgen](https://github.com/McCloudS/subgen), featuring a modern FastAPI backend with 45+ REST endpoints, a Vue 3 web interface, and a distributed worker pool architecture.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# TranscriptorIO REST API
|
||||
# Transcriptarr REST API
|
||||
|
||||
Documentación completa de las APIs REST del backend de TranscriptorIO.
|
||||
Documentación completa de las APIs REST del backend de Transcriptarr.
|
||||
|
||||
## 🚀 Inicio Rápido
|
||||
|
||||
@@ -33,7 +33,7 @@ Información básica de la API.
|
||||
**Response:**
|
||||
```json
|
||||
{
|
||||
"name": "TranscriptorIO API",
|
||||
"name": "Transcriptarr API",
|
||||
"version": "1.0.0",
|
||||
"status": "running"
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
"""TranscriptorIO Backend Package."""
|
||||
"""Transcriptarr Backend Package."""
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
"""API module for TranscriptorIO backend."""
|
||||
"""API module for Transcriptarr backend."""
|
||||
from backend.api.workers import router as workers_router
|
||||
from backend.api.jobs import router as jobs_router
|
||||
from backend.api.scan_rules import router as scan_rules_router
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
"""Main FastAPI application for TranscriptorIO backend."""
|
||||
"""Main FastAPI application for Transcriptarr backend."""
|
||||
import logging
|
||||
import os
|
||||
from contextlib import asynccontextmanager
|
||||
@@ -47,7 +47,7 @@ async def lifespan(app: FastAPI):
|
||||
- Graceful shutdown
|
||||
"""
|
||||
# === STARTUP ===
|
||||
logger.info("=== TranscriptorIO Backend Starting ===")
|
||||
logger.info("=== Transcriptarr Backend Starting ===")
|
||||
|
||||
# Initialize database
|
||||
logger.info("Initializing database...")
|
||||
@@ -158,12 +158,12 @@ async def lifespan(app: FastAPI):
|
||||
else:
|
||||
logger.info("File watcher enabled but no library paths configured")
|
||||
|
||||
logger.info("=== TranscriptorIO Backend Started ===")
|
||||
logger.info("=== Transcriptarr Backend Started ===")
|
||||
|
||||
yield
|
||||
|
||||
# === SHUTDOWN ===
|
||||
logger.info("=== TranscriptorIO Backend Shutting Down ===")
|
||||
logger.info("=== Transcriptarr Backend Shutting Down ===")
|
||||
|
||||
# Stop library scanner first (quick operations)
|
||||
logger.info("Stopping library scanner...")
|
||||
@@ -180,12 +180,12 @@ async def lifespan(app: FastAPI):
|
||||
except Exception as e:
|
||||
logger.warning(f"Error stopping worker pool: {e}")
|
||||
|
||||
logger.info("=== TranscriptorIO Backend Stopped ===")
|
||||
logger.info("=== Transcriptarr Backend Stopped ===")
|
||||
|
||||
|
||||
# Create FastAPI app
|
||||
app = FastAPI(
|
||||
title="TranscriptorIO API",
|
||||
title="Transcriptarr API",
|
||||
description="AI-powered subtitle transcription service",
|
||||
version="1.0.0",
|
||||
lifespan=lifespan
|
||||
@@ -278,7 +278,7 @@ else:
|
||||
async def root():
|
||||
"""Root endpoint - API info."""
|
||||
return {
|
||||
"name": "TranscriptorIO API",
|
||||
"name": "Transcriptarr API",
|
||||
"version": "1.0.0",
|
||||
"status": "running",
|
||||
"message": "Frontend not built. Access API docs at /docs"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
"""CLI entry point for TranscriptorIO backend."""
|
||||
"""CLI entry point for Transcriptarr backend."""
|
||||
import argparse
|
||||
import logging
|
||||
import sys
|
||||
@@ -15,7 +15,7 @@ def main():
|
||||
"""Main CLI entry point."""
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
description="TranscriptorIO - AI-powered subtitle transcription service"
|
||||
description="Transcriptarr - AI-powered subtitle transcription service"
|
||||
)
|
||||
|
||||
# Subcommands
|
||||
@@ -113,7 +113,7 @@ def main():
|
||||
|
||||
def run_server(args):
|
||||
"""Run FastAPI server."""
|
||||
print(f"🚀 Starting TranscriptorIO server on {args.host}:{args.port}")
|
||||
print(f"🚀 Starting Transcriptarr server on {args.host}:{args.port}")
|
||||
print(f"📖 API docs available at: http://{args.host}:{args.port}/docs")
|
||||
|
||||
uvicorn.run(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
"""Configuration management for TranscriptorIO.
|
||||
"""Configuration management for Transcriptarr.
|
||||
|
||||
Most configuration is now stored in the database and managed through the
|
||||
Settings service. Only DATABASE_URL is loaded from environment variables.
|
||||
|
||||
@@ -1 +1 @@
|
||||
"""TranscriptorIO Core Module."""
|
||||
"""Transcriptarr Core Module."""
|
||||
@@ -1,4 +1,4 @@
|
||||
"""Database models for TranscriptorIO."""
|
||||
"""Database models for Transcriptarr."""
|
||||
import uuid
|
||||
from datetime import datetime, timezone
|
||||
from enum import Enum
|
||||
|
||||
@@ -36,7 +36,7 @@ class SetupWizard:
|
||||
True if setup completed successfully
|
||||
"""
|
||||
print("\n" + "=" * 70)
|
||||
print(" 🎬 TranscriptorIO - First Run Setup Wizard")
|
||||
print(" 🎬 Transcriptarr - First Run Setup Wizard")
|
||||
print("=" * 70 + "\n")
|
||||
|
||||
# Step 1: Select mode
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# TranscriptorIO REST API
|
||||
# Transcriptarr REST API
|
||||
|
||||
Complete documentation for the TranscriptorIO backend REST API.
|
||||
Complete documentation for the Transcriptarr backend REST API.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
@@ -52,7 +52,7 @@ Root endpoint - API info or frontend (if built).
|
||||
**Response (API mode):**
|
||||
```json
|
||||
{
|
||||
"name": "TranscriptorIO API",
|
||||
"name": "Transcriptarr API",
|
||||
"version": "1.0.0",
|
||||
"status": "running",
|
||||
"message": "Frontend not built. Access API docs at /docs"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# TranscriptorIO Backend Architecture
|
||||
# Transcriptarr Backend Architecture
|
||||
|
||||
Technical documentation of the backend architecture, components, and data flow.
|
||||
|
||||
@@ -22,7 +22,7 @@ Technical documentation of the backend architecture, components, and data flow.
|
||||
|
||||
## Overview
|
||||
|
||||
TranscriptorIO is built with a modular architecture consisting of:
|
||||
Transcriptarr is built with a modular architecture consisting of:
|
||||
|
||||
- **FastAPI Server**: REST API with 45+ endpoints
|
||||
- **Worker Pool**: Multiprocessing-based transcription workers (CPU/GPU)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# TranscriptorIO Configuration
|
||||
# Transcriptarr Configuration
|
||||
|
||||
Complete documentation for the configuration system.
|
||||
|
||||
@@ -16,7 +16,7 @@ Complete documentation for the configuration system.
|
||||
|
||||
## Overview
|
||||
|
||||
TranscriptorIO uses a **database-backed configuration system**. All settings are stored in the `system_settings` table and can be managed through:
|
||||
Transcriptarr uses a **database-backed configuration system**. All settings are stored in the `system_settings` table and can be managed through:
|
||||
|
||||
1. **Setup Wizard** (first run)
|
||||
2. **Web UI** (Settings page)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# TranscriptorIO Frontend
|
||||
# Transcriptarr Frontend
|
||||
|
||||
Technical documentation for the Vue 3 frontend application.
|
||||
|
||||
@@ -20,7 +20,7 @@ Technical documentation for the Vue 3 frontend application.
|
||||
|
||||
## Overview
|
||||
|
||||
The TranscriptorIO frontend is a Single Page Application (SPA) built with Vue 3, featuring:
|
||||
The Transcriptarr frontend is a Single Page Application (SPA) built with Vue 3, featuring:
|
||||
|
||||
- **6 Complete Views**: Dashboard, Queue, Scanner, Rules, Workers, Settings
|
||||
- **Real-time Updates**: Polling-based status updates
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# TranscriptorIO Frontend
|
||||
# Transcriptarr Frontend
|
||||
|
||||
Vue 3 + TypeScript + Vite frontend for TranscriptorIO.
|
||||
Vue 3 + TypeScript + Vite frontend for Transcriptarr.
|
||||
|
||||
## 🚀 Quick Start
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<meta charset="UTF-8">
|
||||
<link rel="icon" href="/favicon.ico">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>TranscriptorIO</title>
|
||||
<title>Transcriptarr</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "transcriptorio-ui",
|
||||
"version": "1.0.0",
|
||||
"description": "TranscriptorIO Web UI - Vue 3 Frontend",
|
||||
"description": "Transcriptarr Web UI - Vue 3 Frontend",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "🎬 TranscriptorIO Frontend - Setup Script"
|
||||
echo "🎬 Transcriptarr Frontend - Setup Script"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<div class="container">
|
||||
<div class="header-content">
|
||||
<div class="logo">
|
||||
<h1>🎬 TranscriptorIO</h1>
|
||||
<h1>🎬 Transcriptarr</h1>
|
||||
<span class="subtitle">AI-Powered Subtitle Transcription</span>
|
||||
</div>
|
||||
<nav class="main-nav">
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
<footer class="app-footer">
|
||||
<div class="container">
|
||||
<p>© 2026 TranscriptorIO | Powered by Whisper AI</p>
|
||||
<p>© 2026 Transcriptarr | Powered by Whisper AI</p>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
<div class="setup-wizard-overlay">
|
||||
<div class="wizard-container">
|
||||
<div class="wizard-header">
|
||||
<h1>🎬 Welcome to TranscriptorIO</h1>
|
||||
<h1>🎬 Welcome to Transcriptarr</h1>
|
||||
<p>Let's get you set up in just a few steps</p>
|
||||
</div>
|
||||
|
||||
<!-- Step 1: Choose Mode -->
|
||||
<div v-if="currentStep === 1" class="wizard-step">
|
||||
<h2>Choose Operation Mode</h2>
|
||||
<p class="step-description">How would you like to use TranscriptorIO?</p>
|
||||
<p class="step-description">How would you like to use Transcriptarr?</p>
|
||||
|
||||
<div class="mode-cards">
|
||||
<div
|
||||
@@ -150,7 +150,7 @@
|
||||
<!-- Scanner Configuration -->
|
||||
<div class="config-section">
|
||||
<h3 class="section-title">⏰ Automatic Scanning</h3>
|
||||
<p class="section-description">How often should TranscriptorIO scan your libraries for new content?</p>
|
||||
<p class="section-description">How often should Transcriptarr scan your libraries for new content?</p>
|
||||
|
||||
<div class="scanner-config">
|
||||
<div class="form-group">
|
||||
@@ -298,7 +298,7 @@
|
||||
<!-- Step 2b: Bazarr Slave Configuration -->
|
||||
<div v-if="currentStep === 2 && selectedMode === 'bazarr_slave'" class="wizard-step">
|
||||
<h2>Bazarr Provider Configuration</h2>
|
||||
<p class="step-description">Use these details to add TranscriptorIO as a provider in Bazarr</p>
|
||||
<p class="step-description">Use these details to add Transcriptarr as a provider in Bazarr</p>
|
||||
|
||||
<div v-if="bazarrInfo" class="bazarr-info-card">
|
||||
<div class="info-section">
|
||||
@@ -319,7 +319,7 @@
|
||||
|
||||
<div class="info-section">
|
||||
<h3>Provider Type</h3>
|
||||
<code>TranscriptorIO (Whisper AI)</code>
|
||||
<code>Transcriptarr (Whisper AI)</code>
|
||||
</div>
|
||||
|
||||
<div class="info-instructions">
|
||||
@@ -346,7 +346,7 @@
|
||||
<div v-if="currentStep === 5" class="wizard-step completion">
|
||||
<div class="completion-icon">✅</div>
|
||||
<h2>Setup Complete!</h2>
|
||||
<p>TranscriptorIO is ready to use</p>
|
||||
<p>Transcriptarr is ready to use</p>
|
||||
<button @click="finishSetup" class="btn btn-primary btn-lg">
|
||||
Go to Dashboard →
|
||||
</button>
|
||||
|
||||
@@ -46,7 +46,7 @@ const router = createRouter({
|
||||
})
|
||||
|
||||
router.beforeEach((to, _from, next) => {
|
||||
document.title = `${to.meta.title || 'TranscriptorIO'} - TranscriptorIO`
|
||||
document.title = `${to.meta.title || 'Transcriptarr'} - Transcriptarr`
|
||||
next()
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user