Foro de elhacker.net

Foros Generales => Foro Libre => Mensaje iniciado por: Tachikomaia en 22 Noviembre 2025, 07:28 am



Título: Castigado por usar una imagen que hizo otro... usando IA.
Publicado por: Tachikomaia en 22 Noviembre 2025, 07:28 am
https://somoskudasai.com/noticias/japon-copyright-imagenes-ia-prompts-detallados-caso-historico/

Supuestamente la imagen es esta:
(https://www.notebookcheck.org/fileadmin/Notebooks/News/_nc5/MockupofBookwithAIGeneratedImage.jpg)


Título: Re: Castigado por usar una imagen que hizo otro... usando IA.
Publicado por: @XSStringManolo en 22 Noviembre 2025, 15:22 pm
En japón y en todos los sitios.


Título: Re: Castigado por usar una imagen que hizo otro... usando IA.
Publicado por: Mr.Byte en 22 Noviembre 2025, 16:49 pm
Bueno, es un tema algo mas complejo, segun la noticia, el "creador" utilizó un prompt muy largo, y eso le da protección. Si hubiera utilizado un prompt de una sola linea no tendría la protección legal.

El otro dia, utilice una IA para crear un juego que use una sola linea "crear juego tipo Arkanoid", y en un minuto obtuve el juego.
Soy yo el creador de dicho juego? Que pensáis?

El juego, hecho 100% por IA :
https://wormhole.app/xkavRP#lp4PJqXhzYF5I0MnyaWNuw
 (https://wormhole.app/xkavRP#lp4PJqXhzYF5I0MnyaWNuw)

Código:(copiarlo y crear un archivo con la extensión HTML)
Código
  1. <!DOCTYPE html>
  2. <html lang="es">
  3.    <meta charset="UTF-8">
  4.    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  5.    <title>Arkanoid con Canvas</title>
  6.    <style>
  7.        body {
  8.            background-color: #111;
  9.            display: flex;
  10.            justify-content: center;
  11.            align-items: center;
  12.            height: 100vh;
  13.            margin: 0;
  14.            font-family: 'Courier New', Courier, monospace;
  15.            color: white;
  16.        }
  17.        canvas {
  18.            background-color: #000;
  19.            border: 2px solid #fff;
  20.        }
  21.    </style>
  22. </head>
  23.  
  24.    <canvas id="gameCanvas" width="480" height="320"></canvas>
  25.  
  26.    <script>
  27.        // --- CONFIGURACIÓN INICIAL ---
  28.        const canvas = document.getElementById('gameCanvas');
  29.        const ctx = canvas.getContext('2d');
  30.  
  31.        // --- CONSTANTES DEL JUEGO ---
  32.        const PADDLE_WIDTH = 75;
  33.        const PADDLE_HEIGHT = 10;
  34.        const BALL_RADIUS = 8;
  35.        const BRICK_WIDTH = 75;
  36.        const BRICK_HEIGHT = 20;
  37.        const BRICK_PADDING = 10;
  38.        const BRICK_OFFSET_TOP = 30;
  39.        const BRICK_OFFSET_LEFT = 30;
  40.        const BRICK_ROWS = 3;
  41.        const BRICK_COLS = 5;
  42.  
  43.        // --- VARIABLES DEL JUEGO ---
  44.        let score = 0;
  45.        let lives = 3;
  46.  
  47.        // --- OBJETO PALETA ---
  48.        const paddle = {
  49.            x: (canvas.width - PADDLE_WIDTH) / 2,
  50.            y: canvas.height - PADDLE_HEIGHT - 10,
  51.            width: PADDLE_WIDTH,
  52.            height: PADDLE_HEIGHT,
  53.            speed: 7
  54.        };
  55.  
  56.        // --- OBJETO PELOTA ---
  57.        const ball = {
  58.            x: canvas.width / 2,
  59.            y: canvas.height - 30,
  60.            dx: 3, // Velocidad en el eje X
  61.            dy: -3, // Velocidad en el eje Y
  62.            radius: BALL_RADIUS
  63.        };
  64.  
  65.        // --- CONTROL DE TECLAS ---
  66.        let rightPressed = false;
  67.        let leftPressed = false;
  68.  
  69.        // --- INICIALIZACIÓN DE LOS BLOQUES ---
  70.        // Creamos una matriz 2D para los bloques
  71.        const bricks = [];
  72.        for (let r = 0; r < BRICK_ROWS; r++) {
  73.            bricks[r] = [];
  74.            for (let c = 0; c < BRICK_COLS; c++) {
  75.                // status: 1 = visible, 0 = destruido
  76.                bricks[r][c] = { x: 0, y: 0, status: 1 };
  77.            }
  78.        }
  79.  
  80.        // --- EVENT LISTENERS (para el control de la paleta) ---
  81.        document.addEventListener("keydown", keyDownHandler);
  82.        document.addEventListener("keyup", keyUpHandler);
  83.        document.addEventListener("mousemove", mouseMoveHandler); // Opcional: control con ratón
  84.  
  85.        function keyDownHandler(e) {
  86.            if (e.key === "Right" || e.key === "ArrowRight") {
  87.                rightPressed = true;
  88.            } else if (e.key === "Left" || e.key === "ArrowLeft") {
  89.                leftPressed = true;
  90.            }
  91.        }
  92.  
  93.        function keyUpHandler(e) {
  94.            if (e.key === "Right" || e.key === "ArrowRight") {
  95.                rightPressed = false;
  96.            } else if (e.key === "Left" || e.key === "ArrowLeft") {
  97.                leftPressed = false;
  98.            }
  99.        }
  100.  
  101.        // Opcional: control con el ratón
  102.        function mouseMoveHandler(e) {
  103.            const relativeX = e.clientX - canvas.offsetLeft;
  104.            if(relativeX > 0 && relativeX < canvas.width) {
  105.                paddle.x = relativeX - paddle.width / 2;
  106.            }
  107.        }
  108.  
  109.        // --- FUNCIONES DE DIBUJO ---
  110.  
  111.        function drawBall() {
  112.            ctx.beginPath();
  113.            ctx.arc(ball.x, ball.y, ball.radius, 0, Math.PI * 2);
  114.            ctx.fillStyle = "#0095DD";
  115.            ctx.fill();
  116.            ctx.closePath();
  117.        }
  118.  
  119.        function drawPaddle() {
  120.            ctx.beginPath();
  121.            ctx.rect(paddle.x, paddle.y, paddle.width, paddle.height);
  122.            ctx.fillStyle = "#0095DD";
  123.            ctx.fill();
  124.            ctx.closePath();
  125.        }
  126.  
  127.        function drawBricks() {
  128.            for (let r = 0; r < BRICK_ROWS; r++) {
  129.                for (let c = 0; c < BRICK_COLS; c++) {
  130.                    if (bricks[r][c].status === 1) {
  131.                        const brickX = c * (BRICK_WIDTH + BRICK_PADDING) + BRICK_OFFSET_LEFT;
  132.                        const brickY = r * (BRICK_HEIGHT + BRICK_PADDING) + BRICK_OFFSET_TOP;
  133.                        bricks[r][c].x = brickX;
  134.                        bricks[r][c].y = brickY;
  135.                        ctx.beginPath();
  136.                        ctx.rect(brickX, brickY, BRICK_WIDTH, BRICK_HEIGHT);
  137.                        // Damos un color diferente a cada fila
  138.                        ctx.fillStyle = `hsl(${r * 60}, 100%, 50%)`;
  139.                        ctx.fill();
  140.                        ctx.closePath();
  141.                    }
  142.                }
  143.            }
  144.        }
  145.  
  146.        function drawScore() {
  147.            ctx.font = "16px Arial";
  148.            ctx.fillStyle = "#FFF";
  149.            ctx.fillText("Puntuación: " + score, 8, 20);
  150.        }
  151.  
  152.        function drawLives() {
  153.            ctx.font = "16px Arial";
  154.            ctx.fillStyle = "#FFF";
  155.            ctx.fillText("Vidas: " + lives, canvas.width - 65, 20);
  156.        }
  157.  
  158.        // --- DETECCIÓN DE COLISIONES ---
  159.  
  160.        function collisionDetection() {
  161.            for (let r = 0; r < BRICK_ROWS; r++) {
  162.                for (let c = 0; c < BRICK_COLS; c++) {
  163.                    const b = bricks[r][c];
  164.                    if (b.status === 1) {
  165.                        if (ball.x > b.x && ball.x < b.x + BRICK_WIDTH && ball.y > b.y && ball.y < b.y + BRICK_HEIGHT) {
  166.                            ball.dy = -ball.dy; // Invertimos la dirección de la pelota
  167.                            b.status = 0; // Marcamos el bloque como destruido
  168.                            score++;
  169.                            if (score === BRICK_ROWS * BRICK_COLS) {
  170.                                alert("¡GANASTE! &#127881;");
  171.                                document.location.reload(); // Recargamos la página para empezar de nuevo
  172.                            }
  173.                        }
  174.                    }
  175.                }
  176.            }
  177.        }
  178.  
  179.        // --- BUCLE PRINCIPAL DEL JUEGO ---
  180.        function draw() {
  181.            // Limpiamos el canvas en cada frame
  182.            ctx.clearRect(0, 0, canvas.width, canvas.height);
  183.  
  184.            // Dibujamos todos los elementos
  185.            drawBricks();
  186.            drawBall();
  187.            drawPaddle();
  188.            drawScore();
  189.            drawLives();
  190.            collisionDetection();
  191.  
  192.            // --- LÓGICA DE REBOTE DE LA PELOTA ---
  193.            // Rebote en las paredes laterales
  194.            if (ball.x + ball.dx > canvas.width - ball.radius || ball.x + ball.dx < ball.radius) {
  195.                ball.dx = -ball.dx;
  196.            }
  197.            // Rebote en la pared superior
  198.            if (ball.y + ball.dy < ball.radius) {
  199.                ball.dy = -ball.dy;
  200.            }
  201.            // Rebote en la paleta
  202.            else if (ball.y + ball.dy > paddle.y - ball.radius) {
  203.                // Comprobamos si la pelota está dentro de los límites horizontales de la paleta
  204.                if (ball.x > paddle.x && ball.x < paddle.x + paddle.width) {
  205.                    // Un toque extra: cambiamos la dirección de la pelota según dónde golpee la paleta
  206.                    const hitPos = (ball.x - (paddle.x + paddle.width / 2)) / (paddle.width / 2);
  207.                    ball.dx = hitPos * 5; // Ajusta este valor para cambiar el ángulo
  208.                    ball.dy = -ball.dy;
  209.                } else {
  210.                    // Si no toca la paleta, pierde una vida
  211.                    lives--;
  212.                    if (!lives) {
  213.                        alert("GAME OVER &#128546;");
  214.                        document.location.reload();
  215.                    } else {
  216.                        // Reseteamos la posición de la pelota y la paleta
  217.                        ball.x = canvas.width / 2;
  218.                        ball.y = canvas.height - 30;
  219.                        ball.dx = 3;
  220.                        ball.dy = -3;
  221.                        paddle.x = (canvas.width - paddle.width) / 2;
  222.                    }
  223.                }
  224.            }
  225.  
  226.            // --- MOVIMIENTO DE LA PELOTA Y LA PALETA ---
  227.            ball.x += ball.dx;
  228.            ball.y += ball.dy;
  229.  
  230.            if (rightPressed && paddle.x < canvas.width - paddle.width) {
  231.                paddle.x += paddle.speed;
  232.            } else if (leftPressed && paddle.x > 0) {
  233.                paddle.x -= paddle.speed;
  234.            }
  235.  
  236.            // Llamamos a la función draw() de nuevo para crear el bucle de animación
  237.            requestAnimationFrame(draw);
  238.        }
  239.  
  240.        // Iniciamos el juego
  241.        draw();
  242.  
  243.    </script>
  244. </body>
  245. </html>
  246.  


Título: Re: Castigado por usar una imagen que hizo otro... usando IA.
Publicado por: @XSStringManolo en 22 Noviembre 2025, 20:28 pm
Para que algo sea tuyo, debes crearlo tú. Si te lo genera la IA sin ningún proceso creativo, no lo estás creando tu.



Título: Re: Castigado por usar una imagen que hizo otro... usando IA.
Publicado por: Eleкtro en 23 Noviembre 2025, 01:01 am
El juego, hecho 100% por IA :  (https://wormhole.app/xkavRP#lp4PJqXhzYF5I0MnyaWNuw)

Para quien le interese, así es como puede quedar un Tetris hecho con un prompt de ChatGPT (se ve chulo):

qefCTRqn7OQ

PD: Desde el minuto 12:50 hasta 13:50 aprox.


Título: Re: Castigado por usar una imagen que hizo otro... usando IA.
Publicado por: Danielㅤ en 23 Noviembre 2025, 01:53 am
Soy yo el creador de dicho juego? Que pensáis?

No, jamás, para que algo sea creación tuya, vos tenés que crearlo desde cero.


Saludos


Título: Re: Castigado por usar una imagen que hizo otro... usando IA.
Publicado por: Tachikomaia en 23 Noviembre 2025, 12:09 pm
Bueno, es un tema algo mas complejo, segun la noticia, el "creador" utilizó un prompt muy largo
No me pareció claro, dice 20000 prompts, algunos lo interpretaron como que el texto tenía 20000 instrucciones, yo más bien que puso un texto 20000 veces, modificándolo en varios casos.

Imaginate que en Minecraft por decir algo se pudiera describir qué mapa se quiere, más o menos, y luego el "creador" quiere que nadie lo use  :xD


Título: Re: Castigado por usar una imagen que hizo otro... usando IA.
Publicado por: Tachikomaia en 23 Noviembre 2025, 12:26 pm
para que algo sea creación tuya, vos tenés que crearlo desde cero.
No se puede, yo no hago el lenguaje de programación, ni el teclado, ni los átomos, etc.

Crear tiene que ver con a partir de las herramientas que uno tiene, pero en este caso la herramienta hace casi todo.

Obviamente no voy a decir que un pescador no merece lo que pesca, pero me suena un poco a que usar una IA es como pescar, pones la trampa o pides a la IA y esperas. Cada actividad tiene su ciencia, pero... si sólo depende de paciencia y suerte... :/
Bien, quédate con el pescado ¿pero no compartir un dibujo? Pf, ni que fuera un desnudo ilegal. A propósito, le pedí a una IA que me dibujara a un robot con sangre en la cara, por decirlo siemple, y se negó, tuve que usar otra, era para ver si es tan difícil generar una imagen así. No parece.

"humano pero su cuerpo y órganos son de robot. Su cara tiene sangre, tiene ojos azules y algo clavado en su frente. Dibujo estilo cómic."
(https://i.ibb.co/5XpjFRfV/human-but-his-body-and-organs-are-robotic-His-face-has-blood-has-blue-eyes-and-something-stuck-in-hi.jpg)
El suyo es más complejo, pero en fin...