Spaces:
Sleeping
Sleeping
File size: 3,221 Bytes
514a62d a95ab94 b304d50 514a62d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
import express from 'express';
import multer from 'multer';
import cors from 'cors';
const app = express();
const PORT = process.env.PORT || 7860;
// Middleware
app.use(cors());
app.use(express.json({ limit: '50mb' }));
app.use(express.urlencoded({ extended: true, limit: '50mb' }));
// Serve static files from public directory
app.use(express.static('public'));
// Configure multer for file uploads
const upload = multer({
storage: multer.memoryStorage(),
limits: {
fileSize: 10 * 1024 * 1024, // 10MB limit
},
fileFilter: (req, file, cb) => {
if (file.mimetype.startsWith('image/')) {
cb(null, true);
} else {
cb(new Error('Only image files are allowed'), false);
}
}
});
// Health check endpoint
app.get('/', (req, res) => {
res.json({
status: 'ok',
message: 'AI Image Upscaler API (Simple Mode)',
version: '1.0.0',
note: 'This is a simplified version. Full AI upscaling requires TensorFlow.js dependencies.',
endpoints: {
upscale: 'POST /upscale',
health: 'GET /'
}
});
});
// Simplified upscale endpoint (placeholder)
app.post('/upscale', upload.single('image'), async (req, res) => {
try {
if (!req.file) {
return res.status(400).json({ error: 'No image file provided' });
}
const { scale = 2, modelType = 'esrgan-slim', patchSize = 128, padding = 8 } = req.body;
console.log(`Received upscale request: ${req.file.originalname}, scale: ${scale}x, model: ${modelType}`);
// For now, return the original image as base64 (placeholder)
const originalImageBase64 = `data:${req.file.mimetype};base64,${req.file.buffer.toString('base64')}`;
// Simulate processing time
await new Promise(resolve => setTimeout(resolve, 1000));
res.json({
success: true,
result: originalImageBase64,
metadata: {
scale: parseInt(scale),
modelType: modelType,
patchSize: parseInt(patchSize),
padding: parseInt(padding),
processingTime: 1000,
backend: 'placeholder',
note: 'This is a placeholder response. Install TensorFlow.js dependencies for actual AI upscaling.'
}
});
} catch (error) {
console.error('Upscaling error:', error);
res.status(500).json({
error: 'Failed to process image',
message: error.message
});
}
});
// Error handling middleware
app.use((error, req, res, next) => {
if (error instanceof multer.MulterError) {
if (error.code === 'LIMIT_FILE_SIZE') {
return res.status(400).json({ error: 'File too large. Maximum size is 10MB' });
}
}
console.error('Unhandled error:', error);
res.status(500).json({ error: 'Internal server error' });
});
// Start server
app.listen(PORT, '0.0.0.0', () => {
console.log(`π Simple Upscaler API server running on port ${PORT}`);
console.log(`π Note: This is a simplified version without AI processing`);
console.log(`π Health check: http://localhost:${PORT}/`);
console.log(`π Web interface: http://localhost:${PORT}/index.html`);
});
// Handle graceful shutdown
process.on('SIGTERM', () => {
console.log('Received SIGTERM, shutting down gracefully...');
process.exit(0);
});
|