Воркед
This commit is contained in:
1 parent
ac32c55ab9
commit
ee94d8e529
1138 files changed
+55771
-77901
No files matched your search
@@ -6,95 +6,88 @@ const app = express();
|
||||
const port = 3000;
|
||||
|
||||
// Конфигурация API Stable Diffusion
|
||||
const SD_API_URL = 'http://localhost:7860';
|
||||
const SD_API_URL = process.env.SD_API_URL || 'http://localhost:7860';
|
||||
|
||||
app.use(cors());
|
||||
app.use(express.json());
|
||||
|
||||
// Прокси для txt2img с отслеживанием прогресса
|
||||
// Middleware для логирования запросов
|
||||
app.use((req, res, next) => {
|
||||
console.log(`${req.method} ${req.path}`);
|
||||
next();
|
||||
});
|
||||
|
||||
// Прокси для txt2img
|
||||
app.post('/api/txt2img', async (req, res) => {
|
||||
try {
|
||||
// Отправляем запрос на генерацию
|
||||
const generationPromise = axios.post(`${SD_API_URL}/sdapi/v1/txt2img`, req.body);
|
||||
|
||||
// Начинаем отслеживать прогресс сразу
|
||||
let isGenerating = true;
|
||||
let lastProgress = 0;
|
||||
|
||||
while (isGenerating) {
|
||||
try {
|
||||
const progressResponse = await axios.get(`${SD_API_URL}/sdapi/v1/progress`);
|
||||
const progress = progressResponse.data;
|
||||
|
||||
if (progress.progress >= 1.0) {
|
||||
isGenerating = false;
|
||||
}
|
||||
|
||||
// Если прогресс изменился, обновляем lastProgress
|
||||
if (progress.progress !== lastProgress) {
|
||||
lastProgress = progress.progress;
|
||||
console.log(`Прогресс генерации: ${Math.round(progress.progress * 100)}%`);
|
||||
}
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, 100));
|
||||
} catch (error) {
|
||||
console.error('Ошибка при получении прогресса:', error);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Ждем завершения генерации
|
||||
const response = await generationPromise;
|
||||
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: 'Ошибка при генерации изображения' });
|
||||
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`);
|
||||
const progress = response.data;
|
||||
|
||||
// Добавляем дополнительную информацию о прогрессе
|
||||
const result = {
|
||||
...progress,
|
||||
percentage: Math.round(progress.progress * 100),
|
||||
current_step: progress.state?.sampling_step || 0,
|
||||
total_steps: progress.state?.sampling_steps || 1
|
||||
};
|
||||
|
||||
res.json(result);
|
||||
res.json({
|
||||
...response.data,
|
||||
percentage: Math.round(response.data.progress * 100)
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Ошибка при получении прогресса:', error);
|
||||
res.status(500).json({ error: 'Ошибка при получении прогресса' });
|
||||
res.status(500).json({
|
||||
error: 'Ошибка при получении прогресса',
|
||||
details: error.message
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Прокси для получения моделей
|
||||
app.get('/api/sd-models', async (req, res) => {
|
||||
// Прокси для получения списка моделей
|
||||
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: 'Ошибка при получении списка моделей' });
|
||||
res.status(500).json({
|
||||
error: 'Ошибка при получении списка моделей',
|
||||
details: error.message
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Прокси для получения сэмплеров
|
||||
app.get('/api/samplers', async (req, res) => {
|
||||
// Прокси для изменения модели
|
||||
app.post('/api/models/switch', async (req, res) => {
|
||||
try {
|
||||
const response = await axios.get(`${SD_API_URL}/sdapi/v1/samplers`);
|
||||
res.json(response.data);
|
||||
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: 'Ошибка при получении списка сэмплеров' });
|
||||
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}`);
|
||||
});
|
||||
Reference in new issue
Block a user