-
Notifications
You must be signed in to change notification settings - Fork 12
Open
Description
Hello! I got this error when trying the readme example. I'm using wezterm on linux, which has sixel support. Here is how to reproduce the error:
julia> using Pkg
julia> Pkg.status("ImageInTerminal")
No Matches in `~/.julia/environments/v1.12/Project.toml`
julia> Pkg.status("Sixel")
No Matches in `~/.julia/environments/v1.12/Project.toml`
julia> Pkg.add("ImageInTerminal")
Resolving package versions...
Installed ImageInTerminal ─ v0.5.4
Updating `~/.julia/environments/v1.12/Project.toml`
[d8c32880] + ImageInTerminal v0.5.4
Updating `~/.julia/environments/v1.12/Manifest.toml`
[a8cc5b0e] + Crayons v4.1.1
[d8c32880] + ImageInTerminal v0.5.4
[c8c2cc18] + XTermColors v0.2.1
Precompiling packages finished.
1 dependency successfully precompiled in 2 seconds. 232 already precompiled.
julia> Pkg.add("Sixel")
Resolving package versions...
Installed Sixel ─ v0.1.5
Updating `~/.julia/environments/v1.12/Project.toml`
[45858cf5] + Sixel v0.1.5
Manifest No packages added to or removed from `~/.julia/environments/v1.12/Manifest.toml`
julia> Pkg.status("ImageInTerminal")
Status `~/.julia/environments/v1.12/Project.toml`
[d8c32880] ImageInTerminal v0.5.4
julia> Pkg.status("Sixel")
Status `~/.julia/environments/v1.12/Project.toml`
[45858cf5] Sixel v0.1.5
julia> using TestImages
julia> testimage("mandril_color")
512×512 Matrix{ColorTypes.RGB{FixedPointNumbers.N0f8}}:
RGB(0.651, 0.545, 0.243) RGB(0.22, 0.188, 0.137) … RGB(0.671, 0.741, 0.443)
RGB(0.416, 0.451, 0.196) RGB(0.545, 0.392, 0.169) RGB(0.459, 0.486, 0.224)
RGB(0.294, 0.251, 0.125) RGB(0.482, 0.42, 0.188) RGB(0.38, 0.29, 0.157)
RGB(0.227, 0.29, 0.176) RGB(0.541, 0.518, 0.212) RGB(0.196, 0.29, 0.165)
RGB(0.384, 0.286, 0.165) RGB(0.549, 0.482, 0.2) RGB(0.282, 0.325, 0.157)
RGB(0.286, 0.29, 0.125) RGB(0.282, 0.294, 0.125) … RGB(0.671, 0.741, 0.451)
RGB(0.153, 0.09, 0.09) RGB(0.204, 0.153, 0.09) RGB(0.612, 0.612, 0.471)
RGB(0.153, 0.063, 0.094) RGB(0.188, 0.169, 0.094) RGB(0.553, 0.612, 0.294)
RGB(0.192, 0.165, 0.196) RGB(0.224, 0.129, 0.09) RGB(0.459, 0.478, 0.227)
RGB(0.169, 0.098, 0.09) RGB(0.153, 0.063, 0.094) RGB(0.537, 0.514, 0.224)
RGB(0.09, 0.094, 0.071) RGB(0.188, 0.161, 0.098) … RGB(0.286, 0.2, 0.11)
RGB(0.161, 0.063, 0.086) RGB(0.192, 0.157, 0.098) RGB(0.196, 0.29, 0.165)
⋮ ⋱
RGB(0.486, 0.643, 0.541) RGB(0.459, 0.58, 0.518) RGB(0.349, 0.259, 0.196)
RGB(0.447, 0.58, 0.514) RGB(0.443, 0.541, 0.518) RGB(0.251, 0.22, 0.263)
RGB(0.349, 0.416, 0.486) RGB(0.447, 0.482, 0.502) RGB(0.29, 0.325, 0.322)
RGB(0.388, 0.482, 0.42) RGB(0.451, 0.514, 0.412) RGB(0.255, 0.192, 0.192)
RGB(0.349, 0.416, 0.478) RGB(0.392, 0.478, 0.427) … RGB(0.294, 0.318, 0.318)
RGB(0.388, 0.38, 0.384) RGB(0.345, 0.412, 0.482) RGB(0.255, 0.294, 0.263)
RGB(0.322, 0.357, 0.29) RGB(0.349, 0.416, 0.478) RGB(0.286, 0.294, 0.251)
RGB(0.353, 0.416, 0.478) RGB(0.443, 0.514, 0.514) RGB(0.294, 0.314, 0.329)
RGB(0.455, 0.541, 0.631) RGB(0.451, 0.58, 0.506) RGB(0.29, 0.294, 0.224)
RGB(0.451, 0.588, 0.667) RGB(0.455, 0.537, 0.62) … RGB(0.251, 0.224, 0.251)
RGB(0.451, 0.588, 0.667) RGB(0.455, 0.537, 0.62) RGB(0.251, 0.224, 0.251)
julia> using ImageInTerminal
julia> testimage("mandril_color")
Error showing value of type Matrix{ColorTypes.RGB{FixedPointNumbers.N0f8}}:
SYSTEM (REPL): showing an error caused an error
ERROR: 1-element ExceptionStack:
MethodError: no method matching sixel_write_callback_function(::Ptr{Int8}, ::Int32, ::IOContext{IOBuffer})
The function `sixel_write_callback_function` exists, but no method is defined for this combination of argument types.
Closest candidates are:
sixel_write_callback_function(::Ptr{Int8}, ::Int32, ::Ref{T}) where T<:IO
@ Sixel ~/.julia/packages/Sixel/X78VX/src/backend/libsixel/encoder.jl:14
Stacktrace:
[1] sixel_encode
@ ~/.julia/packages/Sixel/X78VX/src/backend/libsixel/CModule.jl:286 [inlined]
[2] (::Sixel.LibSixel.LibSixelEncoder)(io::IOContext{IOBuffer}, bytes::Matrix{ColorTypes.RGB{FixedPointNumbers.N0f8}})
@ Sixel.LibSixel ~/.julia/packages/Sixel/X78VX/src/backend/libsixel/encoder.jl:34
[3] sixel_encode(io::IOContext{…}, img::Matrix{…}, enc::Sixel.LibSixel.LibSixelEncoder; transpose::Bool, kwargs::@Kwargs{})
@ Sixel ~/.julia/packages/Sixel/X78VX/src/encoder.jl:93
[4] sixel_encode (repeats 2 times)
@ ~/.julia/packages/Sixel/X78VX/src/encoder.jl:77 [inlined]
[5] sixel_encode
@ ~/.julia/packages/ImageInTerminal/U2jcL/src/ImageInTerminal.jl:131 [inlined]
[6] imshow(io::IOContext{REPL.LimitIO{…}}, img::Matrix{ColorTypes.RGB{…}}, maxsize::Tuple{Int64, Int64}; kw::@Kwargs{})
@ ImageInTerminal ~/.julia/packages/ImageInTerminal/U2jcL/src/ImageInTerminal.jl:115
[7] imshow (repeats 2 times)
@ ~/.julia/packages/ImageInTerminal/U2jcL/src/ImageInTerminal.jl:110 [inlined]
[8] show(io::IOContext{REPL.LimitIO{…}}, mime::MIME{Symbol("text/plain")}, img::Matrix{ColorTypes.RGB{…}})
@ ImageInTerminal ~/.julia/packages/ImageInTerminal/U2jcL/src/ImageInTerminal.jl:68
[9] show_repl(io::IO, mime::MIME{Symbol("text/plain")}, x::Any)
@ REPL ~/.julia/juliaup/julia-1.12.4+0.x64.linux.gnu/share/julia/stdlib/v1.12/REPL/src/REPL.jl:548
[10] show_limited(io::IO, mime::MIME, x::Any)
@ REPL ~/.julia/juliaup/julia-1.12.4+0.x64.linux.gnu/share/julia/stdlib/v1.12/REPL/src/REPL.jl:517
[11] (::REPL.var"#display##0#display##1"{REPL.REPLDisplay{…}, MIME{…}, Base.RefValue{…}})(io::Any)
@ REPL ~/.julia/juliaup/julia-1.12.4+0.x64.linux.gnu/share/julia/stdlib/v1.12/REPL/src/REPL.jl:540
[12] with_repl_linfo(f::Any, repl::REPL.LineEditREPL)
@ REPL ~/.julia/juliaup/julia-1.12.4+0.x64.linux.gnu/share/julia/stdlib/v1.12/REPL/src/REPL.jl:833
[13] display(d::REPL.REPLDisplay, mime::MIME{Symbol("text/plain")}, x::Any)
@ REPL ~/.julia/juliaup/julia-1.12.4+0.x64.linux.gnu/share/julia/stdlib/v1.12/REPL/src/REPL.jl:526
[14] display
@ ~/.julia/juliaup/julia-1.12.4+0.x64.linux.gnu/share/julia/stdlib/v1.12/REPL/src/REPL.jl:546 [inlined]
[15] display(x::Any)
@ Base.Multimedia ./multimedia.jl:340
[16] (::REPL.var"#print_response##2#print_response##3")()
@ REPL ~/.julia/juliaup/julia-1.12.4+0.x64.linux.gnu/share/julia/stdlib/v1.12/REPL/src/REPL.jl:590
[17] repl_backend_loop(backend::REPL.REPLBackend, get_module::Function)
@ REPL ~/.julia/juliaup/julia-1.12.4+0.x64.linux.gnu/share/julia/stdlib/v1.12/REPL/src/REPL.jl:445
[18] start_repl_backend(backend::REPL.REPLBackend, consumer::Any; get_module::Function)
@ REPL ~/.julia/juliaup/julia-1.12.4+0.x64.linux.gnu/share/julia/stdlib/v1.12/REPL/src/REPL.jl:427
[19] start_repl_backend
@ ~/.julia/juliaup/julia-1.12.4+0.x64.linux.gnu/share/julia/stdlib/v1.12/REPL/src/REPL.jl:424 [inlined]
[20] run_repl(repl::REPL.AbstractREPL, consumer::Any; backend_on_current_task::Bool, backend::Any)
@ REPL ~/.julia/juliaup/julia-1.12.4+0.x64.linux.gnu/share/julia/stdlib/v1.12/REPL/src/REPL.jl:653
[21] run_repl(repl::REPL.AbstractREPL, consumer::Any)
@ REPL ~/.julia/juliaup/julia-1.12.4+0.x64.linux.gnu/share/julia/stdlib/v1.12/REPL/src/REPL.jl:639
[22] run_std_repl(REPL::Module, quiet::Bool, banner::Symbol, history_file::Bool)
@ Base ./client.jl:478
[23] run_main_repl(interactive::Bool, quiet::Bool, banner::Symbol, history_file::Bool)
@ Base ./client.jl:499
[24] repl_main
@ ./client.jl:586 [inlined]
[25] _start()
@ Base ./client.jl:561
Stacktrace:
[1] print_response(errio::IO, response::Any, backend::Union{…}, show_value::Bool, have_color::Bool, specialdisplay::Union{…})
@ REPL ~/.julia/juliaup/julia-1.12.4+0.x64.linux.gnu/share/julia/stdlib/v1.12/REPL/src/REPL.jl:599
[2] (::REPL.var"#print_response##0#print_response##1"{REPL.LineEditREPL, Pair{Any, Bool}, Bool, Bool})(io::Any)
@ REPL ~/.julia/juliaup/julia-1.12.4+0.x64.linux.gnu/share/julia/stdlib/v1.12/REPL/src/REPL.jl:558
[3] with_repl_linfo(f::Any, repl::REPL.LineEditREPL)
@ REPL ~/.julia/juliaup/julia-1.12.4+0.x64.linux.gnu/share/julia/stdlib/v1.12/REPL/src/REPL.jl:833
[4] print_response(repl::REPL.AbstractREPL, response::Any, show_value::Bool, have_color::Bool)
@ REPL ~/.julia/juliaup/julia-1.12.4+0.x64.linux.gnu/share/julia/stdlib/v1.12/REPL/src/REPL.jl:556
[5] (::REPL.var"#do_respond#73"{…})(s::REPL.LineEdit.MIState, buf::Any, ok::Bool)
@ REPL ~/.julia/juliaup/julia-1.12.4+0.x64.linux.gnu/share/julia/stdlib/v1.12/REPL/src/REPL.jl:1192
[6] run_interface(terminal::Base.Terminals.TextTerminal, m::REPL.LineEdit.ModalInterface, s::REPL.LineEdit.MIState)
@ REPL.LineEdit ~/.julia/juliaup/julia-1.12.4+0.x64.linux.gnu/share/julia/stdlib/v1.12/REPL/src/LineEdit.jl:2854
[7] run_frontend(repl::REPL.LineEditREPL, backend::REPL.REPLBackendRef)
@ REPL ~/.julia/juliaup/julia-1.12.4+0.x64.linux.gnu/share/julia/stdlib/v1.12/REPL/src/REPL.jl:1663
[8] (::REPL.var"#61#62"{REPL.LineEditREPL, REPL.REPLBackendRef})()
@ REPL ~/.julia/juliaup/julia-1.12.4+0.x64.linux.gnu/share/julia/stdlib/v1.12/REPL/src/REPL.jl:650
Some type information was truncated. Use `show(err)` to see complete types.
julia> versioninfo()
Julia Version 1.12.4
Commit 01a2eadb047 (2026-01-06 16:56 UTC)
Build Info:
Official https://julialang.org release
Platform Info:
OS: Linux (x86_64-linux-gnu)
CPU: 24 × 12th Gen Intel(R) Core(TM) i7-12800HX
WORD_SIZE: 64
LLVM: libLLVM-18.1.7 (ORCJIT, alderlake)
GC: Built with stock GC
Threads: 1 default, 1 interactive, 1 GC (on 24 virtual cores)
julia> using Sixel
julia> Sixel.is_sixel_supported()
true
julia> sixel_encode(testimage("mandril_color"))
I found that directly using sixel_encode renders the image, so it appears that using stdout is fine.

When I check the source code of imshow, I noticed that it sends IOContext to sixel_encode, which appears to trigger the error.
function imshow(
io::IO, img::AbstractArray{<:Colorant}, maxsize::Tuple=displaysize(io); kw...
)
buf = IOContext(PipeBuffer(), :color => get(io, :color, false))
if choose_sixel(img)
sixel_encode(buf, img)
...
I changed this part of the code to
function imshow(
io::IO, img::AbstractArray{<:Colorant}, maxsize::Tuple=displaysize(io); kw...
)
inner_buf = PipeBuffer()
buf = IOContext(inner_buf, :color => get(io, :color, false))
if choose_sixel(img)
sixel_encode(inner_buf, img)
Now it appears to work properly

Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels