Spaces:
Sleeping
Sleeping
File size: 4,657 Bytes
e890ceb |
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 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
// const express = require('express');
// const multer = require('multer');
// const { generateShadow } = require('../core/shadowGenerator');
// const router = express.Router();
// // Store file in memory (not on disk)
// const storage = multer.memoryStorage();
// const upload = multer({ storage });
// // POST /api/shadow/generate
// router.post('/generate', upload.single('image'), async (req, res) => {
// try {
// if (!req.file) {
// return res.status(400).json({ success: false, error: 'No image uploaded' });
// }
// const options = {
// type: req.body.type || 'cast', // 'cast' | 'drop' | 'flat' | 'box'
// dir: req.body.dir || 'back', // used only for drop/flat/box
// blur: parseInt(req.body.blur) || 20,
// opacity: parseFloat(req.body.opacity) || 0.4,
// lightX: req.body.lightX ? parseInt(req.body.lightX) : null,
// lightY: req.body.lightY ? parseInt(req.body.lightY) : null
// };
// const buffer = await generateShadow(req.file.buffer, options);
// // Send back as image/png directly
// res.set('Content-Type', 'image/png');
// res.send(buffer);
// } catch (err) {
// console.error('❌ Shadow generation error:', err);
// res.status(500).json({ success: false, error: 'Shadow generation failed' });
// }
// });
// module.exports = router;
// const express = require('express');
// const multer = require('multer');
// const { generateShadow } = require('../core/shadowGenerator');
// const router = express.Router();
// // Use memory storage for uploaded file
// const storage = multer.memoryStorage();
// const upload = multer({ storage });
// router.post('/generate', upload.single('image'), async (req, res) => {
// try {
// if (!req.file) {
// return res.status(400).json({ success: false, error: 'No image uploaded' });
// }
// // Parse options correctly
// const options = {
// type: req.body.mode || 'cast', // match frontend "mode"
// dir: req.body.dir || 'back',
// blur: req.body.blur ? parseFloat(req.body.blur) : 20, // ensure number
// opacity: req.body.opacity ? parseFloat(req.body.opacity) : 0.35,
// lightX: req.body.lightX ? parseFloat(req.body.lightX) : null,
// lightY: req.body.lightY ? parseFloat(req.body.lightY) : null
// };
// const buffer = await generateShadow(req.file.buffer, options);
// res.set('Content-Type', 'image/png');
// res.send(buffer);
// } catch (err) {
// console.error('❌ Shadow generation error:', err);
// res.status(500).json({ success: false, error: 'Shadow generation failed' });
// }
// });
// module.exports = router;
const express = require('express');
const multer = require('multer');
const {
addTask,
getTaskStatus,
getTaskResult,
getQueueLength
} = require('../../queue');
const router = express.Router();
const upload = multer({ storage: multer.memoryStorage() });
// ---------------- Submit new shadow task ----------------
router.post('/add-shadow', upload.single('file'), async (req, res) => {
try {
if (!req.file) {
return res.status(400).json({ error: 'No image uploaded' });
}
const options = {
type: req.body.type || 'cast',
dir: req.body.dir || 'back',
blur: req.body.blur ? parseFloat(req.body.blur) : 20,
opacity: req.body.opacity ? parseFloat(req.body.opacity) : 0.35,
lightX: req.body.lightX ? parseFloat(req.body.lightX) : null,
lightY: req.body.lightY ? parseFloat(req.body.lightY) : null,
};
const taskId = await addTask(req.file.buffer, options);
res.json({ task_id: taskId });
} catch (err) {
console.error('❌ Error adding shadow task:', err);
res.status(500).json({ error: 'Failed to add shadow task' });
}
});
// ---------------- Queue status ----------------
router.get('/status', (req, res) => {
res.json({
status: 'ok',
queue_length: getQueueLength(),
});
});
// ---------------- Fetch result ----------------
router.get('/result/:id', (req, res) => {
const taskId = req.params.id;
const status = getTaskStatus(taskId);
if (status === 'pending') return res.sendStatus(202);
if (status === 'failed') return res.status(500).json({ error: 'Shadow generation failed' });
const result = getTaskResult(taskId);
if (!result) return res.status(404).json({ error: 'Result not found' });
res.set('Content-Type', 'image/png');
res.send(result);
});
module.exports = router;
|