DeepSeek Harness (DSH) adopts a plugin-based architecture, allowing the extension of features that are not natively supported. If you send a screenshot to a model that does not support image input, such as deepseek-v4-pro or deepseek-v4-flash, the message will be directly rejected by the gateway. The dsh-auto-vision plugin solves this problem by intercepting images, using a configured vision model to recognize them, and writing the image description as a collapsed context entry into the session history, while your original message remains unchanged.

Plugin Overview

dsh-auto-vision is a DSH plugin maintained by soarGuo and belongs to the model inference category. It does not modify the DSH source code and implements its functionality through pure plugin configuration. Its core value is: enabling models that do not support image input to accept screenshots and persist visual context.

Core Features

  1. Automatic completion of model input declarations: autoDeclareInput is enabled by default. The plugin automatically adds the input: [text, image] declaration to configured models, satisfying the gateway admission checks.
  2. Message splitting and processing: Images are recognized as text descriptions and appended after the original message as independent “notice” context messages. The model can reference these historical descriptions, enabling persistent memory.
  3. Request-level stripping: When sending the request to the model, image data is replaced with a short placeholder, ensuring that the image data does not actually reach the gateway and avoiding rejection.
  4. Vision routing follows grouping: The selection of the vision model automatically follows the current session model grouping (such as sub2api or official routing), ensuring consistency in API keys and configuration.
  5. Recursive recognition of tool results: It not only recognizes images in top-level messages but also recursively recognizes embedded images in tool results (such as read_image).

Installation and Enablement

Use the official DSH plugin command to install it:

dsh plugin --profile web add github:soarGuo/dsh-auto-vision

After installation, restart the DSH process for the change to take effect. The plugin depends on DSH public modules and requires no additional runtime dependencies.

Typical Configuration

Default Configuration

After installing the plugin, you can use the default configuration without manually modifying settings.yaml:

auto-vision:
  visionProvider: deepseek-official
  visionModel: deepseek-v4-flash-vision-exp
  nativeVision:
    [
      { provider: deepseek-official, model: deepseek-v4-flash-vision-exp },
      { provider: deepseek, model: deepseek-v4-flash-vision-exp }
    ]
  autoDeclareInput: true

Manual Declaration

If autoDeclareInput is disabled, or if you need to use a non-default vision model, you must manually declare it in settings.yaml:

llm-deepseek:
  models:
    - id: deepseek-v4-pro
      input: [text, image]

Notes

  1. GUI display and actual behavior: After declaring input: [text, image], the GUI will show that the model supports images, but the actual images are bridged by the plugin and are not sent to the gateway.
  2. After disabling the plugin: If the plugin is disabled, do not send images to the bridged model; otherwise, the images will be sent directly to the gateway and rejected. In this case, switch to a native vision model or re-enable the plugin.
  3. Official routing models: When bridging models that use official routing (such as deepseek-official), you must also declare input: [text, image] in llm-deepseek.models.
  4. Failure handling: Vision recognition failures (network or gateway errors) will not block the message; they will only be marked as failures in the description entry. If the user cancels, the process is aborted as-is.

Summary

dsh-auto-vision provides vision capabilities to non-vision models through a plugin. It converts images into text descriptions and persists them in the history, enabling models to handle multimodal input like native vision models. To learn about the latest version or source code, visit the GitHub repository.