| from flask import Flask, request, send_file, jsonify |
| import os |
| import sys |
| import io |
| import logging |
| from database import init_db, close_db, get_db_path |
|
|
| |
| sys.path.append(os.path.dirname(os.path.abspath(__file__))) |
|
|
| |
| os.environ['NUMBA_DISABLE_JIT'] = '1' |
| os.environ['TORCH_HOME'] = '/tmp/torch_cache' |
| os.environ['U2NET_HOME'] = '/tmp/.u2net' |
|
|
| |
| os.makedirs('/tmp/torch_cache', exist_ok=True) |
| os.makedirs('/tmp/.u2net', exist_ok=True) |
|
|
| |
| logging.basicConfig(level=logging.INFO) |
| logger = logging.getLogger(__name__) |
|
|
| |
| try: |
| from get_methods import get_users, get_user |
| from post_methods import add_user |
| from consume_method import consume_user |
| from animegan_method import generate_anime |
| from rembg_method import remove_background |
| from halftone_method import apply_halftone |
| except ImportError as e: |
| logger.error(f"Import hatası: {e}") |
| raise |
|
|
| app = Flask(__name__) |
| init_db(app) |
|
|
| @app.route('/') |
| def home(): |
| return "StableDiffusionAPI Türkçe" |
|
|
| |
| app.route('/users', methods=['GET'])(get_users) |
| app.route('/user/<string:udid>', methods=['GET'])(get_user) |
| app.route('/add-user', methods=['POST'])(add_user) |
| app.route('/consume/<string:udid>', methods=['POST'])(consume_user) |
|
|
| |
| @app.route('/generate', methods=['POST']) |
| def generate(): |
| try: |
| if 'image' not in request.files: |
| logger.error("No file provided") |
| return jsonify({'error': 'No image provided'}), 400 |
| |
| file = request.files['image'] |
| if file.filename == '': |
| logger.error("Empty file provided") |
| return jsonify({'error': 'No selected file'}), 400 |
| |
| img_io = generate_anime(file.read()) |
| return send_file(img_io, mimetype='image/png') |
| except Exception as e: |
| logger.error(f"Unexpected error: {str(e)}", exc_info=True) |
| return jsonify({'error': str(e)}), 500 |
|
|
| @app.route('/remove-bg', methods=['POST']) |
| def remove_bg(): |
| try: |
| if 'image' not in request.files: |
| logger.error("No file provided") |
| return jsonify({'error': 'No image provided'}), 400 |
| |
| file = request.files['image'] |
| if file.filename == '': |
| logger.error("Empty file provided") |
| return jsonify({'error': 'No selected file'}), 400 |
| |
| max_size = 10 * 1024 * 1024 |
| file_data = file.read() |
| if len(file_data) > max_size: |
| logger.error(f"File too large: {len(file_data)} bytes") |
| return jsonify({'error': 'File too large (max 10MB)'}), 400 |
| |
| img_io = remove_background(file_data) |
| return send_file(img_io, mimetype='image/png') |
| except Exception as e: |
| logger.error(f"Unexpected error: {str(e)}", exc_info=True) |
| return jsonify({'error': str(e)}), 500 |
|
|
| @app.route('/halftone', methods=['POST']) |
| def halftone(): |
| try: |
| if 'image' not in request.files: |
| logger.error("No file provided") |
| return jsonify({'error': 'No image provided'}), 400 |
| |
| file = request.files['image'] |
| if file.filename == '': |
| logger.error("Empty file provided") |
| return jsonify({'error': 'No selected file'}), 400 |
| |
| max_size = 10 * 1024 * 1024 |
| file_data = file.read() |
| if len(file_data) > max_size: |
| logger.error(f"File too large: {len(file_data)} bytes") |
| return jsonify({'error': 'File too large (max 10MB)'}), 400 |
| |
| dot_size = int(request.form.get('dot_size', 10)) |
| img_io = apply_halftone(file_data, dot_size) |
| return send_file(img_io, mimetype='image/png') |
| except Exception as e: |
| logger.error(f"Unexpected error: {str(e)}", exc_info=True) |
| return jsonify({'error': str(e)}), 500 |
|
|
| @app.teardown_appcontext |
| def shutdown_session(exception=None): |
| close_db() |
|
|
| if __name__ == '__main__': |
| db_path = get_db_path() |
| os.makedirs(os.path.dirname(db_path), exist_ok=True) |
| app.run(host='0.0.0.0', port=7860, debug=True) |