Giter VIP home page Giter VIP logo

nexrender's Issues

Forward Slash getting replaced with filepath

I'm using some Forward Slashes (/) in my expression for divide operation. When I save this project as .aepx file and render using nexrender, the new .aep file created by nexrender in nexrender\temp replaced with some default file path.
For the time being I'm converting my divide operations with multiplication using Math.pow(val,exp) in AfterEffects.

Kindly resolve this bug :)

Thanks

Render network

Hey,

Running nexrender and having such error:

=========[RENDERNODE]=========

nexrender.renderer is starting


making request for projects...
looking for suitable projects...
[rkLqeGuh] setting up project...
[rkLqeGuh] downloading assets...
[rkLqeGuh] renaming assets...
[rkLqeGuh] filtering image assets...
[rkLqeGuh] patching project...
[rkLqeGuh] rendering project...
[rkLqeGuh] verifying project...
[rkLqeGuh] applying actions: moving result file...

[rkLqeGuh] cleaning up...

[rkLqeGuh] project finished

making request for projects...
looking for suitable projects...
[rkLqeGuh] setting up project...
[rkLqeGuh] downloading assets...
[rkLqeGuh] renaming assets...
[rkLqeGuh] filtering image assets...
[rkLqeGuh] patching project...
[rkLqeGuh] rendering project...
[rkLqeGuh] verifying project...
[rkLqeGuh] applying actions: moving result file...

[rkLqeGuh] cleaning up...

[rkLqeGuh] project finished

My problem is that output file is created but he renders again (and again) and not stop.
You know why?

php exec

I currently have a website that allows a user to add text which then uses php to create the txt file and calls php.exec to call the nexrender start.js (and uses the text file as data for the project)

However if 2 people use this concurrently it breaks it as i don't think it is capable of running php exec multiple times at once on the command line. Would you recommend creating a server instead?

I'm not really sure where to start in setting this up...

I need the video returned back to the user on the server once it is rendered which is proving quite difficult. Any help would be greatly appreciated.

Tested it!

I tested render node & api server on MacOS Sierra 10.12.6 and Windows Server 2016 with AE CC 2018 Version 15.0.0 (Build 180). Works fine ๐Ÿ‘

Question: add/remove clips in timeline

We would like to use nexrender in a project, I have a question.

Is it possible to add/remove video clips in the timeline at a specific point in time? If it's not possible right now in nexrender, do you think it is a feature that is possible to add in the current way this project is set up? (we would love to contribute)

Multiple Machine Rendering

Hi! How can I configure it to render one project in a network?
I tried to create a API server on a machine, and when I started a render node, to look for the ip in another machine, I'm getting this error: connect ECONNREFUSED 127.0.0.1:23234

Dynamic videos sequencing

I am trying to create dynamic video sequences. Basically to put a number of videos one after another.
The idea is to start a video after its predecesor finishes.The videos have variable length.
I umderstand that this could be achieved with ae scripts. I tried adding some code on the assets/js file (i am using the boilerplate) but I really donโ€™t know were to start. My js skills are good but I donโ€™t have any experience with ae scripting api.
I named my videos: video1, video2, video3
Name of the comp: main
Any help is much appreciated.

Dynamic images

Hi,

I could not find any docs or ways to have dynamic images or dynamic image urls after checking out the boilerplate. The dynamic text portion is well documented and covered as well.

TIA

Support for downloading assets from private S3 buckets

First of all, thank you for the excellent work on this project! It has been an immense help on my current project and I've found it very easy to understand and modify/extend to meet my needs.

One of the requirements for my current project is to download assets from a private bucket on S3 (using IAM access key credentials). While using asset type url works fine for public buckets, as far as I can tell there is no way to get that working with private buckets. However, I've been working on adding support for downloading assets from a private bucket using the aws-sdk package which will use local AWS credentials to authorize the download.

I am wondering if you are interested in this feature being added to the project? Right now I have a small POC working and it does not add much code (~15 lines in renderer/tasks/download.js), but if you're interested I would be glad to spend the time to polish it up and write some docs for the feature.

Thanks again for sharing this project! I hope I can contribute to making it even better.

Customizing nexrender-node

I want to try to make some changes/improvements to nexrender-node, but I'm not too familiar with globally installed CLI node applications. After installing nexrender to a directory and making some changes (to i.e. tasks), how do I get nexrender-node to use my changes? I don't necessarily need to globally install my changed version.

