GithubHelp home page GithubHelp logo

astrofox-io / astrofox Goto Github PK

View Code? Open in Web Editor NEW
1.7K 1.7K 105.0 10.11 MB

Astrofox is a motion graphics program that lets you turn audio into amazing videos.

Home Page: https://astrofox.io

License: MIT License

JavaScript 76.24% CSS 0.54% GLSL 14.96% HTML 0.15% Less 8.09% Shell 0.01%
audio audio-visualizer motion-graphics music-visualizer video

astrofox's People

Contributors

chr-ge avatar chrishaggart avatar dependabot[bot] avatar derekziemba avatar hextor avatar jakiestfu avatar mikecao avatar mikefoden avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

astrofox's Issues

Error: Unable to deserialize cloned data. rendering with canvas size 1920x1080

Rendering finishes a short way into the full file, citing the error

Uncaught (in promise) Error: Unable to deserialize cloned data. at Object.renderFrames

This error only seems to occur when attempting to render with a canvas size of 1920 by 1080 pixels. Rendering works successfully using the default canvas size.

When changing the frame size to a multiple of the default size (2135x1200) I get

Uncaught Error: write EINVAL

This error does not occur when running with a canvas of (1920x1080) in version 1.2.0, however then the animation is out of sync with the audio.

Astrofox Version: 1.4.0
System: MacOS (ARM) - I have also tried on two seperate windows machines also to no avail.

ARM / Apple Silicon Builds

It looks like the builds at present aren't universal - they're locked to Intel / x86 only.

This means they run emulated at a cost to performance on modern machines that run on ARM such as Apple's Macbook Pro, Mac Studio etc....

It would be great if the build could be released as a universal binary, or if there could be separate x86 and ARM builds.

too slow rendering

Recently, I managed to edit a 2 hour audio clip of a podcast and was happy it was done after 2 weeks (phew!) but when I loaded the audio on the Stage it took some time to import. I edit a sample before and just hit render on the same project. It took me 6 hours to render it on lower preset at 30fps for 480p resolution.

I don't know what is the issue.

I thought about some solutions.

  1. use the GPU with this
  2. optimize using some tips from here
  3. Nvidia hardware specific using something from here

I am not great at JS but had some time to think on this, would like this project to improve😀

Canvas to second screen

The program obviously works really well in real time, not just for rendering videos. So is there a way to show the working canvas in full screen to a second monitor? What I mean is that there's the usual interface on your first monitor, and on the second monitor there's only the canvas that takes up the whole screen. This would be extremely useful for live sets and other live activities.

I think that's somewhat easy to implement.
Great project by the way, thanks.

Feature: parameter interpolation timeline

It would be useful if parameter values could be set along a timeline with interpolation between values. E.g. an opacity value could start at 0 and interpolate to 0.77 over a one second span.

Use case(s)

Editors might want to display some visual elements at specific segments in an audio file, rather than through the entire recording. E.g. a song title might display for the first few seconds and fade away.

Prior art

See the Blender dopesheet.

Allow use of custom fonts

Hi,

Would be excellent if I was able to use custom fonts without having to launch from source :-)

Thank you! And also thank you for providing appimage, all other packaging formats are horrendous!

[Roadmap] Plugins

Design a new plugin architecture

  • Create plugin loading and management system
  • Create API for plugins to render to canvas
  • Create API for plugins to define control inputs
  • Convert existing displays/effects to plugins and publish as separate npm packages

Save audio with project

I think it would be nice if you could save an audio file with a project. I see that used images are base64'ed into the gzipped JSON project file, maybe it would fit in there too?

Just a small suggestion :)
Keep up the great work, this is an awesome project!

Feature : Border radius on sound bars ?

Hi, I love how easy this software is to use !
I'm diving into js sound manipulation and I think Astrofox is a great way to be introduced to this technology.

I have a super simple need : is it possible to add border radius as a parameter for sound bars ? (same as current position x, y, width, height). If not, I think this would be such a great addition to the software, I personally would like to use rounded bars in one of my projects.

Thanks !

  • Neo

Sound Wave rendering issue

Hello, loving Astrofox! I am using 1.2.0 currently on Windows 10 and experiencing this issue with the Sound Wave object, but only on render.

gif of problem

UI: Make "Controls" section only show objects from selected Scene

Hi,

It might be an idea to change the UI so that the "Controls" section only shows controls for the currently selected Scene.

Especially when a project becomes serious and has like 5 different scenes with tons of images and text, there is a lot of stuff going on in Controls that is not relevant to what I'm currently editing.

Thanks for reading, and thank you for the excellent application!

flash.svg not rendering on fedora

View source shows:

<span class="FhvzrOwmD..snip..FCSbxLhBB2U" title="Show Reactor">
  <svg viewBox="0 0 20 20" shape-rendering="geometricPrecision">
    <use xlink:href=".//home/catpiss/astrofox/src/view/assets/icons/flash.svg">
    </use>
  </svg>
</span>

But the image is not loaded, flash icons are invisible
Screenshot from 2021-11-03 17-47-00
.

changing canvas freezing visulizer

changing my canvas freezes my visualizer

video link of the problem:
vid

as soon as it freezes i get this in terminal:
[30292:1224/075246.520159:ERROR:gl_utils.cc(315)] [.WebGL-0x148013cce00] GL_INVALID_VALUE: Offset overflows texture dimensions.

command to start:
yarn start

Can't launch since "Updated Electron and other packages." + How to debug in vscode?

I saved this repo after seeing it on reddit to use as an example of how to structure, setup, create, build, and package an electron app. This repo appears to be well organized and tries to work with the latest Electron, React, and Redux versions.

  • I see you switched to Zustand. I imagine you couldn't get Redux to work with Electron 9+? I couldn't either and it's a reason why I was trying to find apps on github using newer electron to use as examples. I'll have to check Zustand out.

However, since your upgrade from electron 8 to 10, I haven't been able to get this repo to work.

Can't launch since "Updated Electron and other packages."

Astrofox was working until Updated Electron and other packages. 52ccc58
Then from that commit up to but not including Merge branch 'master' of https://github.com/chr-ge/astrofox 601a321 I'm met with:

(node:17332) UnhandledPromiseRejectionWarning: Error: ENOENT: no such file or directory, scandir 'C:\Users\Derek\AppData\Local\Google\Chrome\User Data\Default\Extensions\fmkadmapgofadopljbjfkapdkoienihi'
    at Object.readdirSync (fs.js:876:3)
    at Object.fs.readdirSync (electron/js2c/asar.js:621:39)
    at loadExtensions (A:\Code\github\astrofox-io\astrofox\app\main.js:31400:8)
    at init (A:\Code\github\astrofox-io\astrofox\app\main.js:31420:11)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
    at async App.<anonymous> (A:\Code\github\astrofox-io\astrofox\app\main.js:31309:3)

After which from Merge branch 'master' of https://github.com/chr-ge/astrofox 601a321 to current master Merge pull request #24 from chr-ge/master 180809f I'm met with:

image

How to Debug this app in VSCode?

