Repository navigation
Neechan 2.5.2
The .ipa below is unsigned. There is no signing certificate in this
repository and there should not be one, so it cannot be installed by
tapping it: use AltStore, Sideloadly, or your own developer account.
Requires iOS 26 or newer, on iPhone or iPad. Installs as Neechan X
(pro.neechan.app-dev) and updates 2.5.1, or 2.5.2 build 9, in place.
A post, or a whole thread, can be read in your own language, translated on
the device. 2ch's likes and dislikes are shown and can be cast. The text in a
picture can be selected and copied, and a picture can be looked up on Yandex,
Google Lens, SauceNAO or iqdb. Files can be picked in the gallery grid and
saved together, or every file in a thread saved at once. A clip plays slower
or faster, steps one picture at a time while paused, and shows a picture of
where the scrubber is while it is dragged. About links to the website, the
privacy policy, the source and an address to write to.
A link in a post to a video or a picture opens in the app's own viewer, and
a file on another host is no longer sent your 2ch session. Some MP4s that
played in silence are heard, an AVI renamed to .mp4 plays, and a seek no
longer stops a downloading clip with an error or freezes one at its end. A
tap in the gallery grid opens the file you tapped, not the one below it.
Music from another app stops only while a clip is heard, and carries on
when the clip is paused, muted or closed.
Posting to 4chan goes out the way the site's own reply form sends it, from a
browser view inside the app. Its new captcha, a few steps of pictures to slide
through, is drawn by the app, and the waits between captchas are the ones the
site sends.
Threads
- Translate a post or the whole thread. Translate in a post's menu shows
it in the language the app is set to, and Translate thread in the thread's
menu does every post, and every post that arrives after. It is done on the
device by the system's translator, which asks to download a language the
first time. Quotes, links, spoilers and greentext stay where they were;
only the words change. Show original, under the post or in either menu,
puts the words back. A thread already in your language says so rather than
being sent off. - Likes and dislikes on 2ch. The boards that count them, such as /news/,
show each post's likes and dislikes under it, and a tap casts yours. It
counts at once, and comes back off with the site's reason if the site
refuses it. A vote is writing to the site, so it follows the same switch as
posting: where posting is off, the counts are shown and cannot be tapped.
The app had the request for this but never made it, and the answer it
expected was not the one the site gives, so a vote that counted would have
been reported as a failure.
Posting
- 4chan posts go through the browser engine. 4chan's posting host refused
the app's own requests, even with the cookies a web view had earned, so the
reply form never got past the browser check. The captcha and the post now
go out from a hidden web view on the board's own page, the way 4chan's quick
reply sends them. When Cloudflare wants to check the browser first, its
check appears inside the captcha box and is answered there. - 4chan's new captcha. Press Get Captcha, then on each step move the
slider until the picture matches what the instructions ask for, and press
Next. The instructions show with the picture they ask about, as on the site,
and a short note under the captcha says how it works. The slider starts on
the instructions, and nothing is picked for you. - The site's own waits. Get Captcha counts down whatever wait 4chan sends
with each captcha, 30 seconds, a minute or five, and "You have to wait a
while before doing this again" shows with it rather than as a bare error.
A longer wait shows the site's own message. Its link to verify your email,
and the one under the captcha, open in the app, so what the page sets counts
for the captcha. A captcha is asked for only when you press for it, since
each one starts the wait, and closing the form keeps the wait and a captcha
you had started. - A post that may have gone through says so. When a post leaves and no
answer comes back, the form says it may have been posted rather than that it
failed, so it is not sent twice.
Links
- A link to a file opens in the viewer. A link straight to a video or a
picture, such as2ch.su/test/src/237957/17847495108690174855.mp4, opened
a Safari sheet. Only boards and threads were recognised, and a file is
neither. A link to an mp4, webm, mov, mkv, jpg, png, gif, webp or bmp now
opens in the viewer, the way a file attached to a post does. This works in
the thread, in a quote and in the replies window, and Go to post and Save
treat it as part of the post that links to it. A file on any 2ch mirror
(2ch.su, 2ch.hk, 2ch.pm, 2ch.life) is fetched from the mirror you have
chosen, so a link to a mirror that has gone dark still plays. A file on
another host plays from that host. Until you turn on Adult 18+, a file on
a board for adults, or on a host other than the imageboard's, still opens
in Safari, the same rule the in-app browser follows.
Gallery
- Text in a picture can be selected. A picture with words in it, a
screenshot of a post most often, gets a Live Text button beside Save and
Share. Tapped, the words are lifted out of the picture and can be selected,
copied, translated or looked up, and a code or a thing Visual Look Up knows
can be opened. The long press and the drag that closes the viewer are left
to the text while it is lifted out, and come back when it is put away. The
button appears only where something was found. - Look a picture up. Search for this image, in a file's long-press menu
in the viewer, the grid and the feed, sends the picture's address to Yandex,
Google Lens, SauceNAO or iqdb. A video is looked up by its thumbnail. The
page opens in the app's browser or in Safari by the same rule as any other
link, and a file from a thread saved on the device is not offered, since no
engine can reach it there. - Save many files at once. Select, in the gallery grid, lets you tick
files and save them together, with Select all for whatever the filter is
showing. Save all files, in the thread's menu, saves every file in the
thread after asking. The capsule counts them, "Saving 3 of 42", one failure
does not stop the rest, and the alert at the end says how many did not make
it. A save pressed while another was still running used to be dropped
without a word; it now waits its turn. - Cancel stops a conversion. Cancelling a save while a WebM was being
turned into an MP4 took the capsule away and left the conversion running
to the end of the clip. - A file on another host is not sent your session. The player sent your
2ch cookies, including a passcode's, with every file it fetched, whatever
host the file was on. In a 4chan thread they went to 4chan's file host.
Only a file on the mirror you have chosen is sent them now. - A tap in the grid opens the file you tapped. Tapping a video could open
the picture below it. A thumbnail is cropped to its square, but the cropped
part still took taps, and later cells lie on top: a tall screenshot took
the lower half of the cell above it, and a wide picture the edge of the
cell to its left. Each thumbnail now answers only inside its own square, in
the grid, in a thread, on a board and in the attachments of a new post.
Media
- Playback speed. The 1× under the viewer's scrubber picks a speed from
half to double. Voices keep their pitch. The speed holds as you page from
clip to clip, and the next viewer opens at normal speed. The feed is not
affected. - One picture at a time. While a clip is paused, two buttons beside the
speed step one picture back or forward, and holding one keeps stepping. A
step from the end of a clip leaves it paused where it is. - A picture of where the scrubber is. Dragging the scrubber shows the
picture at that point, from the keyframe at or before it, with the time
under it. It is made only from what is already on the device, so it never
competes with the clip for the connection; where the clip has not arrived,
the post's own thumbnail stands in. - A seek while paused shows where it landed. The clock was left at the
time asked for, which is nearly always a little before the picture there,
and the old picture stayed on screen until the clip was played. - A seek is not answered with a picture from before it. A piece of the
file read just as a seek began was taken for the first piece of the new
position. The picture after the seek could be one from where the clip had
been, and what came after it was decoded from the start of the clip. - Music from another app stops only while a clip is heard. Opening a
video stopped Spotify, Music or a podcast even when the clip was muted or
had no sound at all, and it stayed stopped until the gallery or the feed
closed. It now stops only while a clip plays out loud, and carries on when
the clip is paused, muted, finished or closed, or when the app goes to the
background. After a pause it waits a second, so a swipe in the feed does
not start and stop it. The feed starts muted, so music keeps playing until
you turn the feed's sound on. A video in another app's picture-in-picture
window stops the same way, but usually waits for a tap to carry on. A call,
or music started from Control Centre, pauses a clip that was playing out
loud. Before, the clip carried on with no sound. - Sound plays in an MP4 whose AAC only says it is stereo once it starts.
HE-AAC v2 often declares just its core in the file's header, 22.05 kHz mono,
and turns out to be 44.1 kHz stereo when the first packet is decoded. The
player built everything from the header, refused every bit of sound that
came out, and said nothing: the picture played and the clip was silent.
What is played is now shaped by the first decoded sound, and a refusal is
written to the log. Two of the four HE-AAC v2 clips in one /test/ thread
were like this. - An AVI named .mp4 plays. A board checks a file's name, not its bytes, so
an old XviD rip renamed to .mp4 is posted and served as an MP4. The app's
FFmpeg could not read AVI or decode MPEG-4 Part 2 and the clip failed to
open. neechan-ffmpeg 9.0.4, the same FFmpeg n9.0.2, adds both; the file is
recognised by its bytes whatever it is called, and its 5.1 AC-3 sound comes
out as stereo. Its last picture carries no time of its own and is now
shown after the one before it; untimed, the clip never reached its end and
the timeline counted on. - A seek no longer stops a clip with an error a moment later. A seek cuts
short whatever read is waiting on the network, and FFmpeg kept that read's
failure where nothing cleared it. The next time the demuxer came to an end
of any kind the clip failed with "Playback failed.", a second or two after
the seek had worked. It took a seek in a clip still downloading, so large
phone videos were hit most. The interrupted read is forgotten now, and the
interrupt can no longer land on the very seek it was raised for. - A seek past the last picture finishes the clip instead of freezing it.
Dragging to the very end of any clip, or seeking into the missing part of a
cut-off upload, found no picture at or after the target, and the player
waited for one for as long as anyone watched. The last picture there is is
shown and the clip is over. A cut-off file keeps an index for the whole of
what it once was -- one in /test/ declares fifty seconds and holds thirteen
-- so a seek it sends off the end goes back to the last keyframe read
instead.
About
- Links to the website and the project. About links to neechan.pro in the
language the app is set to, to the privacy policy there, to the source on
GitHub and to the address to write to.