Render failed at render.js

Hello! I faced an issue on rendering video dynamically on Windows Server 2012, After Effects CC 2017. When I use nexrender in nodejs, the error log file (.txt) generated shows the text below.

aerender version 14.2.1x34

But when I run in the command prompt with the following command, it shows some text at the beginning of processing (look at the quote) and still it manage to produce a mov file.

.\aerender.exe -project "C:\Program Files\project.aepx" -comp "Composition" -OMtemplate "H.264" -output "C:\testing\testing.mov"

aerender version 14.2.1x34
Using DXGI: Device: "Microsoft Basic Render Driv
has video RAM(MB): 0
LoadLibrary "n" failed!
LoadLibrary "n" failed!
PROGRESS: Adding specified comp to Render Queue
...
PROGRESS: 5/7/2018 6:22:38 PM: Finished composition "Composition"
PROGRESS: Total Time Elapsed: 1 Min, 28 Sec

Thus, I tried to add some logging in render.js file.

ae.stdout.on('data', (data) => { console.log("On Data"); console.log(data.toString()); aedata.push(data.toString()); });

ae.on('close', (code) => { console.log("Code"); console.log(code); console.log(aedata); return (code !== 0) ? reject( aedata.join('') ) : resolve( project ); });

The return is as below:

[S1AsOoTaf] setting up project...
[S1AsOoTaf] downloading assets...
[S1AsOoTaf] renaming assets...
[S1AsOoTaf] filtering image assets...
[S1AsOoTaf] patching project...
[S1AsOoTaf] rendering project...
Spawn Process
[ '-comp',
'!Main',
'-project',
'C:\Program Files\iisnode\www\temp\S1AsOoTaf\project.aepx',
'-output',
'C:\Program Files\iisnode\www\temp\S1AsOoTaf\result.mov',
'-OMtemplate',
'H.264' ]
On Data
aerender version 14.2.1x34
Code
3221226505
[ 'aerender version 14.2.1x34\r\n' ]


[S1AsOoTaf] project failed

Error message: aerender version 14.2.1x34

Do you have any idea on this?

ability to operate required assets without downloading (local fs)

I think that if nexrender is run locally, usage of http server may be slightly pain-in-the-ass-able.

Would be more convenient if you can set some asset paths as your fs paths (relative or absolute);