I can't figure out the proper launch.config to debug this app and see your .gitignore excludes .vscode.
Can you please remove that entry or add exceptions !.vscode/launch.json and !.vscode/tasks.json?
So far I have the following in launch.config but it's not working:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Electron: DevServer",
      "type": "node",
      "request": "launch",
      "cwd": "${workspaceFolder}",
      "preLaunchTask": "yarn build-electron",
      "runtimeExecutable": "yarn",
      "runtimeArgs": [ "run", "dev-view" ],
    },
    {
      "name": "Electron: Main",
      "type": "node",
      "request": "launch",
      "cwd": "${workspaceFolder}",
      "protocol": "inspector",
      // Doesn't work
      "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/dotenv",
      "runtimeArgs": [ "electron", "./app" ],
      // Can't set breakpoints
      "runtimeExecutable": "yarn",
      "runtimeArgs": [ "start", ],
    },
    { // Fails to attach to the renderer
      "name": "Electron: Renderer",
      "type": "chrome",
      "request": "attach",
      "port": 9223,
      "webRoot": "${workspaceFolder}",
      "timeout": 30000
    }
  ],
  "compounds": [
    {
      "name": "Electron: All",
      "configurations": [
        "Electron: DevServer",
        "Electron: Main",
        "Electron: Renderer",
      ]
    }
  ]
}

Frame Rendering Failed

When attempt to save video, the following error occurs.

Screenshot_2021-12-05_17-45-29

astrofox Starting video render e5d2aa9c1341648e42ef2ee562a025670ac70e29
Logger.js:21 astrofox Starting process: /home/astrofox/bin/ffmpeg -loglevel debug -y -stats -f rawvideo -c:v rawvideo -pix_fmt rgba -s 854x480 -r 60 -i pipe:0 -c:v libx264 -f mp4 -pix_fmt yuv420p -vf vflip -profile:v high -tune animation -movflags +faststart -preset slow -crf 18 /tmp/Astrofox/e5d2aa9c1341648e42ef2ee562a025670ac70e29.mp4
2Logger.js:21 astrofox ffmpeg version 4.4-static https://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 8 (Debian 8.3.0-6)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-libgme --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
Splitting the commandline.
Reading option '-loglevel' ... matched as option 'loglevel' (set logging level) with argument 'debug'.
Reading option '-y' ... matched as option 'y' (overwrite output files) with argument '1'.
Reading option '-stats' ... matched as option 'stats' (print progress report during encoding) with argument '1'.
Reading option '-f' ... matched as option 'f' (force format) with argument 'rawvideo'.
Reading option '-c:v' ... matched as option 'c' (codec name) with argument 'rawvideo'.
Reading option '-pix_fmt' ... matched as option 'pix_fmt' (set pixel format) with argument 'rgba'.
Reading option '-s' ... matched as option 's' (set frame size (WxH or abbreviation)) with argument '854x480'.
Reading option '-r' ... matched as option 'r' (set frame rate (Hz value, fraction or abbreviation)) with argument '60'.
Reading option '-i' ... matched as input url with argument 'pipe:0'.
Reading option '-c:v' ... matched as option 'c' (codec name) with argument 'libx264'.
Reading option '-f' ... matched as option 'f' (force format) with argument 'mp4'.
Reading option '-pix_fmt' ... matched as option 'pix_fmt' (set pixel format) with argument 'yuv420p'.
Reading option '-vf' ... matched as option 'vf' (set video filters) with argument 'vflip'.
Reading option '-profile:v' ... matched as option 'profile' (set profile) with argument 'high'.
Reading option '-tune' ... matched as AVOption 'tune' with argument 'animation'.
Reading option '-movflags' ... matched as AVOption 'movflags' with argument '+faststart'.
Reading option '-preset' ... matched as AVOption 'preset' with argument 'slow'.
Reading option '-crf' ... matched as AVOption 'crf' with argument '18'.
Reading option '/tmp/Astrofox/e5d2aa9c1341648e42ef2ee562a025670ac70e29.mp4' ... matched as output url.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option loglevel (set logging level) with argument debug.
Applying option y (overwrite output files) with argument 1.
Applying option stats (print progress report during encoding) with argument 1.
Successfully parsed a group of options.
Parsing a group of options: input url pipe:0.
Applying option f (force format) with argument rawvideo.
Applying option c:v (codec name) with argument rawvideo.
Applying option pix_fmt (set pixel format) with argument rgba.
Applying option s (set frame size (WxH or abbreviation)) with argument 854x480.
Applying option r (set frame rate (Hz value, fraction or abbreviation)) with argument 60.
Successfully parsed a group of options.
Opening an input file: pipe:0.
[rawvideo @ 0x5d31f40] Opening 'pipe:0' for reading
[pipe @ 0x5d32c80] Setting default whitelist 'crypto,data'

