
Here we describe a solution we delivered to one of our major enterprise customers: automatic video anonymization running on real-world footage. This project is also part of our broader experience with NVIDIA DeepStream. Over the years, we have developed several solutions using NVIDIA DeepStream across different industries and use cases, and one architectural pattern consistently emerges: DeepStream handles the computationally intensive video processing and AI workloads on the GPU, while Total.js brings everything together into a complete, integrated solution.
Before videos enter the anonymization process, they go through an initial preprocessing stage orchestrated by Total.js Flow. The original Full HD recordings are automatically converted to HD resolution using FFmpeg, reducing file sizes and optimizing the videos for subsequent AI processing.
Every day, the system processes over 20 GB of video recordings, with individual videos typically ranging from 3 to 7 hours in length. Total.js Flow manages this conversion pipeline automatically, ensuring that incoming recordings are prepared and ready for the next stage.
One particularly interesting aspect is the remarkably low memory footprint of Total.js Flow. Even while orchestrating FFmpeg video conversions, the Flow application consumes approximately 20 MB of RAM. The actual video processing is handled by FFmpeg as a separate process, allowing Total.js Flow to remain extremely lightweight while coordinating resource-intensive operations.

Once converted, the videos are placed in a queue, where they wait for an explicit anonymization request.
When anonymization is triggered, NVIDIA DeepStream takes over the computationally intensive work. The system detects people in the footage and automatically blurs their heads and faces using GPU acceleration.
However, not everyone necessarily needs to be anonymized. An operator can review the detected individuals and select those who should remain visible. The system then applies anonymization to everyone else, preserving the selected individuals in the final video.
Once processing is complete, the anonymized video is written to the configured output destination. From there, Total.js Flow continues orchestrating the workflow — sending notifications, moving files, storing results, or triggering additional services.
This approach combines GPU-accelerated AI processing with flexible workflow automation, allowing the entire pipeline to handle large volumes of long-duration video recordings with minimal manual intervention.
![]() | ![]() |
Two frames of a video anonymized by the system. Everyone's face is hidden automatically, including the people in the background.
All video processing happens within the customer's infrastructure. The video footage never leaves the customer's environment, ensuring that sensitive recordings remain under their control throughout the entire process.
NVIDIA DeepStream handles the computationally intensive video processing and AI workloads. Total.js Flow connects everything together, orchestrating the entire process across multiple locations.
For this customer, we operate multiple Total.js Flow instances distributed across different locations throughout the country. Each location runs its own Flow instance with an identical implementation, allowing video processing and file transfers to be managed locally.
One of the key advantages of this architecture is automatic synchronization between Flow instances. All distributed instances are synchronized with a central master Flow. Whenever we make a change to the main Flow implementation, the update is automatically propagated to every connected location within seconds.
This means we can maintain and improve the entire distributed system from a single place, without manually updating individual installations. Whether we modify an existing workflow, fix an issue, or introduce new functionality, all locations receive the changes almost immediately.
Total.js Flow orchestration:

Video recordings are transferred from geographically distributed Flow instances to the central infrastructure using the WebSocket protocol.
To make these transfers reliable, we developed two custom Total.js Flow components:
Both components support resumable file transfers, which is particularly important when working with large video recordings across multiple locations.
Files are transmitted in 1 MB chunks. If a network connection drops during an upload, the transfer does not need to start from the beginning. Once the WebSocket connection is re-established, the components automatically resume the upload from where it was interrupted.
This significantly reduces unnecessary network traffic and makes the system more resilient to temporary connectivity issues, especially when transferring recordings that can be several hours long.
We also developed two dedicated Flow components that integrate directly with NVIDIA DeepStream:
Person detector receives a video, runs AI-powered detection, and returns an image of each detected person together with the corresponding timestamp in the recording. These images are then displayed in the central management interface, where an operator can review the detected individuals.

Anonymizer queue manages the GPU-based anonymization process and produces the final MP4 video. It supports processing up to four videos in a single batch.

The anonymization workflow follows a two-stage approach:
This approach ensures that privacy is the default, while still allowing controlled exceptions when required by the customer's workflow.

Beyond video processing and file transfers, Total.js Flow manages the operational aspects that make the entire system reliable:
The individual components remain relatively small and focused. They initiate operations, monitor progress, handle communication, and pass data to the next step in the workflow.
The real strength of Total.js Flow is how easily these components can be combined into a complete distributed system. Adding a new step, such as an email notification, external storage integration, approval process, or another AI service, often requires nothing more than connecting another component.
With this architecture, we can centrally manage a geographically distributed video-processing infrastructure while keeping individual locations synchronized, transfers reliable, and GPU workloads under control.

Anonymization is only one of the things DeepStream can do. It reads many video sources at the same time and runs AI models on them in real time, on a device that fits next to the camera. Together with Total.js, that opens a long list of ideas for any company with cameras. We have worked on several of them, and we know the rest well enough to help you judge what is realistic:
In each case the pattern is the one above. DeepStream detects, Total.js Flow connects the result to your process, your data and your people, and the interface is built with Total.js too. It is a complete solution, not only a model.
This is the pattern we like about Total.js, and the one we have used again and again. A powerful tool, written in C++ or Python or anything else, can sit behind a Flow component. Your team gets a visual process they can read and change. The specialized technology stays where it is strong.
With DeepStream, that covers many video and AI needs. If you have one in mind, get in touch. We are happy to look at it with you.