Add extra prompts, endless generation, random character default, and small fixes
- Add extra positive/negative prompt textareas to all 9 detail pages with session persistence - Add Endless generation button to all detail pages (continuous preview generation until stopped) - Default character selector to "Random Character" on all secondary detail pages - Fix queue clear endpoint (remove spurious auth check) - Refactor app.py into routes/ and services/ modules - Update CLAUDE.md with new architecture documentation - Various data file updates and cleanup Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
98
routes/queue_api.py
Normal file
98
routes/queue_api.py
Normal file
@@ -0,0 +1,98 @@
|
||||
import logging
|
||||
from services.job_queue import (
|
||||
_job_queue_lock, _job_queue, _job_history, _queue_worker_event,
|
||||
)
|
||||
|
||||
logger = logging.getLogger('gaze')
|
||||
|
||||
|
||||
def register_routes(app):
|
||||
|
||||
@app.route('/api/queue')
|
||||
def api_queue_list():
|
||||
"""Return the current queue as JSON."""
|
||||
with _job_queue_lock:
|
||||
jobs = [
|
||||
{
|
||||
'id': j['id'],
|
||||
'label': j['label'],
|
||||
'status': j['status'],
|
||||
'error': j['error'],
|
||||
'created_at': j['created_at'],
|
||||
}
|
||||
for j in _job_queue
|
||||
]
|
||||
return {'jobs': jobs, 'count': len(jobs)}
|
||||
|
||||
@app.route('/api/queue/count')
|
||||
def api_queue_count():
|
||||
"""Return just the count of active (non-done, non-failed) jobs."""
|
||||
with _job_queue_lock:
|
||||
count = sum(1 for j in _job_queue if j['status'] in ('pending', 'processing', 'paused'))
|
||||
return {'count': count}
|
||||
|
||||
@app.route('/api/queue/<job_id>/remove', methods=['POST'])
|
||||
def api_queue_remove(job_id):
|
||||
"""Remove a pending or paused job from the queue."""
|
||||
with _job_queue_lock:
|
||||
job = _job_history.get(job_id)
|
||||
if not job:
|
||||
return {'error': 'Job not found'}, 404
|
||||
if job['status'] == 'processing':
|
||||
return {'error': 'Cannot remove a job that is currently processing'}, 400
|
||||
try:
|
||||
_job_queue.remove(job)
|
||||
except ValueError:
|
||||
pass # Already not in queue
|
||||
job['status'] = 'removed'
|
||||
return {'status': 'ok'}
|
||||
|
||||
@app.route('/api/queue/<job_id>/pause', methods=['POST'])
|
||||
def api_queue_pause(job_id):
|
||||
"""Toggle pause/resume on a pending job."""
|
||||
with _job_queue_lock:
|
||||
job = _job_history.get(job_id)
|
||||
if not job:
|
||||
return {'error': 'Job not found'}, 404
|
||||
if job['status'] == 'pending':
|
||||
job['status'] = 'paused'
|
||||
elif job['status'] == 'paused':
|
||||
job['status'] = 'pending'
|
||||
_queue_worker_event.set()
|
||||
else:
|
||||
return {'error': f'Cannot pause/resume job with status {job["status"]}'}, 400
|
||||
return {'status': 'ok', 'new_status': job['status']}
|
||||
|
||||
@app.route('/api/queue/clear', methods=['POST'])
|
||||
def api_queue_clear():
|
||||
"""Clear all pending jobs from the queue (allows current processing job to finish)."""
|
||||
removed_count = 0
|
||||
with _job_queue_lock:
|
||||
pending_jobs = [j for j in _job_queue if j['status'] == 'pending']
|
||||
for job in pending_jobs:
|
||||
try:
|
||||
_job_queue.remove(job)
|
||||
job['status'] = 'removed'
|
||||
removed_count += 1
|
||||
except ValueError:
|
||||
pass
|
||||
logger.info("Cleared %d pending jobs from queue", removed_count)
|
||||
return {'status': 'ok', 'removed_count': removed_count}
|
||||
|
||||
@app.route('/api/queue/<job_id>/status')
|
||||
def api_queue_job_status(job_id):
|
||||
"""Return the status of a specific job."""
|
||||
with _job_queue_lock:
|
||||
job = _job_history.get(job_id)
|
||||
if not job:
|
||||
return {'error': 'Job not found'}, 404
|
||||
resp = {
|
||||
'id': job['id'],
|
||||
'label': job['label'],
|
||||
'status': job['status'],
|
||||
'error': job['error'],
|
||||
'comfy_prompt_id': job['comfy_prompt_id'],
|
||||
}
|
||||
if job.get('result'):
|
||||
resp['result'] = job['result']
|
||||
return resp
|
||||
Reference in New Issue
Block a user