Logger.js:21 astrofox Frame rendering failed.
 TypeError: input.slice is not a function
output @ Logger.js:21
error @ Logger.js:37
raiseError @ error.js:20
renderFrames @ VideoRenderer.js:146
async function (async)
renderFrames @ VideoRenderer.js:129
(anonymous) @ VideoRenderer.js:28
setTimeout (async)
(anonymous) @ VideoRenderer.js:25
(anonymous) @ EventEmitter.js:23
emit @ EventEmitter.js:23
(anonymous) @ RenderProcess.js:23
(anonymous) @ EventEmitter.js:23
emit @ EventEmitter.js:23
onStdErr @ Process.js:19
(anonymous) @ VM113 preload.js:1866
emit @ VM14 node:events:394
addChunk @ VM58 readable:312
readableAddChunk @ VM58 readable:287
Readable.push @ VM58 readable:226
onStreamRead @ VM48 stream_base_commons:190
Logger.js:21 astrofox Video rendering stopped.
Logger.js:21 astrofox Frame rendering failed.
 TypeError: input.slice is not a function
output @ Logger.js:21
error @ Logger.js:37
raiseError @ error.js:20
renderFrames @ VideoRenderer.js:146
async function (async)
renderFrames @ VideoRenderer.js:129
(anonymous) @ VideoRenderer.js:28
setTimeout (async)
(anonymous) @ VideoRenderer.js:25
(anonymous) @ EventEmitter.js:23
emit @ EventEmitter.js:23
(anonymous) @ RenderProcess.js:23
(anonymous) @ EventEmitter.js:23
emit @ EventEmitter.js:23
onStdErr @ Process.js:19
(anonymous) @ VM113 preload.js:1866
emit @ VM14 node:events:394
addChunk @ VM58 readable:312
readableAddChunk @ VM58 readable:287
Readable.push @ VM58 readable:226
onStreamRead @ VM48 stream_base_commons:190
Logger.js:21 astrofox Video rendering stopped.
2Logger.js:21 astrofox [rawvideo @ 0x5d31f40] Before avformat_find_stream_info() pos: 0 bytes read:0 seeks:0 nb_streams:1
[rawvideo @ 0x5d31f40] interrupted
[rawvideo @ 0x5d31f40] After avformat_find_stream_info() pos: 0 bytes read:0 seeks:0 frames:0
Input #0, rawvideo, from 'pipe:0':
  Duration: N/A, bitrate: 787046 kb/s
  Stream #0:0, 0, 1/60: Video: rawvideo, 1 reference frame (RGBA / 0x41424752), rgba, 854x480 (0x0), 0/1, 787046 kb/s, 60 tbr, 60 tbn, 60 tbc
