Compare textos por líneas
Compare dos versiones de texto sin revisar manualmente cada línea. Esta herramienta determinista alinea las líneas coincidentes en su orden original y clasifica cada resultado como añadido, eliminado o sin cambios.
Ejecutar — gratis
Resulta útil para archivos de configuración, registros, listas, borradores y salidas generadas donde los saltos de línea tienen significado. La respuesta estructurada incluye las posiciones disponibles y un resumen compacto para facilitar tanto la revisión humana como el procesamiento automatizado.
Prepare ambas versiones para obtener una comparación útil
Coloque la versión de referencia en el campo original y la versión que desea revisar en revised. La comparación considera cada salto de línea como un límite significativo, por lo que conviene conservar el formato relevante. Si una frase cambia de línea, se mostrará como una eliminación y una adición aunque sus palabras sean iguales. Antes de comparar se normalizan los finales de línea de Windows y del Mac clásico, evitando diferencias causadas únicamente por el sistema operativo. Los espacios, las mayúsculas, la puntuación y las líneas vacías sí son significativos. Esta precisión es apropiada para configuraciones, informes generados e inventarios. Una versión puede estar vacía para indicar que todas las líneas se añadieron o eliminaron; si ambas están vacías, la solicitud devuelve un error. Envíe cadenas de texto, no matrices ni objetos. El servicio no recorta, reescribe ni interpreta el contenido antes de alinearlo.
Interprete el resultado ordenado línea por línea
La respuesta contiene una matriz lines ordenada y un resumen. Cada elemento incluye un estado y el texto exacto de la línea. Un elemento sin cambios incorpora original_line y revised_line porque aparece en ambas versiones. Una eliminación solo incluye original_line y una adición solo revised_line. Estas posiciones empiezan en uno y corresponden al texto de origen, por lo que pueden mostrarse directamente en una interfaz de revisión. Cuando una línea se sustituye, se devuelve una eliminación seguida de una adición; no existe un estado separado para sustituciones. El resumen cuenta las líneas añadidas, eliminadas y conservadas. La alineación utiliza una subsecuencia común más larga para mantener el orden y evitar que una inserción pequeña marque todo el documento como distinto. Si hay líneas idénticas repetidas, puede haber varias alineaciones válidas; una regla estable que prioriza la eliminación resuelve los empates y garantiza siempre el mismo JSON para la misma entrada.
Integre diferencias estructuradas en revisiones y automatizaciones
La comparación por líneas resulta especialmente útil cuando otro sistema debe actuar sobre el resultado. Un flujo de despliegue puede contrastar la configuración prevista con la observada, detener una publicación si se eliminan ajustes protegidos y conservar el resultado como evidencia. Un sistema editorial puede destacar únicamente las adiciones y eliminaciones, manteniendo las líneas intactas como contexto. Un monitor puede comparar capturas consecutivas, consultar primero el resumen y omitir avisos si todo permanece igual. La capacidad es determinista, no usa red ni modelos de lenguaje y nunca parafrasea el contenido. Cada solicitud de API cuesta $0.002; la página también ejecuta en el navegador la misma lógica pura. Se trata deliberadamente de una comparación por líneas, no de una revisión semántica: no explica motivos, no ignora espacios, no reconoce bloques movidos ni compara palabras dentro de una línea modificada. Use límites de línea significativos y aproveche las posiciones y los estados para resaltar, auditar, probar o generar alertas.
Qué puede hacer con ella
Revisar cambios de configuración
Compare una configuración propuesta con la desplegada y muestre exactamente qué líneas se añadieron o eliminaron.
Comprobar una salida generada
Contraste un informe o captura reciente con un resultado conocido y use el resumen para detectar cambios inesperados.
Crear una revisión editorial
Convierta dos borradores organizados por líneas en elementos estructurados que una interfaz pueda resaltar con posiciones fiables.
Preguntas frecuentes
¿Qué devuelve la comparación?
Devuelve una matriz ordenada de líneas añadidas, eliminadas y sin cambios, además del recuento de cada estado.
¿Cómo se representan las líneas modificadas?
Una modificación se representa mediante la eliminación de la línea anterior y la adición de la nueva.
¿Importan los espacios?
Sí. Se conservan y comparan los espacios y las líneas vacías, aunque se normalizan los finales de línea con retorno de carro.
¿Puede estar vacía una entrada?
Sí. El texto no vacío aparecerá completamente añadido o eliminado. Solo se produce un error cuando ambas entradas están vacías.
¿Cuánto cuesta una solicitud de API?
Cada solicitud de API cuesta $0.002. La herramienta del navegador ejecuta localmente la misma comparación determinista.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/text/diff-lines \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"original":"alpha\nbeta\ngamma","revised":"alpha\nbeta updated\ngamma"}'const res = await fetch("https://api.kit.forhosting.com/text/diff-lines", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"original": "alpha\nbeta\ngamma",
"revised": "alpha\nbeta updated\ngamma"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/text/diff-lines",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"original": "alpha\nbeta\ngamma",
"revised": "alpha\nbeta updated\ngamma"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/text/diff-lines", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"original":"alpha\\nbeta\\ngamma","revised":"alpha\\nbeta updated\\ngamma"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"original":"alpha\nbeta\ngamma","revised":"alpha\nbeta updated\ngamma"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/text/diff-lines", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"original": "alpha\nbeta\ngamma",
"revised": "alpha\nbeta updated\ngamma"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.diff_lines",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_tokens | 20000 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |