# GLMakie record gives LoadError: IOError: write: broken pipe (EPIPE)

**URL:** <https://discourse.julialang.org/t/glmakie-record-gives-loaderror-ioerror-write-broken-pipe-epipe/64425>\
**Category:** Visualization\
**Tags:** makie\
**Created:** [July 10, 2021, 3:19pm UTC](https://discourse.julialang.org/t/glmakie-record-gives-loaderror-ioerror-write-broken-pipe-epipe/64425 "2021-07-10T15:19:01Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![bedosh](https://avatars.discourse-cdn.com/v4/letter/b/e495f1/32.png) [@bedosh](https://discourse.julialang.org/u/bedosh)\
**Post date:** [July 10, 2021, 3:19pm UTC](https://discourse.julialang.org/t/glmakie-record-gives-loaderror-ioerror-write-broken-pipe-epipe/64425/1 "2021-07-10T15:19:01Z")

</div>

I am trying to get GLMakie record to work.

Trying the example code from [http://makie.juliaplots.org/stable/animation.html:](http://makie.juliaplots.org/stable/animation.html:)

```julia
using GLMakie
using Makie.Colors

fig, ax, lineplot = lines(0..10, sin; linewidth=10)

# animation settings
nframes = 30
framerate = 30
hue_iterator = range(0, 360, length=nframes)

record(fig, "color_animation.mp4", hue_iterator; framerate = framerate) do hue
    lineplot.color = HSV(hue, 1, 0.75)
end

```

Results in a window opening with the plot, but saving the animation to a movie file fails. Error given is:

```julia
ERROR: LoadError: IOError: write: broken pipe (EPIPE)
Stacktrace:
 [1] unsafe_write
   @ ./io.jl:646 [inlined]
 [2] write(s::Base.PipeEndpoint, a::Matrix{RGB{FixedPointNumbers.N0f8}})
   @ Base ./io.jl:669
 [3] recordframe!(io::VideoStream)
   @ Makie ~/.julia/packages/Makie/ppunD/src/display.jl:426
 [4] Record(func::var"#1#2", scene::Figure, iter::StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}; framerate::Int64)
   @ Makie ~/.julia/packages/Makie/ppunD/src/display.jl:596
 [5] #record#913
   @ ~/.julia/packages/Makie/ppunD/src/display.jl:587 [inlined]
 [6] top-level scope
   @ ~/dev/learn/julia/learnjulia/makie/tutorial.jl:13
 [7] include(fname::String)
   @ Base.MainInclude ./client.jl:444
 [8] top-level scope
   @ REPL[1]:1
in expression starting at /home/ben/dev/learn/julia/learnjulia/makie/tutorial.jl:13

```

I’m looking for advice how to debug where this error is coming from.

Thanks,  
Ben

Versioninfo():

```julia
Julia Version 1.6.1
Commit 6aaedecc44* (2021-04-23 05:59 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
  CPU: AMD Ryzen 9 3950X 16-Core Processor
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-12.0.0 (ORCJIT, znver2)

```

GLMakie version

```julia
(@v1.6) pkg> st --manifest GLMakie
      Status `~/.julia/environments/v1.6/Manifest.toml`
  [e9467ef8] GLMakie v0.4.2

```

---

<div class="post-metadata">

**Author:** ![sdanisch](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sdanisch/32/1406_2.png) [@sdanisch](https://discourse.julialang.org/u/sdanisch)\
**Post date:** [July 10, 2021, 3:31pm UTC](https://discourse.julialang.org/t/glmakie-record-gives-loaderror-ioerror-write-broken-pipe-epipe/64425/2 "2021-07-10T15:31:07Z")

</div>

Seems like a platform specific issue…  
If you have some time, this should be an MWE to debug the problem:

```julia
using FFMPEG, Colors
using Colors: N0f8
process = @ffmpeg_env open(`$(FFMPEG.ffmpeg) -framerate 30 -f rawvideo -pixel_format rgb24 -r 30 -s:v 500x500 -i pipe:0 -vf vflip -y test.mkv`, "w")
write(process, rand(RGB{N0f8}, 500, 500))
close(process)
wait(process)

```

---

<div class="post-metadata">

**Author:** ![bedosh](https://avatars.discourse-cdn.com/v4/letter/b/e495f1/32.png) [@bedosh](https://discourse.julialang.org/u/bedosh)\
**Post date:** [July 10, 2021, 3:59pm UTC](https://discourse.julialang.org/t/glmakie-record-gives-loaderror-ioerror-write-broken-pipe-epipe/64425/3 "2021-07-10T15:59:47Z")

</div>

Thanks a lot for the quick reply!

This test gives me the error below. Unfortunately, I still don’t see what is wrong. ffmpeg seems to get invoked fine, but perhaps I am missing something.

I see a “WARNING: library configuration mismatch” in the output, trying to find out where that is coming from. Not sure if it is relevant or not.

A simple ffmpeg command like

```julia
ffmpeg -loop 1 -i test.png -c:v libx264 -t 15 -pix_fmt yuv420p -vf scale=320:240 out.mkv

```

works fine (video is created fine), so my ffmpeg setup is not completly broken at least…

```julia
ffmpeg version 4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 8.1.0 (GCC)
  configuration: --enable-cross-compile --cross-prefix=/opt/x86_64-linux-gnu/bin/x86_64-linux-gnu- --arch=x86_64 --target-os=linux --cc=cc --cxx=c++ --dep-cc=cc --ar=ar --nm=nm --objcc=objc --sysinclude=/workspace/destdir/include --pkg-config=/usr/bin/pkg-config --pkg-config-flags=--static --prefix=/workspace/destdir --sysroot=/opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root --extra-libs=-lpthread --enable-gpl --enable-version3 --enable-nonfree --disable-static --enable-shared --enable-pic --disable-debug --disable-doc --enable-avresample --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libx264 --enable-libx265 --enable-libvpx --enable-encoders --enable-decoders --enable-muxers --enable-demuxers --enable-parsers --enable-openssl --disable-schannel --extra-cflags=-I/workspace/destdir/include --extra-ldflags=-L/workspace/destdir/lib --enable-nvenc --enable-cuda-llvm
  WARNING: library configuration mismatch
  avutil configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-shared --enable-version3
  avcodec configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-shared --enable-version3
  avformat configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-shared --enable-version3
  avdevice configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-shared --enable-version3
  avfilter configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-shared --enable-version3
  swscale configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-shared --enable-version3
  swresample configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-shared --enable-version3
  postproc configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-shared --enable-version3
  libavutil 56. 51.100 / 56. 70.100
  libavcodec 58. 91.100 / 58.134.100
  libavformat 58. 45.100 / 58. 76.100
  libavdevice 58. 10.100 / 58. 13.100
  libavfilter 7. 85.100 / 7.110.100
  libavresample 4. 0. 0 / 4. 0. 0
  libswscale 5. 7.100 / 5. 9.100
  libswresample 3. 7.100 / 3. 9.100
  libpostproc 55. 7.100 / 55. 9.100
ERROR: LoadError: IOError: write: broken pipe (EPIPE)
Stacktrace:
 [1] unsafe_write
   @ ./io.jl:646 [inlined]
 [2] write(s::Base.Process, a::Matrix{RGB{N0f8}})
   @ Base ./io.jl:669
 [3] top-level scope
   @ ~/dev/learn/julia/learnjulia/makie/test.jl:4
 [4] include(fname::String)
   @ Base.MainInclude ./client.jl:444
 [5] top-level scope
   @ REPL[1]:1
in expression starting at /home/ben/dev/learn/julia/learnjulia/makie/test.jl:4
``
```

---

<div class="post-metadata">

**Author:** ![bedosh](https://avatars.discourse-cdn.com/v4/letter/b/e495f1/32.png) [@bedosh](https://discourse.julialang.org/u/bedosh)\
**Post date:** [July 10, 2021, 4:16pm UTC](https://discourse.julialang.org/t/glmakie-record-gives-loaderror-ioerror-write-broken-pipe-epipe/64425/4 "2021-07-10T16:16:01Z")

</div>

I noticed that julia is using its own version of ffmpeg, not the one my system has installed.

For testing, I removed that version (by deleting the ffmpeg file from .julia/artifacts…) and at least the test code you provided works now.  
(I cannot play the video, but I have the same issue with any video I create with ffmpeg and pix\_fmt rgb24)

When using the code from the tutorial using “record” I get this error now:

```julia
ERROR: LoadError: IOError: could not spawn `/home/ben/.julia/artifacts/7f40eeb66d90d3026ae5fb68761c263b57adb840/bin/ffmpeg -loglevel quiet -i '/tmp/jl_OF6ZyS/##video#264.mkv' -crf 20 -c:v libx264 -preset slow -r 30 -profile:v high422 -pix_fmt yuv420p -c:a libvo_aacenc -b:a 128k -y /tmp/jl_SAsXCJ/out.mp4`: no such file or directory (ENOENT)

```

which is not very surprising, since I removed it, I was hoping it would default to my system ffmpeg automatically.

I have something to work with now at least, trying to find out why the version that comes from julia does not seem to work on my system.

---

<div class="post-metadata">

**Author:** ![bedosh](https://avatars.discourse-cdn.com/v4/letter/b/e495f1/32.png) [@bedosh](https://discourse.julialang.org/u/bedosh)\
**Post date:** [July 10, 2021, 8:26pm UTC](https://discourse.julialang.org/t/glmakie-record-gives-loaderror-ioerror-write-broken-pipe-epipe/64425/5 "2021-07-10T20:26:55Z")

</div>

For now, my workaround is to symlink/.julia/artifacts/7f40eeb66d90d3026ae5fb68761c263b57adb840/bin/ffmpeg to /usr/bin/ffmpeg.

---

<div class="post-metadata">

**Author:** ![liuyxpp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/liuyxpp/32/9870_2.png) [@liuyxpp](https://discourse.julialang.org/u/liuyxpp)\
**Post date:** [August 31, 2021, 5:24am UTC](https://discourse.julialang.org/t/glmakie-record-gives-loaderror-ioerror-write-broken-pipe-epipe/64425/6 "2021-08-31T05:24:30Z")

</div>

Encountered same issue here. Forturnately, the workaround works for me.

Extra info from Pluto REPL:

```bash
From worker 4:	dyld: Library not loaded: @rpath/libglib-2.0.0.dylib
      From worker 4: Referenced from: /Users/lyx/.julia/artifacts/d30bf8e9f9b903de5e42ffdad9e1118722c08cd8/bin/ffmpeg
      From worker 4: Reason: Incompatible library version: ffmpeg requires version 6801.0.0 or later, but libglib-2.0.0.dylib provides version 0.0.0

```

My Julia:

```bash
Julia Version 1.6.0
Commit f9720dc2eb (2021-03-24 12:55 UTC)
Platform Info:
  OS: macOS (x86_64-apple-darwin19.6.0)
  CPU: Intel(R) Core(TM) i7-8850H CPU @ 2.60GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-11.0.1 (ORCJIT, skylake)

```