Successfully opened the file.
Parsing a group of options: output url /tmp/Astrofox/e5d2aa9c1341648e42ef2ee562a025670ac70e29.mp4.
Applying option c:v (codec name) with argument libx264.
Applying option f (force format) with argument mp4.
Applying option pix_fmt (set pixel format) with argument yuv420p.
Applying option vf (set video filters) with argument vflip.
Applying option profile:v (set profile) with argument high.
Successfully parsed a group of options.
Opening an output file: /tmp/Astrofox/e5d2aa9c1341648e42ef2ee562a025670ac70e29.mp4.
[file @ 0x5d4b600] Setting default whitelist 'file,crypto,data'
Successfully opened the file.
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Finishing stream 0:0 without any data written to it.
detected 12 logical cores
[graph 0 input from stream 0:0 @ 0x5d4c7c0] Setting 'video_size' to value '854x480'
[graph 0 input from stream 0:0 @ 0x5d4c7c0] Setting 'pix_fmt' to value '26'
[graph 0 input from stream 0:0 @ 0x5d4c7c0] Setting 'time_base' to value '1/60'
[graph 0 input from stream 0:0 @ 0x5d4c7c0] Setting 'pixel_aspect' to value '0/1'
[graph 0 input from stream 0:0 @ 0x5d4c7c0] Setting 'frame_rate' to value '60/1'
[graph 0 input from stream 0:0 @ 0x5d4c7c0] w:854 h:480 pixfmt:rgba tb:1/60 fr:60/1 sar:0/1
[format @ 0x5d4d4c0] Setting 'pix_fmts' to value 'yuv420p'
[auto_scaler_0 @ 0x5d4f2c0] Setting 'flags' to value 'bicubic'
[auto_scaler_0 @ 0x5d4f2c0] w:iw h:ih flags:'bicubic' interl:0
[format @ 0x5d4d4c0] auto-inserting filter 'auto_scaler_0' between the filter 'Parsed_vflip_0' and the filter 'format'
[AVFilterGraph @ 0x5d491c0] query_formats: 4 queried, 2 merged, 1 already done, 0 delayed
[auto_scaler_0 @ 0x5d4f2c0] w:854 h:480 fmt:rgba sar:0/1 -> w:854 h:480 fmt:yuv420p sar:0/1 flags:0x4
[libx264 @ 0x5d46d40] using mv_range_thread = 24
[libx264 @ 0x5d46d40] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x5d46d40] profile High, level 3.1, 4:2:0, 8-bit
[libx264 @ 0x5d46d40] 264 - core 161 r3048 b86ae3c - H.264/MPEG-4 AVC codec - Copyleft 2003-2021 - http://www.videolan.org/x264.html - options: cabac=1 ref=10 deblock=1:1:1 analyse=0x3:0x113 me=hex subme=8 psy=1 psy_rd=0.40:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=2 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=15 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=5 b_pyramid=2 b_adapt=1 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=50 rc=crf mbtree=1 crf=18.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:0.60
Could not write header for output file #0 (incorrect codec parameters ?): Immediate exit requested
Error initializing output stream 0:0 -- 
[AVIOContext @ 0x5d47b00] Statistics: 0 seeks, 1 writeouts
[AVIOContext @ 0x5d43100] Statistics: 0 bytes read, 0 seeks
Exiting normally, received signal 15.

Logger.js:21 astrofox Process ended with code 1 and signal null
Logger.js:21 astrofox Video rendering stopped.
Logger.js:21 astrofox Video rendering stopped.

Export bug

I created a project, then I clicked "Save video", set up the settings and started to wait. When progress bar hit 100% the app became gray and there is no video file in destination folder.
image

Headless CLI version

I think it'd be nice if there was a way to render without the UI overhead (if there is one / if it's avoidable).
Maybe even spawning multiple instances for multi core rendering...

something like astrofox my_project.afx --audio music.mp3 --instances 4 --end 00:05:00 --out my_video.mp4

Video export not working

Description

Whenever I try to export a video, it'll open the video rendering view, show some random number for the elapsed time and claim that it's finished. It doesn't export a video though.

I'm using the v0.1.6 AppImage

image

System Configuration

Computer
Processor Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
Memory 8039MB (2437MB used)
Device-Type Notebook
OS Manjaro Linux
Display
Resolution 1920x1080 pixels
Session Display Server The X.Org Foundation 1.20.9
Audio-Devices
Audio Adapter HDA-Intel - HDA Intel PCH

Exporting to a video some time create a video of ~1s

As said in the title, there are time I can't explain why, but it goes through the whole export, but the output video is juste ~1 to 2seconds long ending abruptly.

The export process goes through all the frames.
And looking at the developer console does not show any warning or error, so I'm not sure what's happening there.

