CommunityImagengithub.com

onemanylov/reemplazo-pantalla

Convierte una foto de un teléfono en una plantilla reutilizable y coloca cualquier imagen en su pantalla, mediante código y sin generador de imágenes. Sirve para crear una foto nueva de teléfono, una plantilla nueva, o verificar una existente.

¿Qué es reemplazo-pantalla?

Este skill permite reemplazar la pantalla de un iPhone en una fotografía real por cualquier imagen, manteniendo el marco negro, la muesca o isla dinámica, y la curvatura del vidrio, todo mediante procesamiento de imagen con Python. Es útil para desarrolladores y diseñadores que necesitan generar mockups realistas de teléfonos sin usar generadores de imágenes o herramientas gráficas manuales. Soporta la creación de nuevas plantillas a partir de fotos (con restricciones de ángulo y proporciones) y el uso de plantillas existentes mediante un simple comando `swap.py`. El proceso incluye detección de bordes, corrección de perspectiva y lente, trazado del contorno de vidrio, medición de la muesca/isla, y verificación de fugas de luz para asegurar una integración perfecta.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/onemanylov/phone-screen-swap/tree/HEAD/.claude/skills/phone-screen

Installed? Explore more Imagen skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Reemplazo de pantalla de teléfono

Foto: $ARGUMENTS. Si no hay ninguna, pide una o encuentra alguna con find_photos.py. Toda la parte frontal del teléfono es reemplazada mediante código: la pantalla, el marco negro y la muesca o isla. Fuera del vidrio, la foto no se modifica.

Para una plantilla que ya existe, este skill no es necesario: python3 swap.py <imagen>.

Nueva plantilla

Toma: una foto real de un iPhone, con la pantalla hacia la cámara. Omitir: Android, una inclinación superior a 25°, un lado 1.2 veces mayor que el otro (el recorte las rechaza). Omitir fotos con un dedo o manga sobre la pantalla: sin marco gris, se pintaría encima. Todo el vidrio es nuestro, incluso un reflejo. Solo la piel que entra desde fuera permanece de la foto.

P=<nombre, 8 caracteres, único>; D=plantillas/esquinas
mkdir -p out
# 1. Mira la foto y lee las esquinas aproximadas de la pantalla: SI, SD, II, ID
python3 tools/slide_crop.py --q '<esquinas>' <foto.jpg> plantillas/crop/$P.jpg       # imprime las esquinas en el recorte
# 2. Los bordes rectos exactos. Si `live` es bajo: R=34
python3 tools/slide_lines.py $P '<esquinas en el recorte>' out/l.jpg                    # esquinas refinadas al final de la salida
# 3. El contorno: perspectiva, curvatura de lente, radio, contorno de vidrio
python3 tools/slide_trace.py $P '<esquinas>' out/t.jpg $D/$P.json
# 4. Prueba de lo que el ajuste no vio. Siempre mirar la imagen
python3 tools/slide_proof.py $P $D/$P.json out/$P-prueba.jpg
# 5. La pose, usada solo por el reflejo
python3 tools/slide_sheet.py $P $D/$P.pose.json init
# 6. Medir la muesca o isla, los iconos de estado, los negros
python3 tools/slide_check.py $P measure
# Receta $D/$P.recipe.json: copiar a841f108 (muesca) o f5dad639 (isla), luego establecer frame=$P, pose, esquinas y las opciones medidas
# 7. Hora e iconos en la ubicación de este teléfono
python3 tools/slide_status.py $P init <línea de measure>; python3 tools/slide_status.py $P build
# 8. Construir y prueba roja
python3 tools/slide_check.py $P build
# 9. Mapa térmico de fugas
python3 tools/slide_check.py $P leak
# 10. Ancho del marco
python3 tools/slide_check.py $P frame

Después de eso, es una plantilla: python3 swap.py <imagen> -t $P.

Revisa antes de confiar

  1. out/$P-split.jpg: foto, rojo, resultado. El rojo encaja, el marco termina en la carcasa, todo desde el cuerpo hacia adentro es nuestro.
  2. out/$P-leak.jpg: el marco sobre una pantalla negra, brillo en escala logarítmica. Cualquier cosa iluminada proviene de la foto: una línea alrededor de un recorte, motas, reflejos. Solo un altavoz y lo que realmente está al frente puede mostrarse.
  3. out/$P-top.jpg: el contorno verde del recorte sobre la foto, los iconos en su lugar.
  4. out/$P-zoom.jpg: esquinas y marco, grandes, junto a la foto.
  5. La plantilla con una imagen blanca mediante swap.py: una página oscura oculta esquinas y bordes malos.
  6. out/$P-frame.jpg: las cuatro esquinas en una pantalla blanca. Una plantilla no está terminada hasta que pase la verificación de marco a continuación.

Verificación de marco

El marco negro es hardware, un ancho uniforme alrededor. slide_check.py $P frame construye sobre una pantalla blanca, la endereza y mide el negro en el centro de cada lado, en píxeles de captura de pantalla (591 de ancho). Imprime ours y photo por lado, la dispersión y un veredicto: hasta 4 px es OK, más es FIX. El límite de 4 px se eligió de estos teléfonos: una dispersión de 7.5 px era claramente visible, y 4 px no lo era. Si dice FIX en una plantilla nueva:

  1. Ejecuta slide_trace.py de nuevo: lee el negro visible y da a cada lado la mediana (la línea frame:).
  2. Reconstruye, luego ejecuta frame de nuevo.
  3. Sigue FIX: compara ours con photo. Si coinciden, un reflejo, carcasa o mano oculta el marco en ese lado de la foto. Si no coinciden, el contorno está desviado: mira -frame.jpg y -split.jpg.
  4. Si no converge, no des la plantilla por terminada. Di qué lado está desviado y por cuántos px. Revisa también -frame.jpg visualmente: la parte superior y los lados deben coincidir. Las plantillas enviadas: f38fe44a 2.2, 79186658 3.2 y 895d3ee8 3.8 pasan. f5dad639 5.8, a841f108 6.2 y 14278a0b 8.5 no pasan: sus marcos se mantuvieron tal como se construyeron inicialmente.

Configuración

  • Negro: floor, para que el marco y el recorte coincidan con la foto. Comienza en .003 y bájalo si la foto es más oscura. build imprime ambos.
  • Muesca: valores de measure. Ajusta cr según el contorno verde; measure lo lee bajo.
  • Altavoz sobre una muesca: grille=45. Si aparece una línea fina de la página anterior alrededor de la muesca: gband=1.
  • Isla: su centro es hardware, 295.5 de 591. Si measure dice más de 1 px de desviación, algo brillante se comió un borde: toma el borde limpio y refléjalo a través del centro. En una pantalla de bloqueo, toma x de un teléfono con isla (hora 111, iconos 479) e y de measure.
  • Altavoz sobre una isla: si está dentro del contorno de vidrio, grille=45 recupera solo su relieve.
  • Manga sobre el vidrio: sleeve=1, solo con un marco gris real en templates/grey/ (f38fe44a).
  • Oscuro sobre oscuro: slide_trace.py cambia automáticamente cuando menos de 400 de 720 puntos se elevan. Revisa -split con especial cuidado.

Cómo funciona

Un teléfono es rígido, por lo que la pantalla es un rectángulo con esquinas redondeadas continuas de iOS, visto a través de una perspectiva y una curvatura radial de lente. Los bordes se encuentran en el brillo logarítmico, por lo que oscuro sobre oscuro funciona, y se colocan en el punto medio en luz lineal. La imagen se dibuja sobre la foto enderezada y luego se curva de nuevo con el vidrio.

Trampas conocidas

  • Juzgar solo por una página oscura.
  • Ajustar de una manera y verificar de otra: la verificación es el ajuste, la prueba es lo que se omitió.
  • Líneas rectas directamente sobre la foto: está curvada. Solo existen sobre la enderezada.
  • Buscar el borde de la carcasa desde fuera hacia dentro en una pantalla brillante: un pliegue de tela parece una carcasa. Ve desde la pantalla hacia fuera.

Skills relacionados