diff --git a/examples/demo.js b/examples/demo.js
new file mode 100644
index 00000000..ca89e2b5
--- /dev/null
+++ b/examples/demo.js
@@ -0,0 +1,207 @@
+window.onload = function() {
+
+ sequencer = ImageSequencer();
+
+ // Load information of all modules (Name, Inputs, Outputs)
+ var modulesInfo = sequencer.modulesInfo();
+
+ // Add modules to the addStep dropdown
+ for(var m in modulesInfo) {
+ $('#addStep select').append(
+ ''
+ );
+ }
+
+ // Initial definitions
+ var steps = document.querySelector('#steps');
+ var parser = new DOMParser();
+ var reader = new FileReader();
+ initial = "images/grid.png";
+
+ // Set the UI in sequencer. This Will generate HTML based on
+ // Image Sequencer events :
+ // onSetup : Called every time a step is added
+ // onDraw : Called every time a step starts draw
+ // onComplete : Called every time a step finishes drawing
+ // onRemove : Called everytime a step is removed
+ // The variable 'step' stores useful data like input and
+ // output values, step information.
+ // See documetation for more details.
+ sequencer.setUI({
+
+ onSetup: function(step) {
+
+ step.ui = '\
+
\
+
\
+
'+step.name+'
\
+
'+(step.description || '')+'
\
+
\
+
\
+ \
+
\
+
\
+ ';
+
+ var tools =
+ '
\
+ \
+
';
+
+ step.ui = parser.parseFromString(step.ui,'text/html');
+ step.ui = step.ui.querySelector('div.row');
+ step.imgElement = step.ui.querySelector('img');
+
+ if(sequencer.modulesInfo().hasOwnProperty(step.name)) {
+ var inputs = sequencer.modulesInfo(step.name).inputs;
+ var outputs = sequencer.modulesInfo(step.name).outputs;
+ var io = Object.assign(inputs,outputs);
+ for (var i in io) {
+ var div = document.createElement('div');
+ div.className = "row";
+ div.setAttribute('name',i);
+ div.innerHTML = "