I'm using it on Mac OS X (10.15.7) and it is the last version, at least the check update says so (version 1.2.0) I haven't try to build a version from the sources yet, but most of the changes has been package updates, so I doubt it would fix anything.

Not sure how to help there to give more infos

Here are the log from one export that failed:

astrofox Starting process: /Applications/Astrofox.app/Contents/Resources/bin/ffmpeg -y -i /var/folders/z1/bjw67dmd5bvgbgmq2qhf9xrm0000gn/T/Astrofox/1947a04a1ee7cfb3685d9c3395fd9a8a86e601cb.mp4 -i /var/folders/z1/bjw67dmd5bvgbgmq2qhf9xrm0000gn/T/Astrofox/1947a04a1ee7cfb3685d9c3395fd9a8a86e601cb.aac -codec copy -shortest -movflags +faststart /Users/godzil/Desktop/BankB.mp4
app.js:1 astrofox ffmpeg version 4.3.1-tessus  https://evermeet.cx/ffmpeg/  Copyright (c) 2000-2020 the FFmpeg developers
  built with Apple clang version 11.0.0 (clang-1100.0.33.17)
  configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libmysofa --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvmaf --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-version3 --pkg-config-flags=--static --disable-ffplay
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
  libpostproc    55.  7.100 / 55.  7.100
app.js:1 astrofox Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/var/folders/z1/bjw67dmd5bvgbgmq2qhf9xrm0000gn/T/Astrofox/1947a04a1ee7cfb3685d9c3395fd9a8a86e601cb.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.45.100
  Duration: 00:00:00.17, start: 0.000000, bitrate: 9347 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 854x480, 9321 kb/s, 60 fps, 60 tbr, 15360 tbn, 120 tbc (default)
    Metadata:
      handler_name    : VideoHandler
app.js:1 astrofox [aac @ 0x7f843e008800] Estimating duration from bitrate, this may be inaccurate
Input #1, aac, from '/var/folders/z1/bjw67dmd5bvgbgmq2qhf9xrm0000gn/T/Astrofox/1947a04a1ee7cfb3685d9c3395fd9a8a86e601cb.aac':
  Duration: 00:00:47.33, bitrate: 167 kb/s
    Stream #1:0: Audio: aac (LC), 48000 Hz, stereo, fltp, 167 kb/s
app.js:1 astrofox Output #0, mp4, to '/Users/godzil/Desktop/BankB.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.45.100
app.js:1 astrofox     Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 854x480, q=2-31, 9321 kb/s, 60 fps, 60 tbr, 15360 tbn, 15360 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 167 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #1:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
app.js:1 astrofox [mp4 @ 0x7f843d809400] Starting second pass: moving the moov atom to the beginning of the file
app.js:1 astrofox frame=   10 fps=0.0 q=-1.0 Lsize=     194kB time=00:00:00.12 bitrate=12435.4kbits/s speed= 165x    
video:190kB audio:3kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.774424%
app.js:1 astrofox Process ended with code 0 and signal null

Support for the OPUS audio codec

The format YouTube uses for the audio only streams is OPUS inside of a .webm container (try youtube-dl -F {some url}). When downloaded, those files can be played in Chrome by just dragging them onto the tab bar; they are natively supported.

BTW, thanks for your work, it really means alot!

Configurable UI color

Currently, the primary color is a shade of purple. With the use of CSS4, we can set this value as a CSS4 variable via less, and allow users to change this value solely within the view. This would also change the use of the primary color to be via CSS4 variables.

Some considerations:

  • I'd prefer to use a preset pallette instead of a color picker. Your purple is very nice and I want to keep the same shade. Red, Green, Blue, Yellow, Purple (default), etc.
  • It would possibly require some persistence layer like Chrome Storage or local storage if we wanted the UI color to persist.

Extra considerations:

  • It's totally not beneficial to the advancement of this platform. I love UI and would love to do more things like this that increase the UI/UX for users. Need to know more about your desires for the project!

