{"meta":{"title":"Entrada de imagen","intro":"Enviar imágenes a las sesiones de Copilot como archivos adjuntos. Hay dos maneras de adjuntar imágenes:","product":"GitHub Copilot","breadcrumbs":[{"href":"/es/copilot","title":"GitHub Copilot"},{"href":"/es/copilot/how-tos","title":"Procedimientos"},{"href":"/es/copilot/how-tos/copilot-sdk","title":"SDK de Copilot"},{"href":"/es/copilot/how-tos/copilot-sdk/features","title":"Características"},{"href":"/es/copilot/how-tos/copilot-sdk/features/image-input","title":"Entrada de imagen"}],"documentType":"article"},"body":"# Entrada de imagen\n\nEnviar imágenes a las sesiones de Copilot como archivos adjuntos. Hay dos maneras de adjuntar imágenes:\n\n<!-- markdownlint-disable GHD046 GHD005 -->\n\n<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->\n\n* **Archivo adjunto** (`type: \"file\"`): proporcione una ruta absoluta; el entorno de ejecución lee el archivo del disco, lo convierte a base64 y lo envía al LLM.\n* **Adjunto blob** (`type: \"blob\"`): proporcione directamente datos codificados en base64; es útil cuando la imagen ya está en memoria (por ejemplo, capturas de pantalla, imágenes generadas o datos de una API).\n\n## Visión general\n\n![Diagrama: diagrama de secuencia que muestra el proceso descrito.](/assets/images/help/copilot/copilot-sdk/features-image-input-diagram-0.png)\n\n| Concepto                        | Description                                                                                                                                 |\n| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |\n| **Archivo adjunto**             | Datos adjuntos con `type: \"file\"` y una `path` absoluta a una imagen en disco                                                               |\n| **Datos adjuntos a blobs**      | Datos adjuntos con `type: \"blob\"`, codificados en base64 `data` y `mimeType`, sin necesidad de E/S de disco                                 |\n| **Codificación automática**     | En el caso de los archivos adjuntos, el tiempo de ejecución lee la imagen y la convierte automáticamente en base64.                         |\n| **Cambio de tamaño automático** | El tiempo de ejecución cambia automáticamente el tamaño o reduce la calidad de las imágenes que superan los límites específicos del modelo. |\n| **Funcionalidad de visión**     | El modelo debe disponer de `capabilities.supports.vision = true` para procesar imágenes                                                     |\n\n## Inicio rápido: archivo adjunto\n\nAdjunte un archivo de imagen a cualquier mensaje mediante el tipo de archivo adjunto. La ruta de acceso debe ser una ruta de acceso absoluta a una imagen en el disco.\n\n<div class=\"ghd-codetabs\">\n<div class=\"ghd-codetab\" data-lang=\"typescript\" data-label=\"TypeScript\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">TypeScript</div>\n\n```typescript\nimport { CopilotClient } from \"@github/copilot-sdk\";\n\nconst client = new CopilotClient();\nawait client.start();\n\nconst session = await client.createSession({\n    model: \"gpt-5.4\",\n    onPermissionRequest: async () => ({ kind: \"approve-once\" }),\n});\n\nawait session.send({\n    prompt: \"Describe what you see in this image\",\n    attachments: [\n        {\n            type: \"file\",\n            path: \"/absolute/path/to/screenshot.png\",\n        },\n    ],\n});\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"python\" data-label=\"Python\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Python</div>\n\n```python\nfrom copilot import CopilotClient, PermissionDecisionApproveOnce\n\nclient = CopilotClient()\nawait client.start()\n\nsession = await client.create_session(\n    on_permission_request=lambda req, inv: PermissionDecisionApproveOnce(),\n    model=\"gpt-5.4\",\n)\n\nawait session.send(\n    \"Describe what you see in this image\",\n    attachments=[\n        {\n            \"type\": \"file\",\n            \"path\": \"/absolute/path/to/screenshot.png\",\n        },\n    ],\n)\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"go\" data-label=\"Go\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Go</div>\n\n```golang\nctx := context.Background()\nclient := copilot.NewClient(nil)\nclient.Start(ctx)\n\nsession, _ := client.CreateSession(ctx, &copilot.SessionConfig{\n    Model: \"gpt-5.4\",\n    OnPermissionRequest: func(req copilot.PermissionRequest, inv copilot.PermissionInvocation) (rpc.PermissionDecision, error) {\n        return &rpc.PermissionDecisionApproveOnce{}, nil\n    },\n})\n\npath := \"/absolute/path/to/screenshot.png\"\nsession.Send(ctx, copilot.MessageOptions{\n    Prompt: \"Describe what you see in this image\",\n    Attachments: []copilot.Attachment{\n        &copilot.AttachmentFile{\n            DisplayName: \"screenshot.png\",\n            Path:        path,\n        },\n    },\n})\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"dotnet\" data-label=\".NET\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">.NET</div>\n\n```csharp\nusing GitHub.Copilot;\nusing GitHub.Copilot.Rpc;\n\nawait using var client = new CopilotClient();\nawait using var session = await client.CreateSessionAsync(new SessionConfig\n{\n    Model = \"gpt-5.4\",\n    OnPermissionRequest = (req, inv) =>\n        Task.FromResult(PermissionDecision.ApproveOnce()),\n});\n\nawait session.SendAsync(new MessageOptions\n{\n    Prompt = \"Describe what you see in this image\",\n    Attachments = new List<Attachment>\n    {\n        new AttachmentFile\n        {\n            Path = \"/absolute/path/to/screenshot.png\",\n            DisplayName = \"screenshot.png\",\n        },\n    },\n});\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"java\" data-label=\"Java\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Java</div>\n\n```java\nimport com.github.copilot.CopilotClient;\nimport com.github.copilot.rpc.*;\nimport java.util.List;\n\ntry (var client = new CopilotClient()) {\n    client.start().get();\n\n    var session = client.createSession(\n        new SessionConfig()\n            .setModel(\"gpt-5.4\")\n            .setOnPermissionRequest(PermissionHandler.APPROVE_ALL)\n    ).get();\n\n    session.send(new MessageOptions()\n        .setPrompt(\"Describe what you see in this image\")\n        .setAttachments(List.of(\n            new Attachment(\"file\", \"/absolute/path/to/screenshot.png\", \"screenshot.png\")\n        ))\n    ).get();\n}\n```\n\n</div>\n\n</div>\n\n## Inicio rápido: datos adjuntos a blobs\n\nCuando ya tenga datos de imagen en la memoria (por ejemplo, una captura de pantalla capturada por la aplicación o una imagen capturada de una API), use un archivo adjunto de blob para enviarlo directamente sin escribir en el disco.\n\n<div class=\"ghd-codetabs\">\n<div class=\"ghd-codetab\" data-lang=\"typescript\" data-label=\"TypeScript\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">TypeScript</div>\n\n```typescript\nimport { CopilotClient } from \"@github/copilot-sdk\";\n\nconst client = new CopilotClient();\nawait client.start();\n\nconst session = await client.createSession({\n    model: \"gpt-5.4\",\n    onPermissionRequest: async () => ({ kind: \"approve-once\" }),\n});\n\nconst base64ImageData = \"...\"; // your base64-encoded image\nawait session.send({\n    prompt: \"Describe what you see in this image\",\n    attachments: [\n        {\n            type: \"blob\",\n            data: base64ImageData,\n            mimeType: \"image/png\",\n            displayName: \"screenshot.png\",\n        },\n    ],\n});\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"python\" data-label=\"Python\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Python</div>\n\n```python\nfrom copilot import CopilotClient, PermissionDecisionApproveOnce\n\nclient = CopilotClient()\nawait client.start()\n\nsession = await client.create_session(\n    on_permission_request=lambda req, inv: PermissionDecisionApproveOnce(),\n    model=\"gpt-5.4\",\n)\n\nbase64_image_data = \"...\"  # your base64-encoded image\nawait session.send(\n    \"Describe what you see in this image\",\n    attachments=[\n        {\n            \"type\": \"blob\",\n            \"data\": base64_image_data,\n            \"mimeType\": \"image/png\",\n            \"displayName\": \"screenshot.png\",\n        },\n    ],\n)\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"go\" data-label=\"Go\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Go</div>\n\n```golang\nmimeType := \"image/png\"\ndisplayName := \"screenshot.png\"\nsession.Send(ctx, copilot.MessageOptions{\n    Prompt: \"Describe what you see in this image\",\n    Attachments: []copilot.Attachment{\n        &copilot.AttachmentBlob{\n            Data:        &base64ImageData, // base64-encoded string\n            MIMEType:    mimeType,\n            DisplayName: &displayName,\n        },\n    },\n})\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"dotnet\" data-label=\".NET\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">.NET</div>\n\n```csharp\nawait session.SendAsync(new MessageOptions\n{\n    Prompt = \"Describe what you see in this image\",\n    Attachments = new List<Attachment>\n    {\n        new AttachmentBlob\n        {\n            Data = base64ImageData,\n            MimeType = \"image/png\",\n            DisplayName = \"screenshot.png\",\n        },\n    },\n});\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"java\" data-label=\"Java\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Java</div>\n\n```java\nimport com.github.copilot.CopilotClient;\nimport com.github.copilot.rpc.*;\nimport java.util.List;\n\ntry (var client = new CopilotClient()) {\n    client.start().get();\n\n    var session = client.createSession(\n        new SessionConfig()\n            .setModel(\"gpt-5.4\")\n            .setOnPermissionRequest(PermissionHandler.APPROVE_ALL)\n    ).get();\n\n    var base64ImageData = \"...\"; // your base64-encoded image\n    session.send(new MessageOptions()\n        .setPrompt(\"Describe what you see in this image\")\n        .setAttachments(List.of(\n            new BlobAttachment()\n                .setData(base64ImageData)\n                .setMimeType(\"image/png\")\n                .setDisplayName(\"screenshot.png\")\n        ))\n    ).get();\n}\n```\n\n</div>\n\n</div>\n\n## Formatos compatibles\n\nLos formatos de imagen admitidos incluyen JPG, PNG, GIF y otros tipos de imágenes comunes. En el caso de los archivos adjuntos, el tiempo de ejecución lee la imagen del disco y la convierte según sea necesario. En el caso de los datos adjuntos a blobs, proporcione los datos base64 y el tipo MIME directamente. Use PNG o JPEG para obtener los mejores resultados, ya que son los formatos más compatibles.\n\nEl campo del `capabilities.limits.vision.supported_media_types` modelo enumera los tipos MIME exactos que acepta.\n\n## Procesamiento automático\n\nEl tiempo de ejecución procesa automáticamente las imágenes para que se ajusten a las restricciones del modelo. No es necesario cambiar el tamaño manual.\n\n* Las imágenes que superan los límites de dimensión o tamaño del modelo se cambian automáticamente de tamaño (conservando la relación de aspecto) o reducen la calidad.\n* Si no se puede ajustar una imagen a los límites después de su procesamiento, se omite y no se envía al LLM.\n* El campo del modelo `capabilities.limits.vision.max_prompt_image_size` indica el tamaño máximo de la imagen en bytes.\n\nPuede comprobar estos límites en tiempo de ejecución mediante el objeto de funcionalidades del modelo. Para obtener la mejor experiencia, use imágenes PNG o JPEG de tamaño razonable.\n\n## Funcionalidades del modelo de visión\n\nNo todos los modelos admiten la visión. Compruebe las funcionalidades del modelo antes de enviar imágenes.\n\n### Campos de funcionalidad\n\n| Campo                                              | Tipo       | Description                                                                  |\n| -------------------------------------------------- | ---------- | ---------------------------------------------------------------------------- |\n| `capabilities.supports.vision`                     | `boolean`  | Si el modelo puede procesar entradas de imagen                               |\n| `capabilities.limits.vision.supported_media_types` | `string[]` | Tipos MIME que acepta el modelo (por ejemplo, `[\"image/png\", \"image/jpeg\"]`) |\n| `capabilities.limits.vision.max_prompt_images`     | `number`   | Número máximo de imágenes por solicitud                                      |\n| `capabilities.limits.vision.max_prompt_image_size` | `number`   | Tamaño máximo de imagen en bytes                                             |\n\n### Tipo de límites de visión\n\n```typescript\nvision?: {\n    supported_media_types: string[];\n    max_prompt_images: number;\n    max_prompt_image_size: number; // bytes\n};\n```\n\n## Recepción de los resultados de la imagen\n\nCuando las herramientas devuelven imágenes (por ejemplo, capturas de pantalla o gráficos generados), el resultado contiene `\"image\"` bloques de contenido con datos codificados en base64.\n\n| Campo      | Tipo      | Description                                  |\n| ---------- | --------- | -------------------------------------------- |\n| `type`     | `\"image\"` | Discriminador de tipo de bloque de contenido |\n| `data`     | `string`  | Datos de imagen codificados en Base64        |\n| `mimeType` | `string`  | Tipo MIME (por ejemplo, `\"image/png\"`)       |\n\nEstos bloques de imagen aparecen en `tool.execution_complete` los resultados del evento. Consulte la guía [Eventos de la sesión de transmisión](/es/copilot/how-tos/copilot-sdk/features/streaming-events) para obtener el ciclo de vida completo de los eventos.\n\n## Sugerencias y limitaciones\n\n| Tip                                                                 | Detalles                                                                                                                                                 |\n| ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **Usar PNG o JPEG directamente**                                    | Evita la sobrecarga de conversión: estas se envían al LLM tal cual.                                                                                      |\n| **Mantener imágenes de tamaño razonable**                           | Las imágenes grandes pueden reducir la calidad, lo que puede perder detalles importantes.                                                                |\n| **Utilice rutas de acceso absolutas para los archivos adjuntos**    | El entorno de ejecución lee los archivos del disco; es posible que las rutas de acceso relativas no se resuelvan correctamente.                          |\n| **Utilizar datos adjuntos a blobs para datos en memoria**           | Cuando ya tiene datos base64 (por ejemplo, capturas de pantalla, respuestas de API), el blob evita E/S de disco innecesario.                             |\n| **Comprobación de la compatibilidad con la visión en primer lugar** | El envío de imágenes a un modelo que no está diseñado para la visión implica un desperdicio de tokens debido a la ausencia de una interpretación visual. |\n| **Se admiten varias imágenes**                                      | Adjunte varios archivos adjuntos en un mensaje, hasta el límite del `max_prompt_images` modelo.                                                          |\n| **SVG no se admite**                                                | Los archivos SVG se basan en texto y se excluyen del procesamiento de imágenes                                                                           |\n\n## Consulte también\n\n* [Eventos de la sesión de transmisión](/es/copilot/how-tos/copilot-sdk/features/streaming-events): ciclo de vida de eventos, incluidos bloques de contenido de resultados de herramientas\n* [Dirección y puesta en cola](/es/copilot/how-tos/copilot-sdk/features/steering-and-queueing): envío de mensajes de seguimiento con datos adjuntos"}