e.g:

 "assets": [
            {  "type": "project", "name": "project.aepx", "src": `http://localhost:2323/prj.aep`}, 
            { "type": "image",   "name": "bg.jpg", "src": `../images/bg.jpg` },
            { "type": "image",   "name": "2.png", "src": `/Users/Username/pngs/2.png` },

To make this dream come true some changes must be done to tasks/download.js or even add a new task, tasks/copier.js, (it will be called either just before download or right after download) that will try to copy local fs assets (if they exists) and pass control to next module.

Maybe someone has some thoughts about this one ?

Migrating from Mac to Windows

I am trying to set my project up on a windows computer. I had it working fine in windows but am starting to have trouble in windows. I keep getting the following error when it is in the renaming process, it moves the files to the temp folder fine. I'm guessing it is something to do with the filepaths? I have been stuck on this all day.

C:\Users\ak7\Desktop\nexrender-boiler>node start.js
Started local static server at port: 23234
Project {
uid: 'r1DBTRJTx',
state: 'queued',
template: 'project.aepx',
composition: '6 Nations',
type: 'default',
assets:
[ { type: 'image',
name: 'fileHome.ai',
src: 'http://localhost:23234\assets\teams\ScotlandHome.ai' },
{ type: 'image',
name: 'fileAway.ai',
src: 'http://localhost:23234\assets\teams\ItalyAway.ai' },
{ type: 'project',
name: 'project.aepx',
src: 'http://localhost:23234\assets\Nations.aepx' },
{ type: 'script',
name: 'data.js',
src: 'http://localhost:23234\assets\teamSetup.js' } ],
actions: [],
settings: { outputModule: 'h264', outputExt: '.mov', startFrame: 0 },
errorMessage: null,
callbacks: {},
ticker: null,
api: null,
error: null }
[r1DBTRJTx] setting up project...
[r1DBTRJTx] downloading assets...
[r1DBTRJTx] renaming assets...

[r1DBTRJTx] project failed

Error message: ENOENT: no such file or directory, link 'C:\Users\ak7\Desktop\nexrender-boiler\temp\r1DBTRJTx\localhost:23234\assets\teams\ScotlandHome.ai' -> 'C:\Users\ak7\Desktop\nexrender-boiler\temp\r1DBTRJTx\fileHome.ai'
{ Error: ENOENT: no such file or directory, link 'C:\Users\ak7\Desktop\nexrender-boiler\temp\r1DBTRJTx\localhost:23234\assets\teams\ScotlandHome.ai' -> 'C:\Users\ak7\Desktop\nexrender-boiler\temp\r1DBTRJTx\fileHome.ai'
at Error (native)
errno: -4058,
code: 'ENOENT',
syscall: 'link',
path: 'C:\Users\ak7\Desktop\nexrender-boiler\temp\r1DBTRJTx\localhost:23234\assets\teams\ScotlandHome.ai',
dest: 'C:\Users\ak7\Desktop\nexrender-boiler\temp\r1DBTRJTx\fileHome.ai' }

C:\Users\ak7\Desktop\nexrender-boiler>

API Server + Node: No such file or directory template.aep / result.mp4

I'm trying to render a simple project, without any custom data. using the API Server with a render node (same machine).

I run the API server and send a POST request to it containing the following Project model:

{
    template: 'template1.aepx',
    composition: 'mainComp',
    type: 'default',
    settings: {
        outputModule: 'Lossless',
        outputExt: 'avi',
        startFrame: 0,
        endFrame: 100
    }
}

I have a render node directory which has the directory templates, containing template1.aepx.

When I run the render node with this data, I get the following error:
Error message: ENOENT: no such file or directory, lstat 'D:\Web\nexrender-node\templates\template.aep'

So I tried saving a copy of the .aepx project as template.aep in templates. This results in:
Error message: ENOENT: no such file or directory, stat 'D:\Web\nexrender-node\temp\HJ9-diFh\result.mp4'

The output module and extension are correct (tested in nexrender-boilerplate).

What am I doing wrong?

Cannot render an MP4 through aerender commandline

Cannot render an MP4 through aerender commandline, AfterEffects 2017 version
Nexrender says as output MP4, but aerender does not support it by default, I tried work arounds but they dont work. Can any one help?

AE CC render much faster than AeRender

Hey guys,

I am pretty new for AE CC but with the help of nexrender, I am successfully to setup my custom video auto-render service, thanks @inlife for this great tool!

However, I noticed a difference performance issue between using AE CC 2015 (GUI) and AeRender, Rendering the aepx in AE CC is much faster than using AeRender. For same one .aepx file, Using Ae CC manually adding into render queue only takes less 10 seconds but using AeRender in command line will take around 60 seconds. Plus, Using multi-thread in AeRender will make things more worse.

My perference output module is using QuickTime and H.264 as video encoding format. Also select the Web Video size 320*240. The two kinds output videos's details are almost same except the rendering time. A stupid question is do you guys know where the rendering setting of AeRender is in? Does it will use the same setting as Ae CC (GUI)?

Here is my command-line arguments:

aerender.exe -project "E:\Git\auto-generate-ae-video\AeRender.Test\output\Troy\main.aepx" -output "E:\Git\auto-generate-ae-video\AeRender.Test\output\Troy\main.mp4" -comp main -OMtemplate H264 -mp -continueOnMissingFootage

Thanks in advanced.

Troy

Code that changes paths to new images

Hi,

First of all thanks for this very cool project.

I added a breakpoint just before running the aerender process in AE, and I look at the project.aepx in the /temp dir that nexrender creates, and still see the paths to the old (default) images in the fileReference element.

But, it still works and it manages to render 3 different versions of the same video with the new images instead of the default ones.

I'm trying to understand how come it works and where is the code that replaces the paths. I found code that replaces the script/data paths, but not the images ones.

I'm using AE 2018.

Thanks!

aepx template

Hey man, i do really appreciate your work. The potential of it is huge and since i'm working in automatisation development field, this is a really good piece of code. Anyways, i'm not itself super familiar with AE. Could you please explain how to properly create .aepx template in order to make "variables" and how to connect them. I have deeply analysed the package itself, but there is nothing about the project file itself. Thank you!

P.s. I'm trying to use this code i made accordingly to your boilerplate, but i'm getting 1mb files which are not able to open (used your template and it worked).

'use strict';



let background  = '2016-aug-deep.jpg';
let duration    = 600; //video duration in secs.

let aepxfile  = 'test.aepx';


const aebinary  = '/Applications/Adobe\ After\ Effects\ CC\ 2017/aerender';
const port      = 23234;


const http      = require('http');
const url       = require('url');
const path      = require('path');
const fs        = require('fs');

const Project   = require('nexrender').Project;
const renderer  = require('nexrender').renderer;


let server = http.createServer((req, res) => {

    let uri         = url.parse(req.url).pathname;
    let filename    = path.join(process.cwd(), uri);

    fs.exists(filename, (exists) => {
        if(!exists) {
            res.writeHead(404, {"Content-Type": "text/plain"});
            res.write("404 Not Found\n");
            
            return res.end();
        }

        fs.readFile(filename, "binary", function(err, file) {
            if(err) {    
                res.writeHead(500, {"Content-Type": "text/plain"});
                res.write(err + "\n");
                return res.end();
            }

            // send 200
            res.writeHead(200);
            res.write(file, "binary");
            return res.end();
        });
    });
});


server.listen(port, () => {

    console.log('Started local static server at port:', port);

    // addtional info about configuring project can be found at:
    // https://github.com/Inlife/nexrender/wiki/Project-model
    let project = new Project(
        {
        "template": "test.aepx",
        "composition": "main",
        "type": "default",
        "settings": {
            // dont forget to setup the right output module; info:
            // https://helpx.adobe.com/after-effects/using/basics-rendering-exporting.html#output_modules_and_output_module_settings
            "outputModule": "Lossless", //h264
            "startFrame": 0, //this option let's us to cut the whole project in smaller pieces, like time based sprites.
            "endFrame": duration
        },
        "assets": [
            { "type": "project", "name": "project.aepx",  "src": `http://localhost:${port}/assets/${aepxfile}`}, 
            { "type": "image",   "name": "testas.jpg",  "src": `http://localhost:${port}/assets/${background}`, "filters": [ {"name":"cover", "params": [1280, 720] }] } //for more info about customization: https://github.com/oliver-moran/jimp
        ]
    }
);

    console.log(project);

    // start rendering
    renderer.render(aebinary, project).then(() => {
        // success
        server.close();
        console.log('rendering finished');
    }).catch((err) => {
        // error
        console.error(err);
        server.close();
    });

});

Audio program!

The phenomenon of audio is broken and continued after rendering.Do you Know
this question?

[external] google docs integration

This feature is an external (possibly made as separate binary).
Main idea is to sync data from google docs spreadsheet to an api server.

Sample spreadsheet can look something like that:

image

I suppose best way to do this is to combine google docs api and nexrender api in one app, that will be running in a background and will be constantly checking for changes in the docs, and publish changes there (updates of render status).

This feature/application was described there as a prototype-concept, and can be developed by anyone who wants to help this project. :p
Currently, I don't have plant to work on this feature in the nearest future.

Error message: ENOENT: no such file or directory, stat 'D:\Web\nexpost\temp\Byt2O9uh\result.mp4'

Cross-posting from inlife/nexrender-boilerplate#2 (issue also appears with base nexrender)

Running the nexrender command with a project in queue causes the following results returned in the CLI:

looking for suitable projects...
[Byt2O9uh] setting up project...
[Byt2O9uh] downloading assets...
[Byt2O9uh] renaming assets...
[Byt2O9uh] filtering image assets...
[Byt2O9uh] patching project...
[Byt2O9uh] rendering project...
[Byt2O9uh] verifying project...
--------------------------
[Byt2O9uh] project failed
--------------------------

Error message: ENOENT: no such file or directory, stat 'D:\Web\nexrend\temp\Byt2O9uh\result.mp4'

Adding post rendering tasks?

First of all, thank you for such a great application. This is exactly what I was looking for. I appreciate it so much and I would like to contribute this project in the future.

I have a question. After following your instructions, I was able to render my project with render node & the api-server with a request from front-end. From the description #9 on wiki, it says that I could add post rendering tasks after rendering node finishes its job. I would like to upload the video on youtube after rendering. How can I do that? Should I modify the render node code? Can you help me navigate where that is? Thank you!

Injecting scripts does not work in AE 2018

Hey there, following new updates for 2018 AE the problems also follows. Injecting scripts using AE 2018 does not work anymore. Probably it could be due to AE changes. Hope this is bug and this is only informative goal post.

[support] Help to config.

I have some question about config.
Here is my config:

var api = require('nexrender').api;

// Configure api connection
api.config({
    host: "localhost",
    port: 3000
});

// Define project properties
var assets = [{
    'type': 'image',
    'src': 'http://assets.pokemon.com/assets/cms2/img/pokedex/full/004.png',
    'name': '001.png'
},{
    'type': 'image',
    'src': 'http://assets.pokemon.com/assets/cms2/img/pokedex/full/005.png',
    'name': '002.png'
},{
    'type': 'image',
    'src': 'http://assets.pokemon.com/assets/cms2/img/pokedex/full/006.png',
    'name': '003.png'
}];

// Create project
api.create({
    template: 'pokemon.aep',
    composition: 'main',
    assets: assets
}).then((project) => {

    console.log('project saved');

    project.on('rendering', function(err, project) {
        console.log('project rendering started');
    });

    project.on('finished', function(err, project) {
        console.log('project rendering finished')
    });

    project.on('failure', function(err, project) {
        console.log('project rendering error')
    });
});

But after run code. AE show a dialog to select composition. after that, the rended video the same with the template. btw, the template is aet not aepx. I don't know why.
please help. Or give me an sample.
Thanks

Auto repo update

It seems that when modifying nexrender's code, the repo is automatically updated, making me loose my changes? is it me or?

Tracking on Rendering Progress

Thank you so much for making this library open source! It's super useful for personalised video rendering and I can also generate image thumbnail from your library.

However, I would like to ask if is there any functions / callback that I can use to keep track on the progress of rendering? For example, I would like to know how many percent left for the rendering process to be completed once I run renderer.render . Or do you have any suggestions on this?

Btw. I'm very new to After Effects CC and aerender. Hope you understand.

Multiple comp rendering

Hi,

First of all, fantastic job with this app, It's really easy to use and super efficient!
I was wondering if it is possible to render multiple comp within a same AE project?
Let's say I have a project with two comps using the same assets. the only difference would be the resolution: ex 1920x1080 (comp1) and 1080x1920 (comp2). Could I queue up both comps at the same time or do I need to create separate start.js files?

If you have any idea about the way to to that let me know! cheers

Slow Render

Hey there,

Thanks so much for making this. Having heaps of fun using it, i have a quick question about the rendering process though. When the process gets to rendering in the command line it seems to take much longer than usual.

If i use the render queue inside afyer effects it takea about 5 seconds to render with the h264 module, although it seems to take about 30seconds in nexrender. Is this normal? Its the rendering that tales time in the commandline, moving/renaming/downloading of files is quick.

Thanks!

log: project failed, but video is created

Hi!
Running nexrender and having such error:

=========[RENDERNODE]=========

nexrender.renderer is starting


making request for projects...
looking for suitable projects...
[H1YhHOaw] setting up project...
[H1YhHOaw] downloading assets...
[H1YhHOaw] renaming assets...
[H1YhHOaw] filtering image assets...
[H1YhHOaw] patching project...
[H1YhHOaw] rendering project...

[H1YhHOaw] verifying project...

[H1YhHOaw] project failed

But output file is created and looks like correct.
Any suggestions?

Adobe After Effects CC 2017

Hey There,

I'm trying to use nexrender with AE CC 2017, however i keep getting the error

"aerender ERROR: No output module template was found with the given name" which i believe is because it now expects you to use Adobe Media Encoder now, is there anyway to link nexrender into this?

Thanks,

Aaron

aerender path

Hello

I can't enter the aerender path

nexrender --renderer -- host=localhost:3000 \ --aerender="c:/Program Files/Adobe/Adobe After Effects CC 2015/Support Files/aerender.exe"

                               | |

_ __ _____ ___ __ ___ _ __ | | ___ _ __
| '_ \ / _ \ / / '
/ _ \ '_ \ / ` |/ _ \ '__|
| | | | **/> <| | | __/ | | | (
| | / |
|| ||**//_| **|| ||**,|
|_|

              VERSION: 0.4.5

For support and information, please visit:
http://github.com/Inlife/nexrender

[error] provide --aerender=PATH for aerender binary file

Thanks

Project Object

Getting it like this:

{ uid: 'shivy8r828dfjg6s4u02',
  state: 'queued',
  template: 'PROJECT_TEST_05.aepx',
  composition: 'PROJECT_TEST_05',
  type: 'default',
  assets:
   [ { type: 'project',
       src: '//MAC_05/share/assets/PROJECT_TEST_05.aepx',
       name: 'PROJECT_TEST_05.aepx' },
     { type: 'image',
       src: '//MAC_05/share/assets/001.jpg',
       name: '001.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/002.jpg',
       name: '002.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/003.jpg',
       name: '003.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/004.jpg',
       name: '004.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/005.jpg',
       name: '005.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/006.jpg',
       name: '006.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/007.jpg',
       name: '007.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/008.jpg',
       name: '008.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/009.jpg',
       name: '009.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/010.jpg',
       name: '010.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/011.jpg',
       name: '011.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/012.jpg',
       name: '012.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/013.jpg',
       name: '013.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/014.jpg',
       name: '014.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/015.jpg',
       name: '015.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/016.jpg',
       name: '016.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/017.jpg',
       name: '017.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/018.jpg',
       name: '018.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/019.jpg',
       name: '019.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/020.jpg',
       name: '020.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/021.jpg',
       name: '021.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/022.jpg',
       name: '022.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/023.jpg',
       name: '023.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/024.jpg',
       name: '024.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/025.jpg',
       name: '025.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/026.jpg',
       name: '026.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/027.jpg',
       name: '027.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/028.jpg',
       name: '028.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/029.jpg',
       name: '029.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/030.jpg',
       name: '030.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/031.jpg',
       name: '031.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/032.jpg',
       name: '032.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/033.jpg',
       name: '033.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/034.jpg',
       name: '034.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/035.jpg',
       name: '035.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/036.jpg',
       name: '036.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/037.jpg',
       name: '037.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/038.jpg',
       name: '038.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/039.jpg',
       name: '039.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/040.jpg',
       name: '040.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/041.jpg',
       name: '041.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/042.jpg',
       name: '042.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/043.jpg',
       name: '043.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/044.jpg',
       name: '044.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/045.jpg',
       name: '045.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/046.jpg',
       name: '046.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/047.jpg',
       name: '047.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/048.jpg',
       name: '048.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/049.jpg',
       name: '049.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/050.jpg',
       name: '050.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/051.jpg',
       name: '051.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/052.jpg',
       name: '052.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/053.jpg',
       name: '053.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/054.jpg',
       name: '054.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/055.jpg',
       name: '055.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/056.jpg',
       name: '056.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/057.jpg',
       name: '057.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/058.jpg',
       name: '058.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/059.jpg',
       name: '059.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/060.jpg',
       name: '060.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/061.jpg',
       name: '061.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/062.jpg',
       name: '062.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/063.jpg',
       name: '063.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/064.jpg',
       name: '064.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/065.jpg',
       name: '065.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/066.jpg',
       name: '066.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/067.jpg',
       name: '067.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/068.jpg',
       name: '068.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/069.jpg',
       name: '069.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/070.jpg',
       name: '070.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/071.jpg',
       name: '071.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/072.jpg',
       name: '072.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/073.jpg',
       name: '073.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/074.jpg',
       name: '074.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/075.jpg',
       name: '075.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/076.jpg',
       name: '076.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/077.jpg',
       name: '077.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/078.jpg',
       name: '078.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/079.jpg',
       name: '079.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/080.jpg',
       name: '080.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/081.jpg',
       name: '081.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/082.jpg',
       name: '082.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/083.jpg',
       name: '083.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/084.jpg',
       name: '084.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/085.jpg',
       name: '085.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/086.jpg',
       name: '086.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/087.jpg',
       name: '087.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/088.jpg',
       name: '088.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/089.jpg',
       name: '089.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/090.jpg',
       name: '090.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/091.jpg',
       name: '091.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/092.jpg',
       name: '092.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/093.jpg',
       name: '093.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/094.jpg',
       name: '094.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/095.jpg',
       name: '095.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/096.jpg',
       name: '096.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/097.jpg',
       name: '097.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/098.jpg',
       name: '098.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/099.jpg',
       name: '099.jpg' },
     ... 1 more item ],
  actions: [],
  settings:
   { outputModule: 'TEST_06',
     outputExt: 'jpg',
     startFrame: 231,
     endFrame: 461 },
  errorMessage: null,
  callbacks: {},
  ticker: null,
  api: { registered: true },
  error: null }



Want it like this:


Project {
  uid: 'shivy8r828dfjg6s4u02',
  state: 'queued',
  template: 'PROJECT_TEST_05.aepx',
  composition: 'PROJECT_TEST_05',
  type: 'default',
  assets:
   [ { type: 'project',
       src: '//MAC_05/share/assets/PROJECT_TEST_05.aepx',
       name: 'PROJECT_TEST_05.aepx' },
     { type: 'image',
       src: '//MAC_05/share/assets/001.jpg',
       name: '001.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/002.jpg',
       name: '002.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/003.jpg',
       name: '003.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/004.jpg',
       name: '004.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/005.jpg',
       name: '005.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/006.jpg',
       name: '006.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/007.jpg',
       name: '007.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/008.jpg',
       name: '008.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/009.jpg',
       name: '009.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/010.jpg',
       name: '010.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/011.jpg',
       name: '011.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/012.jpg',
       name: '012.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/013.jpg',
       name: '013.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/014.jpg',
       name: '014.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/015.jpg',
       name: '015.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/016.jpg',
       name: '016.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/017.jpg',
       name: '017.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/018.jpg',
       name: '018.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/019.jpg',
       name: '019.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/020.jpg',
       name: '020.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/021.jpg',
       name: '021.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/022.jpg',
       name: '022.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/023.jpg',
       name: '023.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/024.jpg',
       name: '024.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/025.jpg',
       name: '025.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/026.jpg',
       name: '026.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/027.jpg',
       name: '027.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/028.jpg',
       name: '028.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/029.jpg',
       name: '029.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/030.jpg',
       name: '030.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/031.jpg',
       name: '031.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/032.jpg',
       name: '032.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/033.jpg',
       name: '033.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/034.jpg',
       name: '034.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/035.jpg',
       name: '035.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/036.jpg',
       name: '036.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/037.jpg',
       name: '037.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/038.jpg',
       name: '038.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/039.jpg',
       name: '039.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/040.jpg',
       name: '040.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/041.jpg',
       name: '041.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/042.jpg',
       name: '042.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/043.jpg',
       name: '043.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/044.jpg',
       name: '044.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/045.jpg',
       name: '045.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/046.jpg',
       name: '046.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/047.jpg',
       name: '047.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/048.jpg',
       name: '048.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/049.jpg',
       name: '049.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/050.jpg',
       name: '050.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/051.jpg',
       name: '051.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/052.jpg',
       name: '052.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/053.jpg',
       name: '053.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/054.jpg',
       name: '054.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/055.jpg',
       name: '055.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/056.jpg',
       name: '056.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/057.jpg',
       name: '057.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/058.jpg',
       name: '058.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/059.jpg',
       name: '059.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/060.jpg',
       name: '060.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/061.jpg',
       name: '061.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/062.jpg',
       name: '062.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/063.jpg',
       name: '063.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/064.jpg',
       name: '064.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/065.jpg',
       name: '065.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/066.jpg',
       name: '066.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/067.jpg',
       name: '067.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/068.jpg',
       name: '068.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/069.jpg',
       name: '069.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/070.jpg',
       name: '070.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/071.jpg',
       name: '071.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/072.jpg',
       name: '072.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/073.jpg',
       name: '073.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/074.jpg',
       name: '074.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/075.jpg',
       name: '075.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/076.jpg',
       name: '076.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/077.jpg',
       name: '077.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/078.jpg',
       name: '078.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/079.jpg',
       name: '079.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/080.jpg',
       name: '080.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/081.jpg',
       name: '081.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/082.jpg',
       name: '082.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/083.jpg',
       name: '083.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/084.jpg',
       name: '084.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/085.jpg',
       name: '085.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/086.jpg',
       name: '086.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/087.jpg',
       name: '087.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/088.jpg',
       name: '088.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/089.jpg',
       name: '089.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/090.jpg',
       name: '090.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/091.jpg',
       name: '091.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/092.jpg',
       name: '092.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/093.jpg',
       name: '093.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/094.jpg',
       name: '094.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/095.jpg',
       name: '095.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/096.jpg',
       name: '096.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/097.jpg',
       name: '097.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/098.jpg',
       name: '098.jpg' },
     { type: 'image',
       src: '//MAC_05/share/assets/099.jpg',
       name: '099.jpg' },
     ... 1 more item ],
  actions: [],
  settings:
   { outputModule: 'TEST_06',
     outputExt: 'jpg',
     startFrame: 231,
     endFrame: 461 },
  errorMessage: null,
  callbacks: {},
  ticker: null,
  api:
   { registered: true,
     config: [Function: config],
     create: [Function: create],
     get: [Function: get],
     update: [Function: update],
     remove: [Function: remove] },
  error: null }

How can I?

shake down dependency tree

Currently, nexrender has a very deep and big dependency tree.
Installation of nexrender takes a while, especially on HDD.

Most of the "leaves" of the dep. tree caused by request, download, and express.js npm modules.

I have a plan to either search for some more lightweight alternatives or to rewrite those parts natively (this option opens up a whole new world for bugs).

Guys, if you have any thoughts/suggestions, just post 'em there. :)

Importing a Vector File

Hey There,

I was wondering if it is possible to import a vector image file with nexrender? I have tried using the same technique as importing an image file but it doesn't seem to work like the other image files do.
It copies it to the temp folder but the original vector files are not updated in the actual after effects image file.

Any help would be greatly appreciated.

Proper error message when verification fails.

Hi,

the verify task had me dumbfounded for a while as i was checking the results in the db.json errorMessage field and couldn't find anything going wrong. The problem was that the output file had a different extension then the default. Perhaps the "return reject(logs);" can be extended with a clear message that the resulting file couldn't be found with a path to the filename. I was looking how to implement this on my own and provide a changeset, but I didn't quite know what the best solution was to fit in your framework. Probably it is as simple as adding a string to the 'logs' variable. If that's fine with you i could even provide a changeset for merging.

Do you recommend any kind of cloud service/render farm?

Hi,
Great piece of work! I'm considering to use it for a personalised video service.
Due to seasonal high load (not whole year), I was wondering if you would recommend some kind of scaleable cloud service or render farm? For example something from Amazon AWS? Do you have experience with such a setup?

I'm asking because I want to minimize the work required for setting up and maintaining servers. :)

Thanks!

Unable to render JPEG sequence

When I render JPEG sequence from nexrender, it is throwing error stating "ENOENT No such file or directory" and showing \path\to\result,jpg

This is happening because jpeg result frames are appended with 000 in the file name.
Help me with this issue.

Project uploading and managing interface

Create an interface to upload and manage existing projects.
Can be used along side POSTing projects via API.

Interface may be inserted into existing api-server implementation.

All project assets can be uploaded via simple interface.
Wont need to start an external http server to serve assets.

This can be called an admin panel

Multi-MachineRendering.

I have successfully made it possible to render via multiple nodes and get the rendered files back to the api server but I need the IP of a particular render-node through which the particular frames has been rendered, so that I can fetch files from that node using that node IP. Is it possible to get that node IP on render finish?

Calling rest API without node wrapper

I am trying to send project setting to API server with javascript (no node js) here is my code
var project = { template: 'template.aepx', composition: 'main', settings: { outputModule: 'mine', outputExt: 'mov', startFrame: 0, endFrame: 600 }, assets: [ { type: 'project', src: 'http://localhost/nexTest/assets/template.aepx', name: 'template.aepx' }, { type: 'image', src: 'http://localhost/nexTest/assets/nm.png', name: 'nm.jpg' }, { type: 'image', src: 'http://localhost/nexTest/assets/2016-aug-deep.jpg', name: 'background.jpg', filters: [{ name: 'cover', params: [1280, 720] }], }, { type: 'audio', src: 'http://localhost/nexTest/assets/deep_60s.mp3', name: 'track.mp3' }, { type: 'script', src: 'http://localhost/nexTest/assets/2016-aug-deep.js', name: 'script.js' } ] }

    $.ajax({
        type: "POST",
        url: "http://localhost:3000/projects",
        dataType:'json',
        form: JSON.stringify(project),
        success: function(result){
            console.log(result);
        }, 
        error: function(error) {
            console.log(error);
        }
    });`

but every time i get 404 from API server, what am i doing wrong ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.