<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>AI Art Generator</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            background: #0f0f1a;
            color: #fff;
            font-family: 'Segoe UI', sans-serif;
            min-height: 100vh;
            display: flex;
            flex-direction: column;
            align-items: center;
            padding: 2rem;
        }

        .container {
            max-width: 1200px;
            width: 100%;
        }

        .camera-container {
            position: relative;
            width: 640px;
            height: 480px;
            margin: 2rem auto;
            border-radius: 15px;
            overflow: hidden;
            box-shadow: 0 0 20px rgba(0,0,255,0.3);
        }

        #video {
            width: 100%;
            height: 100%;
            object-fit: cover;
            transform: scaleX(-1);
        }

        #canvas {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            mix-blend-mode: difference;
        }

        .controls {
            display: flex;
            gap: 1rem;
            justify-content: center;
            margin: 2rem 0;
        }

        button {
            background: #4a4af0;
            color: white;
            border: none;
            padding: 1rem 2rem;
            border-radius: 25px;
            cursor: pointer;
            font-size: 1rem;
            transition: all 0.3s ease;
        }

        button:hover {
            background: #2a2ad0;
            transform: translateY(-2px);
        }

        .art-gallery {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
            gap: 2rem;
            margin-top: 3rem;
        }

        .art-piece {
            position: relative;
            border-radius: 10px;
            overflow: hidden;
            transition: transform 0.3s ease;
        }

        .art-piece:hover {
            transform: scale(1.05);
        }

        .art-piece canvas {
            width: 100%;
            height: 300px;
            object-fit: cover;
        }

        @keyframes pulse {
            0% { transform: scale(1); }
            50% { transform: scale(1.05); }
            100% { transform: scale(1); }
        }

        .generating {
            animation: pulse 2s infinite;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="camera-container">
            <video id="video" autoplay></video>
            <canvas id="canvas"></canvas>
        </div>
        <div class="controls">
            <button id="generateBtn">Generate Art</button>
            <button id="saveBtn">Save Artwork</button>
        </div>
        <div class="art-gallery" id="artGallery"></div>
    </div>

    <script>
        const video = document.getElementById('video');
        const canvas = document.getElementById('canvas');
        const ctx = canvas.getContext('2d');
        const generateBtn = document.getElementById('generateBtn');
        const saveBtn = document.getElementById('saveBtn');
        const artGallery = document.getElementById('artGallery');

        // Set canvas dimensions
        canvas.width = 640;
        canvas.height = 480;

        // Access webcam
        async function initCamera() {
            try {
                const stream = await navigator.mediaDevices.getUserMedia({ video: true });
                video.srcObject = stream;
            } catch (err) {
                console.error('Error accessing camera:', err);
            }
        }

        // Boltzmann machine simulation (simplified)
        function boltzmannGeneration(imageData) {
            const data = imageData.data;
            for (let i = 0; i < data.length; i += 4) {
                // Add random noise and artistic effects
                const noise = Math.random() * 50 - 25;
                data[i] = Math.min(255, Math.max(0, data[i] + noise)); // Red
                data[i + 1] = Math.min(255, Math.max(0, data[i + 1] + noise)); // Green
                data[i + 2] = Math.min(255, Math.max(0, data[i + 2] + noise)); // Blue
                
                // Add some artistic patterns
                if (Math.random() > 0.99) {
                    data[i] = 255 - data[i];
                    data[i + 1] = 255 - data[i + 1];
                    data[i + 2] = 255 - data[i + 2];
                }
            }
            return imageData;
        }

        function generateArt() {
            generateBtn.classList.add('generating');
            
            // Capture video frame
            ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
            
            // Get image data and apply Boltzmann machine effects
            let imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
            imageData = boltzmannGeneration(imageData);
            
            // Apply additional artistic effects
            ctx.putImageData(imageData, 0, 0);
            ctx.globalCompositeOperation = 'overlay';
            ctx.fillStyle = `hsla(${Math.random() * 360}, 50%, 50%, 0.3)`;
            ctx.fillRect(0, 0, canvas.width, canvas.height);
            
            generateBtn.classList.remove('generating');
        }

        function saveArtwork() {
            const artPiece = document.createElement('div');
            artPiece.className = 'art-piece';
            
            const artCanvas = document.createElement('canvas');
            artCanvas.width = canvas.width;
            artCanvas.height = canvas.height;
            const artCtx = artCanvas.getContext('2d');
            artCtx.drawImage(canvas, 0, 0);
            
            artPiece.appendChild(artCanvas);
            artGallery.insertBefore(artPiece, artGallery.firstChild);
        }

        // Event listeners
        generateBtn.addEventListener('click', generateArt);
        saveBtn.addEventListener('click', saveArtwork);

        // Start camera
        initCamera();

        // Continuous drawing
        function draw() {
            ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
            requestAnimationFrame(draw);
        }
        requestAnimationFrame(draw);
    </script>
</body>
</html>