> ## Documentation Index
> Fetch the complete documentation index at: https://gcore.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Create AI CM:soft_nudity task

> This algorithm allows to identify explicit nudity and partial nudity too (including the presence of male and female faces and other uncovered body parts) in a video. Generic info about all capabilities and limits see in the generic ["Content Moderation"](/docs/api-reference/streaming/ai/create-ai-task) method.


**What is Soft nudity detection?**

This method is often used to analyze UGC to determine whether videos can be published to all users, or to prohibit publication due to offensive and inappropriate content.

Objects that can be detected:
- `ANUS_COVERED`
- `ANUS_EXPOSED`
- `ARMPITS_COVERED`
- `ARMPITS_EXPOSED`
- `BELLY_COVERED`
- `BELLY_EXPOSED`
- `BUTTOCKS_COVERED`
- `BUTTOCKS_EXPOSED`
- `FACE_FEMALE`
- `FACE_MALE`
- `FEET_COVERED`
- `FEET_EXPOSED`
- `FEMALE_BREAST_COVERED`
- `FEMALE_BREAST_EXPOSED`
- `FEMALE_GENITALIA_COVERED`
- `FEMALE_GENITALIA_EXPOSED`
- `MALE_BREAST_EXPOSED`
- `MALE_GENITALIA_EXPOSED`


This method allows you to identify faces and other body parts. Used to find complex combinations of what is happening in a video. Please note that the number of objects is more than in the hard-nudity-detection. The method is slower.