Native window decoration support?

On Linux it is nice to have a native window decoration for all applications. And most have that. I wonder if you would implement it to this application. Thanks!

Duration and introduction settings for Scenes

Hi!

If it was possible to add two settings to scenes, this could be used to easily create what marketing departments would refer to as "hip, stylish, youthful, dynamic, exciting, engaging" powerpoint-type presentations:

  • Duration, in seconds, would dictate how long a scene would be visible before fading out in 0.5sec
  • Introduction, in seconds, would dictate when, during playback, a scene would appear, fading in over 0.5sec

Obviously the next step is to add support for various transitions :-)

Thank you! Excellent app!

Read json directly

The .afx files are globally a JSON compress, would it be possible to read directly a json ?

Issues with the UI (but mostly just the menu bar)

Introduction (and complaints)

So, this software seems pretty cool. However, while the UI seems good inside the window, it is terrible outside of the window. First, let me mention the focus of this issue; the categorization in the menu bar is pretty bad. For example, you'd expect the Astrofox menu to contain stuff like "About Astrofox" or "Preferences". What you wouldn't expect to be there is every file-related option. You'd think those would be in a File menu, or if not a File menu, the Edit menu. However, all the Edit menu has are options that should be in a Preferences menu. Second, I'll mention some smaller grievances. If I start to render a scene, I have no idea of how far the rendering process is or how much time is left. All Astrofox does is darken itself and make itself unusable, unless you have it on full screen. When closing out the app, it should say something like "Do you want to save your project?" rather than just closing with no questions asked.

Proposal(s)

  • Add a File menu.
  • As an alternative, at least put the file-related options in the Edit menu.
  • Add a "Do you want to save your project?" message or something similar.
  • Add a simple indication of rendering progress.
  • Merge the Canvas and Settings menus.

Text effects

Fantastic software !

I wish there was something equivalent / similar and as simple to render text effects (optionally with no sound 😅). I think most open source video editing programs don't have good text effects (with character animation or typewriting) like one can produce with after effects. That would allow to create good intros by example.

Can't export video

Hey, this seems like a really awesome project. I got everything working fine and was able to create a project and import the audio clip, but for some reason, when I try to export the video, it just doesn't work.

The progress bar goes all the way to 100% and then it says it's trying to output the file, but nothing happens.

Note that I am using the Linux version and my audio file is over an hour long, so it takes a very long time. Could it have something to do with this?

MIDI support?

Great project! Makes it super easy to make audio-reactive videos which is always nice.

However, I'd like to go one step further, having MIDI support!

Most basic would be supporting MIDI Clock messages, to make things in sync.

Going further, reacting to MIDI CC messages would allow you to connect visualizations to various knobs you use in music hardware/software.

Going even further, being able to trigger things based on MIDI notes would also further make astrofox a really killer application.

For inspiration, it might be worth looking at Resolume Arena/Avenue and see how it's implemented there. You can basically map any MIDI information to any parameter in the application, so you for example change the brightness of a layer based on when the kick drum happens. The help document for the MIDI setup can be found here: https://resolume.com/support/en/midi-shortcuts

When will I18N be ready?

You can see that there is a locales folder in the installation directory, but there is only English on the software interface. When will I18N be ready?

Canvas fails to render on KDE

System information:
Operating System: openSUSE Leap 15.2
KDE Plasma Version: 5.18.6
KDE Frameworks Version: 5.71.0
Qt Version: 5.12.7
Kernel Version: 5.3.18-lp152.60-default
OS Type: 64-bit
Processors: 4 × Intel® Core™ i5-3230M CPU @ 2.60GHz
Memory: 7.6 GiB of RAM

