La misma modelo en otros sitios: pHash, GD e historial

La misma modelo en otros sitios: pHash, GD e historial

Una modelo puede emitir simultáneamente en dos o tres plataformas y utilizar un nombre de usuario completamente distinto en cada una. Buscar por nombre no resuelve estos casos, y comparar capturas manualmente no es viable en un catálogo grande. Hay un método más sencillo y económico: utilizar un hash perceptual (pHash) para localizar imágenes parecidas y comprobar después si las emisiones comienzan y terminan a horas similares de forma recurrente. No hacen falta reconocimiento facial, servicios de IA ni una GPU.

Veamos cómo reproducir este método con ejemplos reales, hashes de 16 caracteres, distancias entre ellos, historiales de emisiones y cifras de rendimiento observadas. El objetivo no es documentar la infraestructura privada de una web, sino explicar una técnica que puede aplicar cualquier webmaster.

Por qué no basta con comparar nombres

Es fácil normalizar anna_live y anna-live. También se pueden admitir erratas o números adicionales. Pero ¿cómo relacionar hottdoll611 en Chaturbate con Carrie1337 en BongaCams? Sus nombres no ofrecen ninguna pista útil.

Tampoco basta con que dos usuarios tengan nombres parecidos: muchos alias se repiten. Conviene dividir el trabajo en dos fases. Una imagen propone un candidato y la coincidencia repetida de horarios respalda o descarta la relación. Una sola captura no es una prueba, especialmente si contiene una pantalla negra o un mensaje genérico.

Qué hace GD y qué hace pHash

Qué hace GD y qué hace pHash

En PHP, la extensión GD permite abrir imágenes JPEG, WebP o PNG, redimensionarlas y consultar el color de sus píxeles. Es una buena herramienta de preparación, pero GD no calcula pHash por sí sola: hay que implementar el algoritmo o utilizar una biblioteca compatible.

Un procedimiento habitual de pHash es el siguiente:

  1. Abrir la captura con GD, normalizar su orientación y reducirla a 32 × 32 píxeles.
  2. Pasarla a escala de grises aplicando siempre la misma fórmula de luminosidad.
  3. Calcular la transformada discreta del coseno (DCT), que representa las grandes variaciones de luz en lugar de cada píxel por separado.
  4. Tomar la zona de bajas frecuencias de 8 × 8 coeficientes. Compararlos con la mediana y convertir las 64 comparaciones en bits siguiendo un orden fijo. Hay que definir también cómo se trata el coeficiente de frecuencia cero (DC), porque las bibliotecas no siempre coinciden.
  5. Guardar la huella de 64 bits como 16 caracteres hexadecimales, por ejemplo f8949667272fc82a.

El resultado representa la composición general de la imagen, no los bytes del archivo. Cambios de formato, compresión o pequeñas superposiciones pueden mantener las huellas próximas. Una postura diferente o un recorte importante pueden alejarlas. pHash no identifica rostros ni confirma por sí solo que dos cuentas pertenezcan a una persona.

Lo más eficiente es calcular la huella una vez, al guardar la captura. Después, las búsquedas comparan valores cortos sin abrir miles de imágenes de nuevo.

Un caso real: nombres diferentes, la misma habitación

Un caso real: nombres diferentes, la misma habitación

Comparemos hottdoll611 en Chaturbate y Carrie1337 en BongaCams. Sus capturas muestran elementos coincidentes: una silla de oficina negra, carpetas de colores en una estantería, un globo dorado con forma de corazón, una estrella roja, una blusa blanca y una falda rosa. Las plataformas muestran encuadres diferentes y las imágenes no se tomaron exactamente a la vez.

Se conservaron dos parejas de capturas:

Capturas (UTC)pHash de ChaturbatepHash de BongaCamsBits distintos
Capturas (UTC)20:52 y 20:57pHash de Chaturbatef29a95ea642eca26pHash de BongaCamsf09097e7662ece22Bits distintos10 de 64
Capturas (UTC)21:20 y 21:26pHash de Chaturbatef8949667272fc82apHash de BongaCamsf094d6e7662ec82aBits distintos6 de 64

La segunda pareja se obtuvo con unos 5 minutos y 23 segundos de diferencia. La distancia pequeña sugiere que merece la pena investigar esos perfiles. ¿Por qué la primera da 10 y la segunda 6? Porque pHash codifica la disposición visual: incluso un cambio leve de postura o cámara modifica algunos bits. Hay que buscar hashes parecidos, no solo idénticos.

Un caso real: nombres diferentes, la misma habitación
hottdoll611Chaturbatef8949667272fc82a
Un caso real: nombres diferentes, la misma habitación
Carrie1337BongaCamsf094d6e7662ec82a
  • 6 de 64 bits
  • 38 sesiones correspondientes