![AI Content Moderation: hard nudity detection visual example](https://demo-files.gvideo.io/apidocs/soft_nudity_detection.gif)

**How to use?**

The information is returned with the video frame number where it was found and probability of the detected object.
Nudity detection is done using AI, so for each object a probability percentage is applied; objects with a probability of at least 30% are included in the response.

Video processing speed is approximately 1:5.


Example of detected nudity or body parts:

```
{
  "nudity_detected": true,
  "detection_results": [ "FACE_FEMALE", "BELLY_COVERED" ]
  "frames": [
      {
          "confidence": 0.82,
          "frame_number": 1,
          "label": "BELLY_COVERED"
      },...
  ]
}
```

Example response when nudity or body parts were not found:

```
{
  "nudity_detected": false,
  "detection_results": []
  "frames": []
}
```


There is no universal recipe under which a video can be considered unacceptable, since different services host different types of videos for different audiences: adult content, children's content, educational content, etc. You can determine the probability threshold at which you consider a video inappropriate. The easiest option is to run several of your videos and analyze the resulting probability coefficient.

  


Sometimes a detected object at the beginning of the video immediately makes it clear that there is no need to further analyze the video. For such cases, you can use stop tags. Use parameter "stop_objects" to specify comma separated stop tags. It is also possible to specify % probability threshold value, above which the stop tag will be triggered.

```
  {
      "url": "...",
      "stop_objects": "BELLY_COVERED:0.9,FEMALE_GENITALIA_COVERED"
  }
```


  


Please note that the API only provides a set of data (json) about the objects found, so no video is generated. The demo video video (above ^) was specially created based on json from the API for visual demonstration and better perception of the possibilities.



## OpenAPI

````yaml /api-reference/services_documented/streaming_api.yaml post /streaming/ai/tasks#cm_soft_nudity
openapi: 3.1.0
info:
  title: Gcore OpenAPI – Streaming API
  description: >-
    This OpenAPI is an aggregated OpenAPI specification that unifies all Gcore
    products into a single file. It covers Cloud, CDN, DNS, WAAP, DDoS
    Protection, Object Storage, Streaming, and FastEdge services.
  version: '2026-05-15T06:37:28.230198+00:00'
servers:
  - url: https://api.gcore.com
security:
  - APIKey: []
tags:
  - name: AI
    x-displayName: AI
  - name: Broadcasts
    x-displayName: Broadcasts
  - name: Directories
    x-displayName: Directories
  - name: Overlays
    x-displayName: Overlays
  - name: Players
    x-displayName: Players
  - name: Playlists
    x-displayName: Playlists
  - name: QualitySets
    x-displayName: QualitySets
  - name: Restreams
    x-displayName: Restreams
  - name: Streaming Statistics
    x-displayName: Statistics
  - name: Streams
    x-displayName: Streams
  - name: Subtitles
    x-displayName: Subtitles
  - name: Videos
    x-displayName: Videos
paths:
  /streaming/ai/tasks#cm_soft_nudity:
    post:
      tags:
        - AI
      summary: Create AI CM:soft_nudity task
      description: >-
        This algorithm allows to identify explicit nudity and partial nudity too
        (including the presence of male and female faces and other uncovered
        body parts) in a video. Generic info about all capabilities and limits
        see in the generic ["Content
        Moderation"](/docs/api-reference/streaming/ai/create-ai-task) method.



        **What is Soft nudity detection?**


        This method is often used to analyze UGC to determine whether videos can
        be published to all users, or to prohibit publication due to offensive
        and inappropriate content.


        Objects that can be detected:

        - `ANUS_COVERED`

        - `ANUS_EXPOSED`

        - `ARMPITS_COVERED`

        - `ARMPITS_EXPOSED`

        - `BELLY_COVERED`

        - `BELLY_EXPOSED`

        - `BUTTOCKS_COVERED`

        - `BUTTOCKS_EXPOSED`

        - `FACE_FEMALE`

        - `FACE_MALE`

        - `FEET_COVERED`

        - `FEET_EXPOSED`

        - `FEMALE_BREAST_COVERED`

        - `FEMALE_BREAST_EXPOSED`

        - `FEMALE_GENITALIA_COVERED`

        - `FEMALE_GENITALIA_EXPOSED`

        - `MALE_BREAST_EXPOSED`

        - `MALE_GENITALIA_EXPOSED`



        This method allows you to identify faces and other body parts. Used to
        find complex combinations of what is happening in a video. Please note
        that the number of objects is more than in the hard-nudity-detection.
        The method is slower.


        ![AI Content Moderation: hard nudity detection visual
        example](https://demo-files.gvideo.io/apidocs/soft_nudity_detection.gif)


        **How to use?**


        The information is returned with the video frame number where it was
        found and probability of the detected object.

        Nudity detection is done using AI, so for each object a probability
        percentage is applied; objects with a probability of at least 30% are
        included in the response.


        Video processing speed is approximately 1:5.



        Example of detected nudity or body parts:


        ```

        {
          "nudity_detected": true,
          "detection_results": [ "FACE_FEMALE", "BELLY_COVERED" ]
          "frames": [
              {
                  "confidence": 0.82,
                  "frame_number": 1,
                  "label": "BELLY_COVERED"
              },...
          ]
        }

        ```


        Example response when nudity or body parts were not found:


        ```

        {
          "nudity_detected": false,
          "detection_results": []
          "frames": []
        }

        ```



        There is no universal recipe under which a video can be considered
        unacceptable, since different services host different types of videos
        for different audiences: adult content, children's content, educational
        content, etc. You can determine the probability threshold at which you
        consider a video inappropriate. The easiest option is to run several of
        your videos and analyze the resulting probability coefficient.

          


        Sometimes a detected object at the beginning of the video immediately
        makes it clear that there is no need to further analyze the video. For
        such cases, you can use stop tags. Use parameter "stop_objects" to
        specify comma separated stop tags. It is also possible to specify %
        probability threshold value, above which the stop tag will be triggered.


        ```
          {
              "url": "...",
              "stop_objects": "BELLY_COVERED:0.9,FEMALE_GENITALIA_COVERED"
          }
        ```


          


        Please note that the API only provides a set of data (json) about the
        objects found, so no video is generated. The demo video video (above ^)
        was specially created based on json from the API for visual
        demonstration and better perception of the possibilities.
      operationId: post_ai_contentmoderation_softnudity
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ai_contentmoderation_softnudity'
      responses:
        '201':
          description: >-
            Response returns ID of the created AI task. Using this AI task ID,
            you can check the status and get the video processing result. Look
            at GET /ai/results method.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ai_post_response'
        '400':
          description: |-
            Bad request:
            - "url" is not specified,
            - Queue limit reached (100), try later,
            - etc
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/streaming_error'
        '422':
          description: >-
            This is advanced functionality; to enable it, contact your manager
            or the Support Team.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/upgraderequired'
components:
  schemas:
    ai_contentmoderation_softnudity:
      allOf:
        - $ref: '#/components/schemas/ai_contentmoderation_general'
      required:
        - category
      properties:
        category:
          type: string
          enum:
            - soft_nudity
          description: AI content moderation with "soft_nudity" algorithm
        stop_objects:
          type: string
          enum:
            - ANUS_COVERED
            - ANUS_EXPOSED
            - ARMPITS_COVERED
            - ARMPITS_EXPOSED
            - BELLY_COVERED
            - BELLY_EXPOSED
            - BUTTOCKS_COVERED
            - BUTTOCKS_EXPOSED
            - FACE_FEMALE
            - FACE_MALE
            - FEET_COVERED
            - FEET_EXPOSED
            - FEMALE_BREAST_COVERED
            - FEMALE_BREAST_EXPOSED
            - FEMALE_GENITALIA_COVERED
            - FEMALE_GENITALIA_EXPOSED
            - MALE_BREAST_EXPOSED
            - MALE_GENITALIA_EXPOSED
          description: >-
            Comma separated objects, and probabilities, that will cause the
            processing to stop immediatelly after finding.
      example:
        url: https://demo-files.gvideo.io/ai_demo_subtitles_nudity_detection.mp4
        task_name: content-moderation
        category: soft_nudity
        stop_objects: BELLY_COVERED:0.9,FEMALE_GENITALIA_COVERED
    ai_post_response:
      type: object
      required:
        - task_id
      properties:
        task_id:
          type: string
          format: uuid
          description: >-
            ID of the created AI task, from which you can get the execution
            result
      example:
        task_id: aafe70c6-0000-0000-0000-327b65f7670f
    streaming_error:
      type: object
      properties:
        error:
          type: string
          description: Text message with description of error.
      example:
        error: Queue limit reached (100), try later.
    upgraderequired:
      type: object
      properties:
        error:
          type: string
          description: >-
            This is advanced functionality; to enable it, contact your manager
            or support service.
      example:
        error: Feature is disabled. Contact support to enable.
    ai_contentmoderation_general:
      type: object
      required:
        - url
        - task_name
      properties:
        task_name:
          type: string
          description: Name of the task to be performed
          enum:
            - content-moderation
        url:
          type: string
          description: >-
            URL to the MP4 file to analyse. File must be publicly accessible via
            HTTP/HTTPS.
        category:
          type: string
          description: >-
            Model for analysis (content-moderation only). Determines what
            exactly needs to be found in the video.
          enum:
            - sport
            - nsfw
            - hard_nudity
            - soft_nudity
        client_user_id:
          type: string
          maxLength: 256
          default: null
          description: >-
            Meta parameter, designed to store your own identifier. Can be used
            by you to tag requests from different end-users. It is not used in
            any way in video processing.
        client_entity_data:
          type: string
          maxLength: 4096
          default: null
          description: >-
            Meta parameter, designed to store your own extra information about a
            video entity: video source, video id, etc. It is not used in any way
            in video processing.


            For example, if an AI-task was created automatically when you
            uploaded a video with the AI auto-processing option (nudity
            detection, etc), then the ID of the associated video for which the
            task was performed will be explicitly indicated here.
      example:
        url: https://demo-files.gvideo.io/ai_demo_subtitles_nudity_detection.mp4
        task_name: content-moderation
        category: nsfw
  securitySchemes:
    APIKey:
      description: >-
        API key for authentication. Make sure to include the word `apikey`,
        followed by a single space and then your token.

        Example: `apikey 1234$abcdef`
      type: apiKey
      in: header
      name: Authorization

````