diff --git a/dist/image-sequencer-ui.js b/dist/image-sequencer-ui.js index 22bc5e69..7a220bff 100644 --- a/dist/image-sequencer-ui.js +++ b/dist/image-sequencer-ui.js @@ -47,7 +47,7 @@ window.onload = function() { $(':root').animate({scrollTop: 0}); } - $('#move-up').on('click',topFunction); + $('#move-up').on('click', topFunction); // UI for each step: @@ -64,14 +64,14 @@ window.onload = function() { } var resetSequence = function(){ - var r=confirm('Do you want to reset the sequence?'); + var r = confirm('Do you want to reset the sequence?'); if (r) window.location = '/'; }; $('#addStep select').on('change', ui.selectNewStepUi); $('#addStep #add-step-btn').on('click', ui.addStepUi); - $('#resetButton').on('click',resetSequence); + $('#resetButton').on('click', resetSequence); //Module button radio selection $('.radio-group .radio').on('click', function() { @@ -85,11 +85,6 @@ window.onload = function() { $(this).removeClass('selected'); }); - $('#download-btn').click(function() { - $('.step-thumbnail:last()').trigger('click'); - return false; - }); - function displayMessageOnSaveSequence(){ $('.savesequencemsg').fadeIn(); setTimeout(function() { @@ -119,7 +114,7 @@ window.onload = function() { var button = event.target; button.disabled = true; - button.innerHTML=''; + button.innerHTML = ''; try { // Select all images from previous steps @@ -193,35 +188,35 @@ window.onload = function() { onLoad: function onFileReaderLoad(progress) { var reader = progress.target; var step = sequencer.steps[0]; - var util= intermediateHtmlStepUi(sequencer); + var util = intermediateHtmlStepUi(sequencer); step.output.src = reader.result; sequencer.run({ index: 0 }); - if(typeof step.options !=='undefined') + if(typeof step.options !== 'undefined') step.options.step.imgElement.src = reader.result; else step.imgElement.src = reader.result; - insertPreview.updatePreviews(reader.result,'#addStep'); - insertPreview.updatePreviews(sequencer.steps[0].imgElement.src,'.insertDiv'); + insertPreview.updatePreviews(reader.result, '#addStep'); + insertPreview.updatePreviews(sequencer.steps[0].imgElement.src, '.insertDiv'); }, onTakePhoto: function (url) { var step = sequencer.steps[0]; step.output.src = url; sequencer.run({ index: 0 }); - if(typeof step.options !=='undefined') + if(typeof step.options !== 'undefined') step.options.step.imgElement.src = url; else step.imgElement.src = url; - insertPreview.updatePreviews(url,'#addStep'); - insertPreview.updatePreviews(sequencer.steps[0].imgElement.src,'.insertDiv'); + insertPreview.updatePreviews(url, '#addStep'); + insertPreview.updatePreviews(sequencer.steps[0].imgElement.src, '.insertDiv'); } }); setupCache(); if (urlHash.getUrlHashParameter('src')) { - insertPreview.updatePreviews(urlHash.getUrlHashParameter('src'),'#addStep'); + insertPreview.updatePreviews(urlHash.getUrlHashParameter('src'), '#addStep'); } else { - insertPreview.updatePreviews('images/tulips.png','#addStep'); + insertPreview.updatePreviews('images/tulips.png', '#addStep'); } }; @@ -277,7 +272,7 @@ function DefaultHtmlSequencerUi(_sequencer, options) { function onLoad() { importStepsFromUrlHash(); - if ($('#selectStep').val()==='none') + if ($('#selectStep').val() === 'none') $(addStepSel + ' #add-step-btn').prop('disabled', true); handleSaveSequence(); } @@ -342,8 +337,8 @@ function DefaultHtmlSequencerUi(_sequencer, options) { } function handleSaveSequence(){ - var stepCount=sequencer.steps.length; - if(stepCount<2) + var stepCount = sequencer.steps.length; + if(stepCount < 2) $(' #save-seq').prop('disabled', true); else $(' #save-seq').prop('disabled', false); @@ -393,8 +388,8 @@ function DefaultHtmlStepUi(_sequencer, options) {
Select a new module to add to your sequence.
Resize
Brightness
Contrast
Saturation
Rotate
Crop
Select a new module to add to your sequence.
Resize
Brightness
Contrast
Saturation
Rotate
Crop
\
Select or drag in an image to overlay.\
@@ -87847,7 +87871,7 @@ module.exports = function ImportImageModuleUi(step, ui) {
arguments[4][214][0].apply(exports,arguments)
},{"./Module":299,"./info.json":302,"dup":214}],302:[function(require,module,exports){
module.exports={
- "name": "Import Image",
+ "name": "import-image",
"description": "Import a new image and replace the original with it. Future versions may enable a blend mode. Specify an image by URL or by file selector.",
"url": "https://github.com/publiclab/image-sequencer/tree/master/MODULES.md",
"inputs": {
@@ -87904,6 +87928,7 @@ module.exports = function Ndvi(options, UI) {
return require('../_nomodule/PixelManipulation.js')(input, {
output: output,
+ ui: options.step.ui,
changePixel: changePixel,
format: input.format,
image: options.image,
@@ -87921,7 +87946,7 @@ module.exports = function Ndvi(options, UI) {
};
};
-},{"../_nomodule/PixelManipulation.js":348,"./../../util/getDefaults.js":356,"./Ui.js":304,"./info.json":306}],304:[function(require,module,exports){
+},{"../_nomodule/PixelManipulation.js":352,"./../../util/getDefaults.js":360,"./Ui.js":304,"./info.json":306}],304:[function(require,module,exports){
// hide on save
module.exports = function CropModuleUi(step, ui) {
@@ -87942,7 +87967,7 @@ module.exports = function CropModuleUi(step, ui) {
var xPos = e.pageX - offset.left;
var yPos = e.pageY - offset.top;
var ndvi = canvas.getContext('2d').getImageData(xPos, yPos, 1, 1).data[0];
- ndvi = ndvi/127.5 - 1 ;
+ ndvi = ndvi / 127.5 - 1 ;
ndvi = ndvi.toFixed(2);
ndviImage[0].title = 'NDVI: ' + ndvi;
});
@@ -87961,7 +87986,7 @@ module.exports = function CropModuleUi(step, ui) {
arguments[4][214][0].apply(exports,arguments)
},{"./Module":303,"./info.json":306,"dup":214}],306:[function(require,module,exports){
module.exports={
- "name": "NDVI",
+ "name": "ndvi",
"description": "Normalized Difference Vegetation Index, or NDVI, is an image analysis technique used with aerial photography. It's a way to visualize the amounts of infrared and other wavelengths of light reflected from vegetation by comparing ratios of blue and red light absorbed versus green and IR light reflected. NDVI is used to evaluate the health of vegetation in satellite imagery, where it correlates with how much photosynthesis is happening. This is helpful in assessing vegetative health or stress. Read more. a){if(t.match_start=e,a=n,n>=s)break;f=l[o+a-1],d=l[o+a]}}}while((e=h[e&c])>u&&0!=--i);return a<=t.lookahead?a:t.lookahead}function ot(t){var e,r,n,o,u,l,c,h,p,f,d=t.w_size;do{if(o=t.window_size-t.lookahead-t.strstart,t.strstart>=d+(d-O)){i.arraySet(t.window,t.window,d,d,0),t.match_start-=d,t.strstart-=d,t.block_start-=d,e=r=t.hash_size;do{n=t.head[--e],t.head[e]=n>=d?n-d:0}while(--r);e=r=d;do{n=t.prev[--e],t.prev[e]=n>=d?n-d:0}while(--r);o+=d}if(0===t.strm.avail_in)break;if(l=t.strm,c=t.window,h=t.strstart+t.lookahead,p=o,f=void 0,(f=l.avail_in)>p&&(f=p),r=0===f?0:(l.avail_in-=f,i.arraySet(c,l.input,l.next_in,f,h),1===l.state.wrap?l.adler=a(l.adler,c,f,h):2===l.state.wrap&&(l.adler=s(l.adler,c,f,h)),l.next_in+=f,l.total_in+=f,f),t.lookahead+=r,t.lookahead+t.insert>=F)for(u=t.strstart-t.insert,t.ins_h=t.window[u],t.ins_h=(t.ins_h<
This is designed for use with red-filtered single camera DIY Infragram cameras; change to 'blue' for blue filters",
"inputs": {
"filter": {
@@ -87989,17 +88014,156 @@ module.exports = require('../../util/createMetaModule.js')(
infoJson: require('./info.json')
}
)[0];
-},{"../../util/createMetaModule.js":355,"./info.json":309}],308:[function(require,module,exports){
+},{"../../util/createMetaModule.js":359,"./info.json":309}],308:[function(require,module,exports){
arguments[4][214][0].apply(exports,arguments)
},{"./Module":307,"./info.json":309,"dup":214}],309:[function(require,module,exports){
module.exports={
- "name": "NDVI-Colormap",
+ "name": "ndvi-colormap",
"description": "Sequentially Applies NDVI and Colormap steps",
"inputs": {},
"docs-link": "https://github.com/publiclab/image-sequencer/blob/main/docs/MODULES.md#ndvi-colormap-module"
}
},{}],310:[function(require,module,exports){
+module.exports = function NoiseReduction(options, UI) {
+ var defaults = require('./../../util/getDefaults.js')(require('./info.json'));
+ var output;
+
+ function draw(input, callback, progressObj) {
+
+ progressObj.stop(true);
+ progressObj.overrideFlag = true;
+
+ var step = this;
+ options.method = options.method || defaults.method;
+
+ function extraManipulation(pixels) {
+ pixels = require('./NoiseReduction.js')(pixels, options.method);
+ return pixels;
+ }
+
+ function output(image, datauri, mimetype) {
+ // This output is accessible by Image Sequencer
+ step.output = { src: datauri, format: mimetype };
+
+ }
+
+ return require('../_nomodule/PixelManipulation.js')(input, {
+ output: output,
+ ui: options.step.ui,
+ extraManipulation: extraManipulation,
+ format: input.format,
+ image: options.image,
+ callback: callback
+ });
+ }
+ return {
+ options: options,
+ draw: draw,
+ output: output,
+ UI: UI
+ };
+};
+},{"../_nomodule/PixelManipulation.js":352,"./../../util/getDefaults.js":360,"./NoiseReduction.js":311,"./info.json":313}],311:[function(require,module,exports){
+module.exports = function Noise(pixels, method) {
+ let neighbourX = [-1, -1, -1, 0, 0, 0, 1, 1, 1];
+ let neighbourY = [-1, 0, 1, -1, 0, 1, -1, 0, 1];
+
+ if(method == 'Median Filtering'){
+
+ for(let y = 0; y < pixels.shape[1]; y++){
+ for(let x = 0; x < pixels.shape[0]; x++){
+ let i = 0, k = 0, windowr = [],windowg = [], windowb = [];
+
+ while( k <= 8){
+ let newX = x + neighbourX[k], newY = y + neighbourY[k];
+
+ if( newX >= 0 && newX < pixels.shape[0])
+ {
+ if( newY >= 0 && newY < pixels.shape[1]){
+ windowr[i] = pixels.get((newX),(newY),0);
+ windowg[i] = pixels.get((newX),(newY),1);
+ windowb[i] = pixels.get((newX),(newY),2);
+ i++;
+ }
+ }
+ k++;
+ }
+
+ windowr.sort();
+ windowg.sort();
+ windowb.sort();
+
+ if(i%2 == 0)
+ {
+ let value = windowr[i/2] + windowr[(i/2)-1];
+ pixels.set(x,y,0,value);
+
+ value = windowg[i/2] + windowg[(i/2)-1];
+ pixels.set(x,y,1,value);
+
+ value = windowb[i/2] + windowb[(i/2)-1];
+ pixels.set(x,y,2,value);
+
+ }
+ else {
+ pixels.set(x, y, 0, windowr[Math.floor(i/2)]);
+ pixels.set(x, y, 1, windowg[Math.floor(i/2)]);
+ pixels.set(x, y, 2, windowb[Math.floor(i/2)]);
+
+ }
+ }
+ }
+ }
+ else if(method == 'Mean Filtering'){
+
+ for(let y = 0; y < pixels.shape[1]; y++){
+ for(let x = 0; x < pixels.shape[0]; x++){
+ let i = 0, k = 0, sumR=0, sumG = 0, sumB =0;
+
+ while( k <= 8){
+ let newX = x + neighbourX[k], newY = y + neighbourY[k];
+
+ if( newX >= 0 && newX < pixels.shape[0])
+ {
+ if( newY >= 0 && newY < pixels.shape[1]){
+ sumR += pixels.get(newX,newY,0);
+ sumG += pixels.get(newX,newY,1);
+ sumB += pixels.get(newX,newY,2);
+ i++;
+ }
+ }
+ k++;
+ }
+
+ pixels.set(x, y, 0, sumR/i);
+ pixels.set(x, y, 1, sumG/i);
+ pixels.set(x, y, 2, sumB/i);
+
+ }
+ }
+ }
+
+ return pixels;
+};
+},{}],312:[function(require,module,exports){
+arguments[4][214][0].apply(exports,arguments)
+},{"./Module":310,"./info.json":313,"dup":214}],313:[function(require,module,exports){
+module.exports={
+ "name": "Noise Reduction",
+ "description": "Reduces noise from Image",
+ "inputs": {
+ "method": {
+ "type": "select",
+ "desc": "Select the noise filtering method",
+ "default": "Median Filtering",
+ "values": ["Mean Filtering","Median Filtering"]
+ }
+ },
+ "docs-link":""
+}
+
+},{}],314:[function(require,module,exports){
module.exports = function Dynamic(options, UI, util) {
var defaults = require('./../../util/getDefaults.js')(require('./info.json'));
@@ -88067,6 +88231,7 @@ module.exports = function Dynamic(options, UI, util) {
// run PixelManipulation on first Image pixels
return require('../_nomodule/PixelManipulation.js')(baseStepOutput, {
output: output,
+ ui: options.step.ui,
changePixel: changePixel,
format: baseStepOutput.format,
image: baseStepImage,
@@ -88084,11 +88249,11 @@ module.exports = function Dynamic(options, UI, util) {
};
};
-},{"../../util/ParseInputCoordinates":354,"../_nomodule/PixelManipulation.js":348,"./../../util/getDefaults.js":356,"./info.json":312,"get-pixels":28}],311:[function(require,module,exports){
+},{"../../util/ParseInputCoordinates":358,"../_nomodule/PixelManipulation.js":352,"./../../util/getDefaults.js":360,"./info.json":316,"get-pixels":28}],315:[function(require,module,exports){
arguments[4][214][0].apply(exports,arguments)
-},{"./Module":310,"./info.json":312,"dup":214}],312:[function(require,module,exports){
+},{"./Module":314,"./info.json":316,"dup":214}],316:[function(require,module,exports){
module.exports={
- "name": "Overlay",
+ "name": "overlay",
"description": "Overlays an Image over another at a given position(x,y) in pixels or in %",
"inputs": {
"x": {
@@ -88110,7 +88275,7 @@ module.exports={
"docs-link":"https://github.com/publiclab/image-sequencer/blob/main/docs/MODULES.md#overlay-module"
}
-},{}],313:[function(require,module,exports){
+},{}],317:[function(require,module,exports){
module.exports = function PaintBucket(options, UI) {
var output;
@@ -88136,6 +88301,7 @@ module.exports = function PaintBucket(options, UI) {
return require('../_nomodule/PixelManipulation.js')(input, {
output: output,
+ ui: options.step.ui,
extraManipulation: extraManipulation,
format: input.format,
image: options.image,
@@ -88152,7 +88318,7 @@ module.exports = function PaintBucket(options, UI) {
};
};
-},{"../_nomodule/PixelManipulation.js":348,"./PaintBucket":314}],314:[function(require,module,exports){
+},{"../_nomodule/PixelManipulation.js":352,"./PaintBucket":318}],318:[function(require,module,exports){
module.exports = exports = function(pixels, options) {
@@ -88220,11 +88386,11 @@ module.exports = exports = function(pixels, options) {
return pixels;
};
-},{"./../../util/getDefaults.js":356,"./info.json":316}],315:[function(require,module,exports){
+},{"./../../util/getDefaults.js":360,"./info.json":320}],319:[function(require,module,exports){
arguments[4][214][0].apply(exports,arguments)
-},{"./Module":313,"./info.json":316,"dup":214}],316:[function(require,module,exports){
+},{"./Module":317,"./info.json":320,"dup":214}],320:[function(require,module,exports){
module.exports={
- "name": "PaintBucket",
+ "name": "paint-bucket",
"description": "Fill color in pixels",
"inputs": {
"startingX": {
@@ -88255,7 +88421,7 @@ module.exports={
"docs-link":"https://github.com/publiclab/image-sequencer/blob/main/docs/MODULES.md#paint-bucket-module"
}
-},{}],317:[function(require,module,exports){
+},{}],321:[function(require,module,exports){
module.exports = function ReplaceColor(options, UI) {
var output;
@@ -88285,6 +88451,7 @@ module.exports = function ReplaceColor(options, UI) {
return require('../_nomodule/PixelManipulation.js')(input, {
output: output,
+ ui: options.step.ui,
changePixel: changePixel,
extraManipulation: extraManipulation,
format: input.format,
@@ -88301,7 +88468,7 @@ module.exports = function ReplaceColor(options, UI) {
};
};
-},{"../_nomodule/PixelManipulation.js":348,"./ReplaceColor":318}],318:[function(require,module,exports){
+},{"../_nomodule/PixelManipulation.js":352,"./ReplaceColor":322}],322:[function(require,module,exports){
module.exports = exports = function(pixels, options){
var color = options.color || '228 86 81';
var replaceColor = options.replaceColor || '0 0 255';
@@ -88315,41 +88482,41 @@ module.exports = exports = function(pixels, options){
cb = color[2];
var tolerance = options.tolerance || 50;
- var maxFactor = (1 + tolerance/100);
- var minFactor = (1 - tolerance/100);
+ var maxFactor = (1 + tolerance / 100);
+ var minFactor = (1 - tolerance / 100);
function isSimilar(r, g, b){
- return ( r >= cr*minFactor && r <= cr*maxFactor &&
- g >= cg*minFactor && g <= cg*maxFactor &&
- b >= cb*minFactor && b <= cb*maxFactor);
+ return ( r >= cr * minFactor && r <= cr * maxFactor &&
+ g >= cg * minFactor && g <= cg * maxFactor &&
+ b >= cb * minFactor && b <= cb * maxFactor);
}
for(var i = 0; i < pixels.shape[0]; i++){
for(var j = 0; j < pixels.shape[1]; j++){
- var r = pixels.get(i,j,0),
- g = pixels.get(i,j,1),
- b = pixels.get(i,j,2);
- if(isSimilar(r,g,b)){
+ var r = pixels.get(i, j, 0),
+ g = pixels.get(i, j, 1),
+ b = pixels.get(i, j, 2);
+ if(isSimilar(r, g, b)){
if (replaceMethod == 'greyscale'){
- var avg = (r + g + b)/3;
- pixels.set(i,j,0,avg);
- pixels.set(i,j,1,avg);
- pixels.set(i,j,2,avg);
+ var avg = (r + g + b) / 3;
+ pixels.set(i, j, 0, avg);
+ pixels.set(i, j, 1, avg);
+ pixels.set(i, j, 2, avg);
}else {
- pixels.set(i,j,0,replaceColor[0]);
- pixels.set(i,j,1,replaceColor[1]);
- pixels.set(i,j,2,replaceColor[2]);
+ pixels.set(i, j, 0, replaceColor[0]);
+ pixels.set(i, j, 1, replaceColor[1]);
+ pixels.set(i, j, 2, replaceColor[2]);
}
}
}
}
return pixels;
};
-},{}],319:[function(require,module,exports){
+},{}],323:[function(require,module,exports){
arguments[4][214][0].apply(exports,arguments)
-},{"./Module":317,"./info.json":320,"dup":214}],320:[function(require,module,exports){
+},{"./Module":321,"./info.json":324,"dup":214}],324:[function(require,module,exports){
module.exports={
- "name": "ReplaceColor",
+ "name": "replace-color",
"description": "Replace color with grey or your desired color",
"inputs": {
"replaceMethod": {
@@ -88382,7 +88549,7 @@ module.exports={
"docs-link":"https://github.com/publiclab/image-sequencer/blob/main/docs/MODULES.md#replacecolor-module"
}
-},{}],321:[function(require,module,exports){
+},{}],325:[function(require,module,exports){
/*
* Resize the image by given percentage value
*/
@@ -88416,7 +88583,7 @@ module.exports = function Resize(options, UI) {
new_width = Math.round(pixels.shape[0] * (resize_value / 100));
new_height = Math.round(pixels.shape[1] * (resize_value / 100));
- var bitmap = new imagejs.Bitmap({width: pixels.shape[0], height: pixels.shape[1]});
+ var bitmap = new imagejs.Bitmap({ width: pixels.shape[0], height: pixels.shape[1] });
bitmap._data.data = pixels.data;
@@ -88426,7 +88593,7 @@ module.exports = function Resize(options, UI) {
});
pixels.data = resized._data.data;
- pixels.shape = [new_width,new_height,4];
+ pixels.shape = [new_width, new_height, 4];
pixels.stride[1] = 4 * new_width;
return pixels;
@@ -88439,6 +88606,7 @@ module.exports = function Resize(options, UI) {
return require('../_nomodule/PixelManipulation.js')(input, {
output: output,
+ ui: options.step.ui,
changePixel: changePixel,
extraManipulation: extraManipulation,
format: input.format,
@@ -88456,11 +88624,11 @@ module.exports = function Resize(options, UI) {
};
};
-},{"../_nomodule/PixelManipulation.js":348,"./../../util/getDefaults.js":356,"./info.json":323,"imagejs":88}],322:[function(require,module,exports){
+},{"../_nomodule/PixelManipulation.js":352,"./../../util/getDefaults.js":360,"./info.json":327,"imagejs":88}],326:[function(require,module,exports){
arguments[4][214][0].apply(exports,arguments)
-},{"./Module":321,"./info.json":323,"dup":214}],323:[function(require,module,exports){
+},{"./Module":325,"./info.json":327,"dup":214}],327:[function(require,module,exports){
module.exports={
- "name": "Resize",
+ "name": "resize",
"description": "Resize image by given percentage value",
"inputs": {
"resize": {
@@ -88472,9 +88640,9 @@ module.exports={
"docs-link":"https://github.com/publiclab/image-sequencer/blob/main/docs/MODULES.md#resize-module"
}
-},{}],324:[function(require,module,exports){
+},{}],328:[function(require,module,exports){
/*
- * Rotates image
+ * Rotates image
*/
module.exports = function Rotate(options, UI) {
@@ -88497,19 +88665,19 @@ module.exports = function Rotate(options, UI) {
}
function extraManipulation(pixels) {
- var rotate_value = (options.rotate)%360;
+ var rotate_value = (options.rotate) % 360;
- if(rotate_value%360 == 0)
+ if (rotate_value % 360 == 0)
return pixels;
- var bitmap = new imagejs.Bitmap({width: pixels.shape[0], height: pixels.shape[1]});
+ var bitmap = new imagejs.Bitmap({ width: pixels.shape[0], height: pixels.shape[1] });
bitmap._data.data = pixels.data;
var rotated = bitmap.rotate({
- degrees: rotate_value,
+ degrees: rotate_value,
});
pixels.data = rotated._data.data;
-
+
return pixels;
}
@@ -88520,6 +88688,7 @@ module.exports = function Rotate(options, UI) {
return require('../_nomodule/PixelManipulation.js')(input, {
output: output,
+ ui: options.step.ui,
changePixel: changePixel,
extraManipulation: extraManipulation,
format: input.format,
@@ -88537,11 +88706,11 @@ module.exports = function Rotate(options, UI) {
};
};
-},{"../_nomodule/PixelManipulation.js":348,"./../../util/getDefaults.js":356,"./info.json":326,"imagejs":88}],325:[function(require,module,exports){
+},{"../_nomodule/PixelManipulation.js":352,"./../../util/getDefaults.js":360,"./info.json":330,"imagejs":88}],329:[function(require,module,exports){
arguments[4][214][0].apply(exports,arguments)
-},{"./Module":324,"./info.json":326,"dup":214}],326:[function(require,module,exports){
+},{"./Module":328,"./info.json":330,"dup":214}],330:[function(require,module,exports){
module.exports={
- "name": "Rotate",
+ "name": "rotate",
"description": "Rotates image by specified degrees",
"inputs": {
"rotate": {
@@ -88556,12 +88725,12 @@ module.exports={
"docs-link":"https://github.com/publiclab/image-sequencer/blob/main/docs/MODULES.md#rotate-modul"
}
-},{}],327:[function(require,module,exports){
+},{}],331:[function(require,module,exports){
/*
* Saturate an image with a value from 0 to 1
*/
-module.exports = function Saturation(options,UI) {
-
+module.exports = function Saturation(options, UI) {
+
var defaults = require('./../../util/getDefaults.js')(require('./info.json'));
var output;
@@ -88599,6 +88768,7 @@ module.exports = function Saturation(options,UI) {
return require('../_nomodule/PixelManipulation.js')(input, {
output: output,
+ ui: options.step.ui,
changePixel: changePixel,
format: input.format,
image: options.image,
@@ -88617,11 +88787,11 @@ module.exports = function Saturation(options,UI) {
};
};
-},{"../_nomodule/PixelManipulation.js":348,"./../../util/getDefaults.js":356,"./info.json":329}],328:[function(require,module,exports){
+},{"../_nomodule/PixelManipulation.js":352,"./../../util/getDefaults.js":360,"./info.json":333}],332:[function(require,module,exports){
arguments[4][214][0].apply(exports,arguments)
-},{"./Module":327,"./info.json":329,"dup":214}],329:[function(require,module,exports){
+},{"./Module":331,"./info.json":333,"dup":214}],333:[function(require,module,exports){
module.exports={
- "name": "Saturation",
+ "name": "saturation",
"description": "Change the saturation of the image by given value, from 0-1, with 1 being 100% saturated.",
"inputs": {
"saturation": {
@@ -88636,50 +88806,51 @@ module.exports={
"docs-link":"https://github.com/publiclab/image-sequencer/blob/main/docs/MODULES.md#saturation-module"
}
-},{}],330:[function(require,module,exports){
+},{}],334:[function(require,module,exports){
+
+module.exports = function TextOverlay(options, UI) {
-module.exports = function TextOverlay(options,UI) {
-
var output;
-
+
function draw(input, callback, progressObj) {
-
+
progressObj.stop(true);
progressObj.overrideFlag = true;
-
+
var step = this;
if (!options.step.inBrowser) { // This module is only for browser
this.output = input;
callback();
}
- else{
+ else {
var priorStep = this.getStep(-1); // get the previous step to add text onto it.
function extraManipulation(pixels) {
- //if (options.step.inBrowser)
- pixels = require('./TextOverlay')(pixels, options,priorStep);
+ //if (options.step.inBrowser)
+ pixels = require('./TextOverlay')(pixels, options, priorStep);
return pixels;
}
function output(image, datauri, mimetype) {
-
+
// This output is accesible by Image Sequencer
step.output = { src: datauri, format: mimetype };
-
+
}
-
+
return require('../_nomodule/PixelManipulation.js')(input, {
output: output,
+ ui: options.step.ui,
extraManipulation: extraManipulation,
format: input.format,
image: options.image,
inBrowser: options.inBrowser,
callback: callback
});
-
+
}
}
-
+
return {
options: options,
draw: draw,
@@ -88687,9 +88858,9 @@ module.exports = function TextOverlay(options,UI) {
UI: UI
};
};
-
-},{"../_nomodule/PixelManipulation.js":348,"./TextOverlay":331}],331:[function(require,module,exports){
-module.exports = exports = function(pixels, options,priorstep){
+
+},{"../_nomodule/PixelManipulation.js":352,"./TextOverlay":335}],335:[function(require,module,exports){
+module.exports = exports = function(pixels, options, priorstep){
var defaults = require('./../../util/getDefaults.js')(require('./info.json'));
options.text = options.text || defaults.text;
@@ -88709,18 +88880,18 @@ module.exports = exports = function(pixels, options,priorstep){
var ctx = canvas.getContext('2d');
ctx.drawImage(img[0], 0, 0);
ctx.fillStyle = options.color;
- ctx.font = options.size +'px ' + options.font;
+ ctx.font = options.size + 'px ' + options.font;
ctx.fillText(options.text, options.x, options.y);
- var myImageData = ctx.getImageData(0,0,canvas.width,canvas.height);
+ var myImageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
pixels.data = myImageData.data;
return pixels;
};
-},{"./../../util/getDefaults.js":356,"./info.json":333}],332:[function(require,module,exports){
+},{"./../../util/getDefaults.js":360,"./info.json":337}],336:[function(require,module,exports){
arguments[4][214][0].apply(exports,arguments)
-},{"./Module":330,"./info.json":333,"dup":214}],333:[function(require,module,exports){
+},{"./Module":334,"./info.json":337,"dup":214}],337:[function(require,module,exports){
module.exports={
- "name": "Text-Overlay",
+ "name": "text-overlay",
"description": "Overlay text on image.",
"inputs": {
"text": {
@@ -88773,7 +88944,7 @@ module.exports={
"only": "browser"
}
-},{}],334:[function(require,module,exports){
+},{}],338:[function(require,module,exports){
/*
* Image thresholding with 'image-filter-threshold'
*/
@@ -88804,6 +88975,7 @@ module.exports = function ImageThreshold(options, UI) {
}
return require('../_nomodule/PixelManipulation.js')(input, {
output: output,
+ ui: options.step.ui,
changePixel: changePixel,
extraManipulation: extraManipulation,
format: input.format,
@@ -88819,7 +88991,7 @@ module.exports = function ImageThreshold(options, UI) {
};
};
-},{"../_nomodule/PixelManipulation.js":348,"./Threshold":335}],335:[function(require,module,exports){
+},{"../_nomodule/PixelManipulation.js":352,"./Threshold":339}],339:[function(require,module,exports){
module.exports = function Threshold(pixels, options, histData) {
var defaults = require('./../../util/getDefaults.js')(require('./info.json'));
@@ -88889,11 +89061,11 @@ function otsu(histData) {
return threshold;
}
-},{"./../../util/getDefaults.js":356,"./info.json":337}],336:[function(require,module,exports){
+},{"./../../util/getDefaults.js":360,"./info.json":341}],340:[function(require,module,exports){
arguments[4][214][0].apply(exports,arguments)
-},{"./Module":334,"./info.json":337,"dup":214}],337:[function(require,module,exports){
+},{"./Module":338,"./info.json":341,"dup":214}],341:[function(require,module,exports){
module.exports={
- "name": "Threshold",
+ "name": "threshold",
"description": "Thresholding is used to create binary images",
"inputs": {
"threshold": {
@@ -88914,7 +89086,7 @@ module.exports={
"docs-link":"https://github.com/publiclab/image-sequencer/blob/main/docs/MODULES.md#threshold"
}
-},{}],338:[function(require,module,exports){
+},{}],342:[function(require,module,exports){
module.exports = function Tint(options, UI) {
var defaults = require('./../../util/getDefaults.js')(require('./info.json'));
@@ -88949,6 +89121,7 @@ module.exports = function Tint(options, UI) {
return require('../_nomodule/PixelManipulation.js')(input, {
output: output,
+ ui: options.step.ui,
changePixel: changePixel,
format: input.format,
image: options.image,
@@ -88965,11 +89138,11 @@ module.exports = function Tint(options, UI) {
};
};
-},{"../_nomodule/PixelManipulation.js":348,"./../../util/getDefaults.js":356,"./info.json":340}],339:[function(require,module,exports){
+},{"../_nomodule/PixelManipulation.js":352,"./../../util/getDefaults.js":360,"./info.json":344}],343:[function(require,module,exports){
arguments[4][214][0].apply(exports,arguments)
-},{"./Module":338,"./info.json":340,"dup":214}],340:[function(require,module,exports){
+},{"./Module":342,"./info.json":344,"dup":214}],344:[function(require,module,exports){
module.exports={
- "name": "Tint",
+ "name": "tint",
"description": "Add color tint to an image",
"inputs": {
"color":{
@@ -88989,7 +89162,7 @@ module.exports={
"docs-link":"https://github.com/publiclab/image-sequencer/blob/main/docs/MODULES.md#tint"
}
-},{}],341:[function(require,module,exports){
+},{}],345:[function(require,module,exports){
/*
* Resolves Fisheye Effect
*/
@@ -89119,7 +89292,7 @@ module.exports = function DoNothing(options, UI) {
var offsetY = matrix2northmost - matrix1northmost;
canvas.draw(texture,
- image.width,// * ratio,
+ image.width, // * ratio,
image.height// * ratio
);
@@ -89221,7 +89394,7 @@ module.exports = function DoNothing(options, UI) {
};
};
-},{"../../util/parseDistortCoordinates.js":358,"../_nomodule/gl-context":349,"./../../util/getDefaults.js":356,"./glfx":342,"./info.json":344}],342:[function(require,module,exports){
+},{"../../util/parseDistortCoordinates.js":362,"../_nomodule/gl-context":353,"./../../util/getDefaults.js":360,"./glfx":346,"./info.json":348}],346:[function(require,module,exports){
/*
* glfx.js
* http://evanw.github.com/glfx.js/
@@ -89374,11 +89547,11 @@ module.exports = function() {
}; return b;
}(), s = 'float random(vec3 scale,float seed){return fract(sin(dot(gl_FragCoord.xyz+seed,scale))*43758.5453+seed);}'; return v;
}();
-},{}],343:[function(require,module,exports){
+},{}],347:[function(require,module,exports){
arguments[4][214][0].apply(exports,arguments)
-},{"./Module":341,"./info.json":344,"dup":214}],344:[function(require,module,exports){
+},{"./Module":345,"./info.json":348,"dup":214}],348:[function(require,module,exports){
module.exports={
- "name": "WebGl Distort",
+ "name": "webgl-distort",
"requires": [
"webgl"
],
@@ -89407,7 +89580,7 @@ module.exports={
},
"docs-link":"https://github.com/publiclab/image-sequencer/blob/main/docs/MODULES.md#webgl-distort"
}
-},{}],345:[function(require,module,exports){
+},{}],349:[function(require,module,exports){
module.exports = function Balance(options, UI) {
var defaults = require('./../../util/getDefaults.js')(require('./info.json'));
@@ -89428,15 +89601,15 @@ module.exports = function Balance(options, UI) {
function extraManipulation(pixels) {
var i = 0;
- var red_factor = 255/options.red;
- var green_factor = 255/options.green;
- var blue_factor = 255/options.blue;
+ var red_factor = 255 / options.red;
+ var green_factor = 255 / options.green;
+ var blue_factor = 255 / options.blue;
while (i < pixels.data.length) {
- pixels.data[i] = Math.min(255, pixels.data[i]*red_factor);
- pixels.data[i+1] = Math.min(255, pixels.data[i+1]*green_factor);
- pixels.data[i+2] = Math.min(255, pixels.data[i+2]*blue_factor);
- i+=4;
+ pixels.data[i] = Math.min(255, pixels.data[i] * red_factor);
+ pixels.data[i + 1] = Math.min(255, pixels.data[i + 1] * green_factor);
+ pixels.data[i + 2] = Math.min(255, pixels.data[i + 2] * blue_factor);
+ i += 4;
}
return pixels;
@@ -89450,6 +89623,7 @@ module.exports = function Balance(options, UI) {
return require('../_nomodule/PixelManipulation.js')(input, {
output: output,
+ ui: options.step.ui,
extraManipulation: extraManipulation,
format: input.format,
image: options.image,
@@ -89466,11 +89640,11 @@ module.exports = function Balance(options, UI) {
};
};
-},{"../_nomodule/PixelManipulation.js":348,"./../../util/getDefaults.js":356,"./info.json":347}],346:[function(require,module,exports){
+},{"../_nomodule/PixelManipulation.js":352,"./../../util/getDefaults.js":360,"./info.json":351}],350:[function(require,module,exports){
arguments[4][236][0].apply(exports,arguments)
-},{"./Module":345,"./info.json":347,"dup":236}],347:[function(require,module,exports){
+},{"./Module":349,"./info.json":351,"dup":236}],351:[function(require,module,exports){
module.exports={
- "name": "White Balance",
+ "name": "white-balance",
"description": "Render neutral colours correctly based on the whitest pixel in the image.",
"inputs": {
"red": {
@@ -89492,7 +89666,7 @@ module.exports={
"docs-link":"https://github.com/publiclab/image-sequencer/blob/main/docs/MODULES.md#white-balance"
}
-},{}],348:[function(require,module,exports){
+},{}],352:[function(require,module,exports){
(function (process,Buffer){
/*
* General purpose per-pixel manipulation
@@ -89528,7 +89702,7 @@ module.exports = function PixelManipulation(image, options) {
// TODO: this could possibly be more efficient; see
// https://github.com/p-v-o-s/infragram-js/blob/master/public/infragram.js#L173-L181
- if (!options.inBrowser && !process.env.TEST) {
+ if (!options.inBrowser && !process.env.TEST && options.ui) {
try {
var pace = require('pace')(pixels.shape[0] * pixels.shape[1]);
} catch (e) {
@@ -89559,7 +89733,7 @@ module.exports = function PixelManipulation(image, options) {
pixels.set(x, y, 2, pixel[2]);
pixels.set(x, y, 3, pixel[3]);
- if (!options.inBrowser && !process.env.TEST) pace.op();
+ if (!options.inBrowser && !process.env.TEST && options.ui) pace.op();
}
}
}
@@ -89596,7 +89770,7 @@ module.exports = function PixelManipulation(image, options) {
};
}).call(this,require('_process'),require("buffer").Buffer)
-},{"_process":139,"buffer":73,"get-pixels":28,"pace":116,"save-pixels":189}],349:[function(require,module,exports){
+},{"_process":139,"buffer":73,"get-pixels":28,"pace":116,"save-pixels":189}],353:[function(require,module,exports){
(function (__dirname){
module.exports = function runInBrowserContext(input, callback, step, options) {
@@ -89637,7 +89811,7 @@ module.exports = function runInBrowserContext(input, callback, step, options) {
};
}).call(this,"/src/modules/_nomodule")
-},{"lodash":101,"path":117}],350:[function(require,module,exports){
+},{"lodash":101,"path":117}],354:[function(require,module,exports){
const GPU = require('gpu.js').GPU;
/**
@@ -89646,7 +89820,7 @@ const GPU = require('gpu.js').GPU;
* @param {Float32Array|Unit8Array|Float64Array} kernel kernelto be convolved on all the matrices.
* @param {Boolean} pipeMode Whether to save the output to a texture.
* @param {Boolean} normalize Whether to normailize the output by dividing it by the total value of the kernel.
- * @returns {Float32Array}
+ * @returns {Float32Array}
*/
const convolve = (arrays, kernel, options = {}) => {
const pipeMode = options.pipeMode || false,
@@ -89706,7 +89880,7 @@ const convolve = (arrays, kernel, options = {}) => {
};
/**
- *
+ *
* @param {Float32Array|'Object'} outputSize Output size of the compute function.
* @param {Function} computeFunc The compute function. Cannot be an arrow function.
* @param {'Object'} constants Constants to be passed to the function. Can be accessed inside the compute function using `this.constants`.
@@ -89732,7 +89906,7 @@ module.exports = {
convolve,
compute
};
-},{"gpu.js":60}],351:[function(require,module,exports){
+},{"gpu.js":60}],355:[function(require,module,exports){
// special module to load an image into the start of the sequence; used in the HTML UI
function LoadImage(ref, name, src, main_callback) {
function makeImage(datauri) {
@@ -89810,7 +89984,7 @@ function LoadImage(ref, name, src, main_callback) {
module.exports = LoadImage;
-},{"urify":197}],352:[function(require,module,exports){
+},{"urify":197}],356:[function(require,module,exports){
// TODO: potentially move this into ImportImage module
function setInputStepInit() {
@@ -89843,16 +90017,16 @@ function setInputStepInit() {
function runVideo(){
/* event handler for Take-Photo */
- document.getElementById('video').style.display='inline';
- document.getElementById('capture').style.display='inline';
- document.getElementById('close').style.display='inline';
+ document.getElementById('video').style.display = 'inline';
+ document.getElementById('capture').style.display = 'inline';
+ document.getElementById('close').style.display = 'inline';
var video = document.getElementById('video');
canvas = document.getElementById('canvas'),
context = canvas.getContext('2d'),
vendorUrl = window.URL || window.webkitURL;
- const constraints = { audio: false,video: true};
+ const constraints = { audio: false, video: true};
function handleSuccess(stream) {
window.stream = stream; // make stream available to browser console
@@ -89879,9 +90053,9 @@ function setInputStepInit() {
stream.getVideoTracks().forEach(function (track) {
track.stop();
});
- document.getElementById('video').style.display='none';
- document.getElementById('capture').style.display='none';
- document.getElementById('close').style.display='none';
+ document.getElementById('video').style.display = 'none';
+ document.getElementById('capture').style.display = 'none';
+ document.getElementById('close').style.display = 'none';
}
}
@@ -89909,7 +90083,7 @@ function setInputStepInit() {
}
module.exports = setInputStepInit;
-},{}],353:[function(require,module,exports){
+},{}],357:[function(require,module,exports){
/*
* User Interface Handling Module
*/
@@ -89921,10 +90095,10 @@ module.exports = function UserInterface(events = {}) {
// No UI
} else if(step.inBrowser) {
// Create and append an HTML Element
- console.log('Added Step "'+step.name+'"');
+ console.log('Added Step "' + step.name + '"');
} else {
// Create a NodeJS Object
- console.log('\x1b[36m%s\x1b[0m','Added Step "'+step.name+'"');
+ console.log('\x1b[36m%s\x1b[0m', 'Added Step "' + step.name + '"');
}
};
@@ -89933,10 +90107,10 @@ module.exports = function UserInterface(events = {}) {
// No UI
} else if(step.inBrowser) {
// Overlay a loading spinner
- console.log('Drawing Step "'+step.name+'"');
+ console.log('Drawing Step "' + step.name + '"');
} else {
// Don't do anything
- console.log('\x1b[33m%s\x1b[0m','Drawing Step "'+step.name+'"');
+ console.log('\x1b[33m%s\x1b[0m', 'Drawing Step "' + step.name + '"');
}
};
@@ -89946,10 +90120,10 @@ module.exports = function UserInterface(events = {}) {
} else if(step.inBrowser) {
// Update the DIV Element
// Hide the laoding spinner
- console.log('Drawn Step "'+step.name+'"');
+ console.log('Drawn Step "' + step.name + '"');
} else {
// Update the NodeJS Object
- console.log('\x1b[32m%s\x1b[0m','Drawn Step "'+step.name+'"');
+ console.log('\x1b[32m%s\x1b[0m', 'Drawn Step "' + step.name + '"');
}
};
@@ -89958,10 +90132,10 @@ module.exports = function UserInterface(events = {}) {
// No UI
} else if(step.inBrowser) {
// Remove the DIV Element
- console.log('Removing Step "'+step.name+'"');
+ console.log('Removing Step "' + step.name + '"');
} else {
// Delete the NodeJS Object
- console.log('\x1b[31m%s\x1b[0m','Removing Step "'+step.name+'"');
+ console.log('\x1b[31m%s\x1b[0m', 'Removing Step "' + step.name + '"');
}
};
@@ -89973,8 +90147,8 @@ module.exports = function UserInterface(events = {}) {
};
-},{}],354:[function(require,module,exports){
-module.exports = function parseCornerCoordinateInputs(options,coord,callback) {
+},{}],358:[function(require,module,exports){
+module.exports = function parseCornerCoordinateInputs(options, coord, callback) {
var getPixels = require('get-pixels');
getPixels(coord.src, function(err, pixels) {
var iw = pixels.shape[0],
@@ -89998,7 +90172,7 @@ module.exports = function parseCornerCoordinateInputs(options,coord,callback) {
callback(options, coord);
});
};
-},{"get-pixels":28}],355:[function(require,module,exports){
+},{"get-pixels":28}],359:[function(require,module,exports){
module.exports = function createMetaModule(mapFunction, moduleOptions) {
moduleOptions = moduleOptions || {};
@@ -90064,7 +90238,7 @@ module.exports = function createMetaModule(mapFunction, moduleOptions) {
return [MetaModule, moduleOptions.infoJson];
};
-},{"./getDefaults.js":356}],356:[function(require,module,exports){
+},{"./getDefaults.js":360}],360:[function(require,module,exports){
module.exports = function(info){
var defaults = {};
for (var key in info.inputs) {
@@ -90075,7 +90249,7 @@ module.exports = function(info){
return defaults;
};
-},{}],357:[function(require,module,exports){
+},{}],361:[function(require,module,exports){
module.exports = {
getPreviousStep: function() {
return this.getStep(-1);
@@ -90125,7 +90299,7 @@ module.exports = {
img.src = this.getInput(0).src;
}
};
-},{}],358:[function(require,module,exports){
+},{}],362:[function(require,module,exports){
module.exports = function parseDistortCoordinates(options) {
let coord = [];
diff --git a/dist/image-sequencer.min.js b/dist/image-sequencer.min.js
index c144031f..6c6bd8ec 100644
--- a/dist/image-sequencer.min.js
+++ b/dist/image-sequencer.min.js
@@ -1 +1 @@
-!function(){return function t(e,r,n){function i(a,s){if(!r[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(o)return o(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var c=r[a]={exports:{}};e[a][0].call(c.exports,function(t){return i(e[a][1][t]||t)},c,c.exports,t,e,r,n)}return r[a].exports}for(var o="function"==typeof require&&require,a=0;as?s:a+16383));1===i?(e=t[r-1],o.push(n[e>>2]+n[e<<4&63]+"==")):2===i&&(e=(t[r-2]<<8)+t[r-1],o.push(n[e>>10]+n[e>>4&63]+n[e<<2&63]+"="));return o.join("")};for(var n=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,u=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function c(t,e,r){for(var i,o,a=[],s=e;s0&&u.push(["index[",h,"]-=s",h].join("")),u.push(["++index[",c,"]"].join(""))),u.push("}")}return u.join("\n")}function o(t,e,r){for(var n=t.body,i=[],o=[],a=0;a=c&&(P-=c),r++,0===_&&(_=1),r%_==0)for(k-=k/h,(S=(T-=T/m)>>f)<=1&&(S=0),l=0;l>=a,r[t][1]>>=a,r[t][2]>>=a,r[t][3]=t}(),function(){var t,e,n,a,s,u,l=0,c=0;for(t=0;t>1,e=l+1;e>1,e=l+1;e<256;e++)k[e]=o}()},this.getColormap=function(){for(var t=[],e=[],n=0;n=0;)c=u?c=i:(c++,s<0&&(s=-s),(o=a[0]-t)<0&&(o=-o),(s+=o)=0&&((s=e-(a=r[h])[1])>=u?h=-1:(h--,s<0&&(s=-s),(o=a[0]-t)<0&&(o=-o),(s+=o)0)if(e.ended&&!o){var s=new Error("stream.push() after EOF");t.emit("error",s)}else if(e.endEmitted&&o){s=new Error("stream.unshift() after end event");t.emit("error",s)}else!e.decoder||o||i||(n=e.decoder.write(n)),o||(e.reading=!1),e.flowing&&0===e.length&&!e.sync?(t.emit("data",n),t.read(0)):(e.length+=e.objectMode?1:n.length,o?e.buffer.unshift(n):e.buffer.push(n),e.needReadable&&m(t)),function(t,e){e.readingMore||(e.readingMore=!0,r.nextTick(function(){!function(t,e){var r=e.length;for(;!e.reading&&!e.flowing&&!e.ended&&e.length=0&&0,t+e.replace(/\u001b\[\d\d?m/g,"").length+1},0)>60)return r[0]+(""===e?"":e+"\n ")+" "+t.join(",\n ")+" "+r[1];return r[0]+e+" "+t.join(", ")+" "+r[1]}(l,b,T)):T[0]+b+T[1]}function h(t){return"["+Error.prototype.toString.call(t)+"]"}function p(t,e,r,n,i,o){var a,s,u;if((u=Object.getOwnPropertyDescriptor(e,i)||{value:e[i]}).get?s=u.set?t.stylize("[Getter/Setter]","special"):t.stylize("[Getter]","special"):u.set&&(s=t.stylize("[Setter]","special")),A(n,i)||(a="["+i+"]"),s||(t.seen.indexOf(u.value)<0?(s=m(r)?c(t,u.value,null):c(t,u.value,r-1)).indexOf("\n")>-1&&(s=o?s.split("\n").map(function(t){return" "+t}).join("\n").substr(2):"\n"+s.split("\n").map(function(t){return" "+t}).join("\n")):s=t.stylize("[Circular]","special")),_(a)){if(o&&i.match(/^\d+$/))return s;(a=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=t.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=t.stylize(a,"string"))}return a+": "+s}function f(t){return Array.isArray(t)}function d(t){return"boolean"==typeof t}function m(t){return null===t}function g(t){return"number"==typeof t}function v(t){return"string"==typeof t}function _(t){return void 0===t}function y(t){return b(t)&&"[object RegExp]"===k(t)}function b(t){return"object"==typeof t&&null!==t}function x(t){return b(t)&&"[object Date]"===k(t)}function w(t){return b(t)&&("[object Error]"===k(t)||t instanceof Error)}function E(t){return"function"==typeof t}function k(t){return Object.prototype.toString.call(t)}function T(t){return t<10?"0"+t.toString(10):t.toString(10)}r.debuglog=function(t){if(_(o)&&(o=e.env.NODE_DEBUG||""),t=t.toUpperCase(),!a[t])if(new RegExp("\\b"+t+"\\b","i").test(o)){var n=e.pid;a[t]=function(){var e=r.format.apply(r,arguments);console.error("%s %d: %s",t,n,e)}}else a[t]=function(){};return a[t]},r.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},r.isArray=f,r.isBoolean=d,r.isNull=m,r.isNullOrUndefined=function(t){return null==t},r.isNumber=g,r.isString=v,r.isSymbol=function(t){return"symbol"==typeof t},r.isUndefined=_,r.isRegExp=y,r.isObject=b,r.isDate=x,r.isError=w,r.isFunction=E,r.isPrimitive=function(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||void 0===t},r.isBuffer=t("./support/isBuffer");var S=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function A(t,e){return Object.prototype.hasOwnProperty.call(t,e)}r.log=function(){var t,e;console.log("%s - %s",(t=new Date,e=[T(t.getHours()),T(t.getMinutes()),T(t.getSeconds())].join(":"),[t.getDate(),S[t.getMonth()],e].join(" ")),r.format.apply(r,arguments))},r.inherits=t("inherits"),r._extend=function(t,e){if(!e||!b(e))return t;for(var r=Object.keys(e),n=r.length;n--;)t[r[n]]=e[r[n]];return t}}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":68,_process:139,inherits:67}],70:[function(t,e,r){(function(e,n){"use strict";var i=t("assert"),o=t("pako/lib/zlib/zstream"),a=t("pako/lib/zlib/deflate.js"),s=t("pako/lib/zlib/inflate.js"),u=t("pako/lib/zlib/constants");for(var l in u)r[l]=u[l];r.NONE=0,r.DEFLATE=1,r.INFLATE=2,r.GZIP=3,r.GUNZIP=4,r.DEFLATERAW=5,r.INFLATERAW=6,r.UNZIP=7;function c(t){if("number"!=typeof t||ts&&(r=s-u),o=r;o>=0;o--){for(var h=!0,p=0;pi&&(n=i):n=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var a=0;a