MATCH

Los dos fotogramas no coinciden píxel a píxel. La cámara y la postura se han movido un poco. pHash sigue viendo una estructura de encuadre parecida, y el historial de emisiones añade la confirmación.

Cómo calcular la distancia 6

La distancia de Hamming cuenta cuántos bits difieren entre dos huellas. Se aplica XOR a los valores y después se cuentan los bits que valen uno. Para la segunda pareja, el resultado es 6.

En PHP se pueden comparar cadenas hexadecimales de 16 caracteres sin convertir todo el valor en un int de 64 bits con signo:

function hammingHex(string $a, string $b): int
{
    if (!preg_match('/^[0-9a-f]{16}$/i', $a) ||
        !preg_match('/^[0-9a-f]{16}$/i', $b)) {
        throw new InvalidArgumentException('Expected two 64-bit hex hashes');
    }

    $ones = [0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4];
    $distance = 0;

    for ($i = 0; $i < 16; $i++) {
        $distance += $ones[hexdec($a[$i]) ^ hexdec($b[$i])];
    }

    return $distance;
}

// 6
hammingHex('f8949667272fc82a', 'f094d6e7662ec82a');

Cuanto menor sea el número, más próxima será la composición. No existe un umbral universalmente seguro: hay que ajustarlo con capturas propias, incluidos los falsos positivos. Además, solo deben compararse hashes calculados con el mismo tratamiento de grises, la misma DCT y el mismo orden de bits.

Por qué una captura parecida no es suficiente

Por qué una captura parecida no es suficiente

Una pantalla negra puede generar el pHash 0000000000000000. Emisiones completamente distintas pueden compartir esa misma huella. En tal caso, una distancia de 0 prueba que las imágenes se parecen, no que las cuentas pertenezcan a la misma modelo. Las pantallas de espera o habitaciones similares también pueden producir falsos positivos.

Por eso conviene consultar el historial de emisiones. Una persona que emite en dos plataformas al mismo tiempo suele iniciar y terminar ambas sesiones a horas próximas. No tienen por qué coincidir al segundo: las plataformas pueden tardar en conectarse, detectar tarde el final o sufrir cortes.

Como punto de partida reproducible, guarda intervalos started_at / ended_at y considera que dos sesiones corresponden cuando tanto los inicios como los finales están suficientemente próximos, por ejemplo dentro de 30 minutos. Es un valor ilustrativo, no una regla universal. Coincidir solo en la hora de inicio ofrece una prueba más débil. Además, una sesión de una plataforma no debe confirmar varias sesiones de la otra.

Después examina varias semanas: cuántas sesiones coinciden, en cuántos días diferentes y qué proporción representan del historial de cada cuenta. Cuando un perfil tiene poca actividad registrada, el resultado debe quedar pendiente por falta de datos, no marcarse automáticamente como negativo.

Qué reveló el historial de esta pareja

Los perfiles hottdoll611 y Carrie1337 tenían 38 sesiones de emisión correspondientes. En el periodo observado suponían el 57,6 % de las sesiones de un perfil y el 27 % del otro. Los porcentajes son distintos porque las cuentas no emitían necesariamente con la misma frecuencia ni siempre a la vez.

La combinación aporta mucha más evidencia que una sola imagen: la misma habitación reconocible, una distancia pHash de 6 sobre 64, capturas separadas por poco más de cinco minutos y decenas de sesiones con inicios y finales próximos. Los nombres, en cambio, no servían para encontrarlas.

Otro ejemplo es your_wild_lexi en Chaturbate y AlexisGrays en BongaCams. Sus hashes d64ff814856fc286 y c64ff814876dc28e difieren en solo 4 bits, y el historial contiene 13 sesiones correspondientes.

Cuando unas imágenes parecidas no significan que los perfiles coincidan

pHash permite encontrar rápidamente imágenes que merece la pena comparar. Sin embargo, una distancia pequeña entre sus huellas no demuestra que dos perfiles pertenezcan a la misma persona. Las capturas oscuras, las pantallas de espera y las transmisiones con iluminación o fondos similares pueden parecerse más de lo esperado.

Un caso ilustrativo fue el de EthanLowell en Xlove y Laena_Castillo en Amateur.tv. La distancia pHash entre sus capturas fue de 10 de 64 bits. Era suficiente para investigar la pareja, pero los historiales de emisión no respaldaron la relación.

En los registros disponibles solo coincidieron en el tiempo dos sesiones, equivalentes al 4,8 % del historial de un perfil y al 2 % del otro. La mayoría de sus emisiones empezaban y terminaban de forma independiente. Una versión inicial de las reglas aceptó la pareja porque la comprobación de horarios era demasiado permisiva. Con criterios más estrictos, esos indicios no deberían bastar para unir automáticamente los perfiles.

