93 lines
3.0 KiB
JavaScript
93 lines
3.0 KiB
JavaScript
const express = require('express');
|
|
const cors = require('cors');
|
|
const axios = require('axios');
|
|
|
|
const app = express();
|
|
const port = 3000;
|
|
|
|
// Конфигурация API Stable Diffusion
|
|
const SD_API_URL = process.env.SD_API_URL || 'http://localhost:7860';
|
|
|
|
app.use(cors());
|
|
app.use(express.json());
|
|
|
|
// Middleware для логирования запросов
|
|
app.use((req, res, next) => {
|
|
console.log(`${req.method} ${req.path}`);
|
|
next();
|
|
});
|
|
|
|
// Прокси для txt2img
|
|
app.post('/api/txt2img', async (req, res) => {
|
|
try {
|
|
const response = await axios.post(`${SD_API_URL}/sdapi/v1/txt2img`, req.body);
|
|
res.json(response.data);
|
|
} catch (error) {
|
|
console.error('Ошибка при запросе к Stable Diffusion API:', error);
|
|
res.status(500).json({
|
|
error: 'Ошибка при генерации изображения',
|
|
details: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// Прокси для получения прогресса
|
|
app.get('/api/progress', async (req, res) => {
|
|
try {
|
|
const response = await axios.get(`${SD_API_URL}/sdapi/v1/progress`);
|
|
res.json({
|
|
...response.data,
|
|
percentage: Math.round(response.data.progress * 100)
|
|
});
|
|
} catch (error) {
|
|
console.error('Ошибка при получении прогресса:', error);
|
|
res.status(500).json({
|
|
error: 'Ошибка при получении прогресса',
|
|
details: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// Прокси для получения списка моделей
|
|
app.get('/api/models', async (req, res) => {
|
|
try {
|
|
const response = await axios.get(`${SD_API_URL}/sdapi/v1/sd-models`);
|
|
res.json(response.data);
|
|
} catch (error) {
|
|
console.error('Ошибка при получении списка моделей:', error);
|
|
res.status(500).json({
|
|
error: 'Ошибка при получении списка моделей',
|
|
details: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// Прокси для изменения модели
|
|
app.post('/api/models/switch', async (req, res) => {
|
|
try {
|
|
const response = await axios.post(`${SD_API_URL}/sdapi/v1/options`, {
|
|
sd_model_checkpoint: req.body.model_name
|
|
});
|
|
res.json({ success: true });
|
|
} catch (error) {
|
|
console.error('Ошибка при переключении модели:', error);
|
|
res.status(500).json({
|
|
error: 'Ошибка при переключении модели',
|
|
details: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// Обработка ошибок
|
|
app.use((err, req, res, next) => {
|
|
console.error(err.stack);
|
|
res.status(500).json({
|
|
error: 'Внутренняя ошибка сервера',
|
|
details: err.message
|
|
});
|
|
});
|
|
|
|
app.listen(port, () => {
|
|
console.log(`Сервер запущен на порту ${port}`);
|
|
console.log(`Stable Diffusion API URL: ${SD_API_URL}`);
|
|
});
|