{ "nodes":[ {"id":"root-1","type":"text","text":"# πŸ“Έ ΠŸΡ€ΠΎΡ†Π΅ΡΡ создания Ρ„ΠΎΡ‚ΠΎ-ΠΊΠΎΠ»Π»Π°ΠΆΠ° ΠΈΠ· людСй\n\nΠ­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ описываСт ΠΏΠΎΠ»Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ»: ΠΎΡ‚ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΠΎΡ‚ΠΎΡΡŠΠ΅ΠΌΠΊΠΈ Π΄ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ динамичСского ΠΊΠΎΠ»Π»Π°ΠΆΠ°.","x":0,"y":0,"width":400,"height":180,"color":"4"}, {"id":"photo-title","type":"text","text":"# πŸ“· Π­Ρ‚Π°ΠΏ 1: Π€ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅","x":-450,"y":-300,"width":350,"height":80,"color":"1"}, {"id":"photo-1","type":"text","text":"## πŸ› οΈ ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΈ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅\n\n- **ΠšΠ°ΠΌΠ΅Ρ€Π°**: Full-frame ΠΈΠ»ΠΈ качСствСнный смартфон с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ RAW.\n- **ΠžΡΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅**: \n - ΠœΠΈΠ½ΠΈΠΌΡƒΠΌ 3 Ρ‚ΠΎΡ‡ΠΊΠΈ свСта (Ρ€ΠΈΡΡƒΡŽΡ‰ΠΈΠΉ, Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ²ΠΎΠΉ).\n - ИспользованиС софтбоксов для мягких Ρ‚Π΅Π½Π΅ΠΉ.\n- **Π€ΠΎΠ½**: ΠžΠ΄Π½ΠΎΡ‚ΠΎΠ½Π½Ρ‹ΠΉ (сСрый ΠΈΠ»ΠΈ Π±Π΅Π»Ρ‹ΠΉ) для Π»Π΅Π³ΠΊΠΎΠΉ ΠΎΠ±Ρ€Π΅Π·ΠΊΠΈ, Π»ΠΈΠ±ΠΎ Ρ…Ρ€ΠΎΠΌΠ°ΠΊΠ΅ΠΉ (Π·Π΅Π»Π΅Π½Ρ‹ΠΉ).","x":-450,"y":-200,"width":350,"height":250,"color":"1"}, {"id":"photo-2","type":"text","text":"## 🎭 БъСмка ΠΈ ΠΏΠΎΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅\n\n- **Π•Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅**: БъСмка всСх людСй с ΠΎΠ΄Π½ΠΎΠ³ΠΎ ракурса (Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π³Π»Π°Π·) ΠΈ ΠΏΡ€ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΌ освСщСнии.\n- **Π’Π°Ρ€ΠΈΠ°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ**: Запрос Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… эмоций (Π½Π΅ΠΉΡ‚Ρ€Π°Π»ΡŒΠ½Π°Ρ, ΡƒΠ»Ρ‹Π±ΠΊΠ°, ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅) для Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ Π² ΠΊΠΎΠ»Π»Π°ΠΆΠ΅.\n- **ВСхничСская чистота**: Π“Π»ΡƒΠ±ΠΈΠ½Π° рСзкости (f/8 - f/11), Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Π»ΠΈΡ†ΠΎ Π±Ρ‹Π»ΠΎ Π² фокусС.","x":-450,"y":80,"width":350,"height":220,"color":"1"}, {"id":"photo-3","type":"text","text":"## πŸ“ ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ…\n\n- **Π€ΠΎΡ€ΠΌΠ°Ρ‚**: Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π² PNG с Π°Π»ΡŒΡ„Π°-ΠΊΠ°Π½Π°Π»ΠΎΠΌ (послС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ).\n- **ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅**: ИмСнованиС Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎ ID ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (`user_123_pose_1.png`).\n- **Бэкап**: ΠžΠ±Π»Π°Ρ‡Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ (S3/Drive) для исходников.","x":-450,"y":330,"width":350,"height":180,"color":"1"}, {"id":"collage-title","type":"text","text":"# 🧩 Π­Ρ‚Π°ΠΏ 2: Π‘Π±ΠΎΡ€ΠΊΠ° ΠΊΠΎΠ»Π»Π°ΠΆΠ°","x":0,"y":250,"width":400,"height":80,"color":"2"}, {"id":"collage-1","type":"text","text":"## βœ‚οΈ ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ AI\n\n- **Background Removal**: АвтоматичСская ΠΎΠ±Ρ€Π΅Π·ΠΊΠ° Ρ„ΠΎΠ½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ AI (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, модСль Segment Anything ΠΎΡ‚ Meta ΠΈΠ»ΠΈ API Remove.bg).\n- **Face Alignment**: Π¦Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΠΈΡ† ΠΏΠΎ Π³Π»Π°Π·Π°ΠΌ для Π³Π°Ρ€ΠΌΠΎΠ½ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° Π² сСткС.\n- **ЦвСтокоррСкция**: ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ прСсСта (LUT) ΠΊΠΎ всСм Ρ„ΠΎΡ‚ΠΎ для Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ цСлостности.","x":0,"y":350,"width":400,"height":220,"color":"2"}, {"id":"collage-2","type":"text","text":"## πŸ“ Алгоритмы ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ\n\n- **Grid Layout**: ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠ°Ρ сСтка (просто, Π½ΠΎ скучно).\n- **Masonry/Packing**: ΠŸΠ»ΠΎΡ‚Π½Π°Ρ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° Ρ„ΠΎΡ‚ΠΎ Ρ€Π°Π·Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Bin Packing).\n- **Artistic Mosaic**: ГСнСрация большой ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ ΠΈΠ· ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… Π»ΠΈΡ† (Ρ„ΠΎΡ‚ΠΎ-ΠΌΠΎΠ·Π°ΠΈΠΊΠ°).","x":0,"y":600,"width":400,"height":200,"color":"2"}, {"id":"prog-title","type":"text","text":"# πŸ’» Π­Ρ‚Π°ΠΏ 3: ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ","x":450,"y":-300,"width":400,"height":80,"color":"3"}, {"id":"prog-1","type":"text","text":"## βš™οΈ Backend (Node.js/Nuxt)\n\n- **Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ°**: API Π½Π° Π±Π°Π·Π΅ `h3` с использованиСм `multer` ΠΈΠ»ΠΈ `formidable`.\n- **ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°**: Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° **Sharp** для измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, сТатия ΠΈ налоТСния водяных Π·Π½Π°ΠΊΠΎΠ².\n- **ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ**: ИспользованиС `BullMQ` + `Redis` для тяТСлых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ»Π»Π°ΠΆΠ°.","x":450,"y":-200,"width":400,"height":200,"color":"3"}, {"id":"prog-2","type":"text","text":"## 🎨 Frontend (Vue 3 / Canvas)\n\n- **Π Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³**: \n - HTML5 Canvas API для статичСских ΠΊΠΎΠ»Π»Π°ΠΆΠ΅ΠΉ.\n - `CSS Grid` + `Framer Motion` для ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… Π²Π΅Π±-ΠΊΠΎΠ»Π»Π°ΠΆΠ΅ΠΉ.\n- **ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ**: Lazy loading ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, использованиС WebP Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°.","x":450,"y":30,"width":400,"height":180,"color":"3"}, {"id":"prog-3","type":"text","text":"## πŸ—„οΈ Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ Π‘Π”\n\n- **Prisma + PostgreSQL**:\n - Π’Π°Π±Π»ΠΈΡ†Π° `Photos`: `id`, `userId`, `url`, `coordinates` (Π² ΠΊΠΎΠ»Π»Π°ΠΆΠ΅).\n- **S3 Storage**: Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ самих Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (MinIO для Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… тСстов).","x":450,"y":240,"width":400,"height":180,"color":"3"}, {"id":"prog-4","type":"text","text":"## πŸ€– AI Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ\n\n- **Face Detection**: ИспользованиС `face-api.js` Π½Π° Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π΅ ΠΈΠ»ΠΈ `Mediapipe` Π½Π° бэкСндС для автоматичСского опрСдСлСния Π³Ρ€Π°Π½ΠΈΡ† Π»ΠΈΡ†Π°.\n- **Smart Crop**: ΠžΠ±Ρ€Π΅Π·ΠΊΠ° Ρ„ΠΎΡ‚ΠΎ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»ΠΈΡ†ΠΎ всСгда Π±Ρ‹Π»ΠΎ Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ ΠΊΠ°Π΄Ρ€Π°.","x":450,"y":450,"width":400,"height":200,"color":"3"} ], "edges":[ {"id":"e1","fromNode":"root-1","fromSide":"left","toNode":"photo-title","toSide":"right","color":"1"}, {"id":"e2","fromNode":"root-1","fromSide":"bottom","toNode":"collage-title","toSide":"top","color":"2"}, {"id":"e3","fromNode":"root-1","fromSide":"right","toNode":"prog-title","toSide":"left","color":"3"}, {"id":"ep1","fromNode":"photo-title","fromSide":"bottom","toNode":"photo-1","toSide":"top","color":"1"}, {"id":"ep2","fromNode":"photo-1","fromSide":"bottom","toNode":"photo-2","toSide":"top","color":"1"}, {"id":"ep3","fromNode":"photo-2","fromSide":"bottom","toNode":"photo-3","toSide":"top","color":"1"}, {"id":"ec1","fromNode":"collage-title","fromSide":"bottom","toNode":"collage-1","toSide":"top","color":"2"}, {"id":"ec2","fromNode":"collage-1","fromSide":"bottom","toNode":"collage-2","toSide":"top","color":"2"}, {"id":"eg1","fromNode":"prog-title","fromSide":"bottom","toNode":"prog-1","toSide":"top","color":"3"}, {"id":"eg2","fromNode":"prog-1","fromSide":"bottom","toNode":"prog-2","toSide":"top","color":"3"}, {"id":"eg3","fromNode":"prog-2","fromSide":"bottom","toNode":"prog-3","toSide":"top","color":"3"}, {"id":"eg4","fromNode":"prog-3","fromSide":"bottom","toNode":"prog-4","toSide":"top","color":"3"}, {"id":"e-photo-to-collage","fromNode":"photo-3","fromSide":"right","toNode":"collage-1","toSide":"left","color":"1","label":"ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Ρ„Π°ΠΉΠ»ΠΎΠ²"}, {"id":"e-prog-to-collage","fromNode":"prog-4","fromSide":"left","toNode":"collage-1","toSide":"right","color":"3","label":"Автоматизация"} ] }