Cuando unas imágenes parecidas no significan que los perfiles coincidan
EthanLowellXlovee6c619c91cec2772
Cuando unas imágenes parecidas no significan que los perfiles coincidan
Laena_CastilloAmateur.tvec8619c51cec67b8
  • 10 de 64 bits
  • 2 sesiones coincidentes
  • 4,8 % y 2 %

NO MATCH

NO MATCH: no hay pruebas suficientes para vincular los perfiles. Es una decisión del algoritmo, no una demostración de que las cuentas pertenezcan necesariamente a personas distintas. Para un agregador, es más seguro mantener separada una pareja dudosa que mezclar por error los historiales, horarios y demás datos de dos perfiles.

En cambio, hottdoll611 en Chaturbate y Carrie1337 en BongaCams presentaron una distancia de 6 de 64 bits en las capturas seleccionadas y 38 sesiones de emisión correspondientes en sus historiales. La coincidencia cuenta con dos indicios diferentes: imágenes parecidas y emisiones cuyos horarios coinciden repetidamente.

La conclusión: pHash encuentra candidatos con un coste de cálculo muy bajo. La comparación de las horas de inicio y fin de las transmisiones ayuda a decidir cuáles son coincidencias fiables. La distancia de Hamming no es una «probabilidad de coincidencia», y el porcentaje de candidatos descartados no equivale a una tasa de falsos positivos medida.

Cómo buscar sin comparar todo con todo

Comparar cada imagen con todas las demás resulta caro rápidamente. Con 7.000 capturas hay casi 24,5 millones de parejas no ordenadas, antes de revisar los horarios. Aunque sea posible hacerlo una vez, repetir ese trabajo continuamente no tiene sentido.

Varias optimizaciones sencillas evitan mucho trabajo innecesario:

  1. Comparar únicamente capturas recientes de plataformas distintas, en lugar de todo el archivo.
  2. Calcular y guardar pHash al incorporar cada captura.
  3. Dividir los 64 bits en bloques pequeños y buscar primero coincidencias en algún bloque. Calcular la distancia completa solo para los candidatos. El número de bloques debe elegirse teniendo en cuenta la distancia permitida, o se perderán coincidencias reales.
  4. Consultar los historiales únicamente de las parejas candidatas, no de todo el catálogo.
  5. Guardar los resultados de las comprobaciones y evitar crear relaciones duplicadas.

En una ejecución observada se procesaron aproximadamente 6.000–7.500 huellas recientes, y solo 9–22 parejas pasaron a la comprobación de horarios. El recorrido completo tardó 3–5 segundos y utilizó unos 39–45 MB de memoria. Son medidas de una carga concreta, no garantías aplicables a cualquier web.

Por qué cuesta menos que comparar imágenes con IA

No es necesario enviar cada captura a una API de visión artificial, pagar por imagen o mantener una GPU para generar candidatos. GD procesa imágenes corrientes en CPU, pHash las reduce a 64 bits y comparar distancias requiere operaciones simples. Los horarios son datos que muchos agregadores ya registran.

El método no es literalmente gratuito: hay que almacenar capturas, calcular hashes, registrar eventos, filtrar imágenes vacías y revisar los casos dudosos. Pero el coste computacional principal es pequeño y predecible. La IA puede ayudar en situaciones difíciles; no es imprescindible para la búsqueda masiva inicial.

Resultado de una ejecución real

Resultado de una ejecución real

El 10 de noviembre de 2026, una comprobación encontró 17 parejas con alta confianza en diferentes plataformas. Nueve también se habrían encontrado mediante nombres parecidos. Otras dos tenían nombres reconocibles, pero estaban clasificadas en categorías distintas. Seis parejas no se podían encontrar solo por el nombre de usuario.

No es una tasa de precisión ni una estimación de todos los duplicados de Internet. Es una observación puntual que muestra por qué merece la pena añadir otra señal: imágenes y horarios repetidos permiten encontrar relaciones que el nombre no revela.

Para un webmaster, el punto de partida es claro: guardar capturas periódicas, calcular siempre el mismo pHash de 64 bits, registrar los eventos de inicio y final, filtrar candidatos de forma eficiente y confirmar con varias sesiones. Nunca unas dos perfiles solo porque una captura se parece. Vincular por error a dos personas distintas suele ser peor que dejar un duplicado sin detectar.

En Cloud9Cams, estas relaciones ayudan a los visitantes a encontrar a una modelo conocida en otra plataforma aunque utilice un alias distinto. El mismo método puede servir para cualquier catálogo con imágenes y registros de actividad procedentes de varias fuentes.

ES ES