Running from 1.1.0. AppImage. Upon startup, the canvas surface is rendered as blank and gray, despite being set to black by default and including some starter elements. Changing this parameter has no effect. Even after importing some audio and an image, the canvas remains blank and unresponsive. Resizing the canvas causes an icon to render in the top-left corner. I tried running Storyboarder to check for issues with my graphics drivers or Electron, but it worked fine. Three.js reported several errors. Any idea what's going on? The full console log and screenshots should be below.

-1611681812783.log
Screenshot_1
Screenshot_2

Time Remaining UI during Render

Would love to contribute to this project. I would love to see a "time remaining" feature during rendering. Is this something you'd be interested in? If so, do you care if I add dependencies or would you prefer to write the time remaining logic directly in the source?

Thanks for the awesome project!


Edit: As a followup, it might be nice to have some rules of conduct for PR solicitation, would love to just write this PR knowing you're open to it!

rendered video has no canvas content (i.e. is blank)

:Linux user here.

This is a really cool project and I am very eager to get export working! Here are the results I am currently getting: https://streamable.com/rlor9r

There seems to be a snag in the ffmpeg encoding--I was thinking it would be fine to bypass some of the complexity and just save each frame to disk and try the command on a terminal. Could you advise me on how to do that?

Again, this is a wonderful project and I appreciate you sharing it with all of us.

Save canvas size in project file

Unless I'm doing something wrong, it seems that loading up a project doesn't set the canvas at the size of when that project was saved. It would be nice if it did :)

Feature: scene timeline

It would be useful if we could control the visibility of scenes based on a timeline. This would be similar to video editor timeline in that it could toggle scene visibility and possible interpolate scene properties like opacity for smooth transition.

The scene timeline elements would be bound to the audio file timecodes, so scenes could be shown or hidden through specific segments of the audio file. E.g. each scene visibility element would have a start and end time.

It could be possible for the same scene element to (re)appear multiple times within the audio file duration.

Alternative solution(s)

Scene visibility control could be also achieved in a more flexible, but slightly more advanced, manner with a parameter interpolation timeline (#87)

Use case(s)

Editors might want to display particular visual elements at specific spans within the audio. E.g. a song title and artist text could display for the first five seconds and then fade to zero opacity.

Prior art

See: Blender video sequence editor

render error: Fedora user, had to chmod +x astrofox/bin/ffmpeg

When generating the video the program would report error
I went to the electron console it said EACCESS /home/catpiss/astrofox/bin/ffmpeg
I ran chmod +x /home/catpiss/astrofox/bin/ffmpeg
and that fixed the issue for me

uname -a
Linux black 5.14.11-200.fc34.x86_64 #1 SMP Sun Oct 10 14:39:31 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

Don't use PNGs for rendering

So, as far as I can see, when rendering an animation, Astrofox first exports a .png sequence and then calls ffmpeg to render the images into a video file.

I'd really recommend to not use PNGs for that, because:

  • Encoding and Decoding PNGs is pretty slow
  • PNGs are unreasonably large for everything that isn't flat colors
  • PNGs have broken color management

As alternatives I'd suggest EXR if the goal is to be lossless (I guess TARGA / .tga would be fine too) or just plain old JPEGs.

Here are some references / benchmarks:
https://blender.stackexchange.com/a/148466
https://medium.com/@aeriform.io/what-i-learnt-about-png-files-the-hard-way-f39c69e897ce
https://youtu.be/F1kYBnY6mwg
https://twitter.com/troy_s/status/1157434283776040960

Linear/Logarithmic scale

Currently, the visualisers in this project all use a linear scale to display audio. This leads to a lot of visualising on the left side, where the lower frequencies live, and almost no visualising on the right side of the visualiser. Virtually all audio visualisers use a logarithmic scale to display audio activity, as it leads to a much more even division of audio activity.

For example: loading in the video 20Hz to 20kHz, we can see that the visualiser stays at the left for almost the entirety of the video and quickly starts to go right nearing the end of the video. On a logarithmic scale, this would go from left to right at a constant speed.

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.