Moe edited this page Jan 15, 2017 · 32 revisions

Firstly what is CCTV? What is Open Source?

CCTV stands for Closed-Circuit Television. It’s also a fancy way of saying DVR, Digital Video Recorder. It’s a system in which multiple cameras can be watched or recorded for either personal or business circumstances.

Open Source means it is open for editing to your liking… and the way its being made. It will not be difficult. There are no arbitrary libraries, like mootools, to get in your way.

If you really wanted you could rebuild the client side from scratch, just include socket.io, set the transport to websocket and connect to your Shinobi server.

A Quick Look at Shinobi on YouTube

What is the aim of Shinobi

Shinobi can be used as a Baby Monitor, Construction Site Montage Viewer, Store Camera DVR, and much more. I suppose the simplest way of saying it is As Magento is to eCommerce, Shinobi is to CCTV.

Help make Shinobi the best Open Source CCTV platform.

Noted Aspects

  • Records IP Cameras and Local Cameras
  • Streams by WebSocket
  • Save to WebM and MP4
    • Other formats will be added after codec choices are less confusing.
  • API
    • Get videos
    • Get monitors
    • Change monitor modes : Disabled, Watch, Record

Why make this? Other solutions already exist.

ZoneMinder was the first choice but it proved unstable. A few reasons are mentioned below. Solutions such as ispyconnect are not relevant as they have a cost for using their platform.

  • MJPEG streams are beyond unusable in modern applications.
    • Essentially with MJPEG you are opening a new stream everytime you create an image with an MJPEG url. Even if you remove this element it will continue to eat resources from the server and client. Only way to deal with it currently is through an `iframe` or `popup`. Neither of which should be considered acceptable.
    • Shinobi addresses this with `WebSocket` streams. As frames are captured by FFMPEG they are base64 encoded and sent to the client.
  • JPEG Storage is just a terrible idea.
    • Saving each frame as a separate file in JPEG format can have a seriously detrmental effect on storage space and the hardware itself. Hardware is more likely to fail under the stress of continuously saving frames to storage.
    • Shinobi saves to WebM and MP4 files. While MP4 takes a fair amount of space.. its level of CPU usage during encoding for H.264 streams is just amazing.
  • Using languages that are not needed.
    • You’ll find that ZoneMinder uses multiple languages to achieve very small results. This probably just because of the time it was written in… but with that said all the devs currently working on it should have addressed these issues and removed unecessary steps, languages, and files. ZoneMinder uses Perl, PHP, JavaScript, C, HTML, CSS, MySQL, and probably more.
    • Shinobi uses JavaScript, HTML, CSS, and MySQL. Simple right? It should be.
  • Using outdated or troublesome libraries.
    • Mootools, need I say more? and the API is done with an added library called CakePHP… just.. why?
  • Outdated methods
    • Continuously hammering the database is not a good idea. It should already have had websockets added and interval refreshes removed completely before 2014.

+70 devs and gaining +$900/month in donations.. they should have gotten somewhere. This is why Shinobi had to be born.

Supported Systems

How to Install and Run


Moe Alam

Follow me on Twitter

Find me on Discord! :)


If you like Shinobi please check out some ways you can help support Shinobi.


If you wish to use this software for commercial purposes please consider donating :) If not.. including my name would be nice.

  Copyright (C) 2016-2025 Moe Alam, moeiscool

  This program is free software; you can redistribute it and/or
  modify it under the terms of the GNU General Public License
  as published by the Free Software Foundation; either version 2
  of the License, or (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  GNU General Public License for more details.
  # Libraries Used
  vbox.css (the framework that does the vertical panel layout) - I honestly don't know who made this, i found it in a zip.
  jQuery - http://jquery.com/
  Socket.io - http://socket.io/
  Bootstrap - http://getbootstrap.com/
  Moment.js - http://momentjs.com/
  Livestamp.js - https://mattbradley.github.io/livestampjs/
  Font Awesome - http://fontawesome.io/
  Node.js - https://nodejs.org
  MySQL - https://www.mysql.com/
  NPM: mysql - https://www.npmjs.com/package/mysql
  NPM: crypto - https://www.npmjs.com/package/crypto
  NPM: express - http://expressjs.com/
  NPM: request - https://www.npmjs.com/package/request
  NPM: connection-tester - https://www.npmjs.com/package/connection-tester
  image : shinobi.jpg - the background image on the front page is not mine, there were no credits where i found it. it just looks cool :D
  and maybe a few others.