Code Monkey home page Code Monkey logo

infinite-storage-glitch's Introduction

I was working on this instead of my finals, hope you appreciate it.

Buy Me A Coffee

Treat this less like the next dropbox and more like a "party trick" or a set of techniques to learn to pass data through compression. I do not endorse high volume use of this tool. I will also refrain from approving more commits to make the tool more convenient to use. There are several bugs that limit the use like the poor use of RAM limiting the size of files to about 100mb and they will remain. If you wish to fix these, you are on your own.

If Youtube sends me a Cease and Desist I'll gladly shut this down.

Infinite-Storage-Glitch

ezgif com-gif-maker

AKA ISG (written entirely in Rust my beloved) lets you embed files into video and upload them to youtube as storage.

This has been quite heavily inspired by suckerpinch's Harder Drive video and discord as a filesystem. Unfortunately no filesystem functionality as of right now.

Now, you might be asking yourself:

But is this against YouTube TOS ? Answer is: probably?

I don't speak legalese. Depending on the interpretation of "Autogenerated content that computers post without regard for quality or viewer experience" from community guidelines this could be a violation. The TOS also mention circumventing the service which this tool probably does. Use at your own risk. I don't advise using this tool for anything serious/large. YouTube might understandably get mad, even though the videos might be private. Treat this less like the next dropbox and more like a "party trick".

Installation

The source way (building from source with manually installing dependencies)

=== Please note: building from source takes a lot of CPU and RAM usage. ===
You need to have installed:

If having any issues also try installing:

If you want to or already have went through the hassle of installing Rust, you can git clone this repository, then cargo build --release. Cd to /target/release directory and run the program ./isg_4real.

The easiest way (Docker)

Trying to make anything work on other people's computers is a nightmare so I'll use docker from now on
Trend Oceans wrote a neat article on how to use this method as well.

  1. Install Docker if you haven't already.
  2. Clone this repository
  3. Change into the repository cd Infinite-Storage-Glitch
  4. Run docker build -t isg . to build the docker image.
  5. Run docker run -it --rm -v ${PWD}:/home/Infinite-Storage-Glitch isg cargo build --release to build the project.

That's it. You will find the executable in the target/release directory.

ℹī¸ Please Note: The binary will be a linux executable, so you will need to run it in a linux environment. If you do not have a linux environment, you can use WSL or run it using the docker container called isg we just built using a Linux shell or PowerShell:

docker run -it --rm -v ${PWD}:/home/Infinite-Storage-Glitch isg ./target/release/isg_4real

Note: If you are using cmd on Windows, you will need to use %cd% instead of ${PWD}.

How to use

  1. Archive to zip all the files you will be uploading
  2. Run the executable
  3. Use the embed option on the archive (THE VIDEO WILL BE SEVERAL TIMES LARGER THAN THE FILE, 4x in case of optimal compression resistance preset)
  4. Upload the video to your YouTube channel. You probably want to keep it up as unlisted
  5. Use the download option to get the video back
  6. Use the dislodge option to get your files back from the downloaded video
  7. PROFIT

2023-02-16_22-12

Demo

Flashing lights warning !!!1!1 - YouTube Link

Try to use the program on this video and find the files hidden inside.

No it's not just a rick roll.

Explanation 4 nerds

The principle behind this is pretty simple. All files are made of bytes and bytes can be interpreted as numbers ranging from 0-255. This number can be represented with pixels using one of two modes: RGB or binary.

RGB: The cooler mode. Every byte perfectly fits inside one of the colors of an rgb pixel. One rgb pixel can contain 3 bytes at a time. You just keep adding pixels like this until you run out of data. It is leagues more efficient and quick than binary.

Binary: Born from YouTube compression being absolutely brutal. RGB mode is very sensitive to compression as a change in even one point of one of the colors of one of the pixels dooms the file to corruption. Black and white pixels are a lot harder to mess up. Every pixel is either bright representing a 1 or dark representing a 0. We string these bits together to get bytes and continue until we run out of data.

Both of these modes can be corrupted by compression, so we need to increase the size of the pixels to make it less compressable. 2x2 blocks of pixels seem to be good enough in binary mode.

To make it easier on the user, we also include all the relevant settings used to create the video on the first frame of the video. This allows the program to know what mode the video is in and what size to use in order to avoid making the user remember.

Final comments

I appreciate any and all roasting of the code so I can improve.

Do what you want with the code, but credit would be much appreciated and if you have any trouble with ISG, please contact me over discord.

infinite-storage-glitch's People

Contributors

dvorakdwarf 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  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

infinite-storage-glitch's Issues

bypassing cloud providers data validation is a general problem for a while đŸ˜ē

Hey all 👋

It's great to see this repo! Awesome!

I detected this problem in 2013 (10 years now! 😮), when I authored the paper:
"Bypassing Cloud Providers' Data Validation to Store Arbitrary Data"

Available at:

The paper showed several techniques on how to bypass the "file validation engine" of several cloud providers (like Google, Twitter, etc) to store files (i.e., arbitrary data). The different techniques included files encoded within images, videos, audio (mp3), videos with QR code, etc., and uploaded to several Cloud providers. An actual evaluation was done back then. 😅

It's incredible to see that this "problem" STILL exists at scale and, as I expect, will remain for many many years to come. 😄 At that time I tried to contact some providers trying to help to detect this kind of stuff but, obviously, no answers.

I'm happy to a) discuss this further; and b) re-evaluate several cloud providers nowadays; if anyone is interested. ✌ī¸

IOT instruction (core dumped)

I get this error when trying to embed a file that is from an external hard drive (path : /media/...).

Do you know how to fix this ?

Thanks

Redundancy / error-correcting algorithm and benchmarks.

As you say in the readme, encoding bytes into colors is tricky as very prone to error due to youtube's compression. You also mentioned that you use 2*2 "blocks" to reduce compression issues.

Have you measured the loss (1*1 black and white, 2*2, RGB...) ?

I think we could implement some redundancy algorithm such as the Reed-Solomon algorithm (used in QR codes) to prevent data loss (I'm almost sure it would be better / more reliable than the 2*2 technique). We could then measure the impact in the different modes mentioned above, maybe with this addition RGB would be more profitable.

Also I think it would be interesting to figure out what is the impact of the video resolution, (is it better to have a long low-res video or a shorter high-res one to encode one file, in terms of data loss, read/write speeds ect.

This is an early reflection / public mind dump / start of a thread and I'd be happy to discuss about this with anyone susceptible of reading this :) I would then be happy to implement some of those features/tests.

Limited palette modes

For better data storage efficiency, it is better to use more than the binary color mode, but video compression means that full-color RGB mode is impossible to round-trip via YouTube. However, we could store fewer bits per pixel, while still being more than 1.

For example, one option could be to store one bit each per the red, green and blue channel, yielding a 1-bit RGB palette with 8 different options. Then, when reading, you can round the pixel values to the nearest of (0, 255) to get the 3 bits in a pixel. Based on my own experiments with Twitter, this scheme survives their JPEG compression, and I expect that it will probably also work for YouTube.

More generally, we could take a list that's 2^N entries in size, and each entry is an RGB color. The sender encodes each N bits by the corresponding color from the list, and the receiver rounds each acquired pixel to the closest color from that list (with the closeness being determined by a perceptual metric close to how the encoder does it).

The color list also needs to be communicated, and for this, one option would be to include some frames of black-and-white pixels that serve as a header.

Just charing my thoughts

This project example video made me remind that old fashion tv noise from the old TVs

like
https://www.youtube.com/watch?v=DH0BQtwEAsM

Based on your initial idea, it would be possible to expand it to, let's say, a video with the size of FullHD (1920×1080), where we know how many pixels are possible and where we can encode information on each pixel considering the RGB colors, so instead of black and white encoding we could have the full 256 colors to use.

Another place where a similar idea was used with optical fiber. Initially, we encoded/decoded the data using only one light spectrum. Later, we improve it on short distances to use multiple light spectrums (you can read it as colors of light) to increase data transfer bandwidth.

So, a FullHD has 1920×1080 = 2,073,600 pixels, encoding black/white, we have 2 possibilities, resulting in 4,147,200 possibilities per frame. Using the 256 colors results in 530,841,600 possibilities per frame, meaning that's more data stored per frame.

To go even crazier, a video could also have audio, which could be used to store data encoded on the sound wave for the audio generated.

Well, like I wrote in the title, I'm only sharing my thoughts based on what you did, and by the way, excellent work, congrats 👏

Other streaming services , discord etc

Just wondering if its possible to support them
For example discord have support for screen sharing
The idea is to use a virtual webcam that replay the video and the clients reads from the other end user screen

Audio too?

Seems like there's an additional storage medium here waiting to be explored in the audio tracks. Can surround sound be used for more individual tracks on a single video? I'd be interested in seeing just how much more data can be stored in the same amount of video.

Panic on an empty file

E.g touch file.txt.

Definitely not a serious issue, but perhaps what the user sees could be a bit more helpful than an indexing error.

Amazing !!! maybe a .exe?

wow, thanks for surprising the gitHub community with this project, at the time I write these lines of text, it is the #1 trending project on GitHub, I hope you can generate an .exe or at least a python version of this project :D

THX

MacOS Error: Bad CPU type in executable

Executing the release executable on MacOS gives bad CPU error.

Steps to reproduce:

  • chmod +x isg_4real
  • ./isg_4real
  • zsh: bad CPU type in executable: ./isg_4real

OS details:

Software:

    System Software Overview:

      System Version: macOS 13.2 (22D49)
      Kernel Version: Darwin 22.3.0
      Boot Volume: Macintosh HD
      Boot Mode: Normal
      Secure Virtual Memory: Enabled
      System Integrity Protection: Enabled
      Time since boot: 55 minutes, 56 seconds

Hardware:

    Hardware Overview:

      Model Name: MacBook Pro
      Model Identifier: MacBookPro15,1
      Processor Name: 8-Core Intel Core i9
      Processor Speed: 2.3 GHz
      Number of Processors: 1
      Total Number of Cores: 8
      L2 Cache (per Core): 256 KB
      L3 Cache: 16 MB
      Hyper-Threading Technology: Enabled
      Memory: 16 GB
      System Firmware Version: 1916.80.2.0.0 (iBridge: 20.16.3045.0.0,0)
      OS Loader Version: 564.40.4~66
      Activation Lock Status: Disabled

Split video

For Services which have Limit in file size. E.G. Instagram and Twitter?

Multithread Support

I compiled it for macOS and I mean it is pretty quick, but could there be some multithread support be added to speed up things?
Screenshot 2023-02-25 at 00 09 50

Large files. Run away memory.

When trying to encode larger files it seems the ram usage continually increases until the computer locks up and the program eventually crashes. Would it be possible to handle larger files by writing the output frames in specified chunk sizes appending them to the end file?

Test file : archlinux-2023.02.01-x86_64.iso

System Details:
Kernel: 6.1.12-arch1-1 arch: x86_64 bits: 64
RAM: 64 GiB

Otherwise this is amazing! And it seems others have already made the same suggestions I was thinking of.
Keep up the excellent work!

Forward error correction

Just musing over the idea of combining this awesome storage solution with an error correcting code (RS, turbo, ldpc, etc.) to combat possible corruption due to compression.

To keep to the unix philosophy, one could also use a separate tool for it. Do you know any good ones?

Cheers!

Complining error in windows

So i am trying to get the .exe file i and getting this error
error: failed to run custom build command for opencv v0.75.0

Caused by:
process didn't exit successfully: C:\GitHub\Infinite-Storage-Glitch\target\release\build\opencv-3a11ccf03cafbefc\build-script-build (exit code: 1)
--- stdout
=== Running: "\\?\C:\ProgramData\chocolatey\lib\rust\tools\bin\cargo.exe" "build" "--release" "--package" "opencv-binding-generator" "--bin" "binding-generator"
cargo:rerun-if-env-changed=OPENCV4_NO_PKG_CONFIG
cargo:rerun-if-env-changed=PKG_CONFIG_x86_64-pc-windows-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_x86_64_pc_windows_gnu
cargo:rerun-if-env-changed=HOST_PKG_CONFIG
cargo:rerun-if-env-changed=PKG_CONFIG
cargo:rerun-if-env-changed=OPENCV4_STATIC
cargo:rerun-if-env-changed=OPENCV4_DYNAMIC
cargo:rerun-if-env-changed=PKG_CONFIG_ALL_STATIC
cargo:rerun-if-env-changed=PKG_CONFIG_ALL_DYNAMIC
cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64-pc-windows-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64_pc_windows_gnu
cargo:rerun-if-env-changed=HOST_PKG_CONFIG_PATH
cargo:rerun-if-env-changed=PKG_CONFIG_PATH
cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64-pc-windows-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64_pc_windows_gnu
cargo:rerun-if-env-changed=HOST_PKG_CONFIG_LIBDIR
cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64-pc-windows-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64_pc_windows_gnu
cargo:rerun-if-env-changed=HOST_PKG_CONFIG_SYSROOT_DIR
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR
cargo:rerun-if-env-changed=OPENCV_NO_PKG_CONFIG
cargo:rerun-if-env-changed=PKG_CONFIG_x86_64-pc-windows-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_x86_64_pc_windows_gnu
cargo:rerun-if-env-changed=HOST_PKG_CONFIG
cargo:rerun-if-env-changed=PKG_CONFIG
cargo:rerun-if-env-changed=OPENCV_STATIC
cargo:rerun-if-env-changed=OPENCV_DYNAMIC
cargo:rerun-if-env-changed=PKG_CONFIG_ALL_STATIC
cargo:rerun-if-env-changed=PKG_CONFIG_ALL_DYNAMIC
cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64-pc-windows-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64_pc_windows_gnu
cargo:rerun-if-env-changed=HOST_PKG_CONFIG_PATH
cargo:rerun-if-env-changed=PKG_CONFIG_PATH
cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64-pc-windows-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64_pc_windows_gnu
cargo:rerun-if-env-changed=HOST_PKG_CONFIG_LIBDIR
cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64-pc-windows-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64_pc_windows_gnu
cargo:rerun-if-env-changed=HOST_PKG_CONFIG_SYSROOT_DIR
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR

--- stderr
=== Using environment job server with the the amount of available jobs: 13
=== Crate version: Some("0.75.0")
=== Environment configuration:
=== OPENCV_PACKAGE_NAME = None
=== OPENCV_PKGCONFIG_NAME = None
=== OPENCV_CMAKE_NAME = None
=== OPENCV_CMAKE_BIN = None
=== OPENCV_VCPKG_NAME = None
=== OPENCV_LINK_LIBS = None
=== OPENCV_LINK_PATHS = None
=== OPENCV_INCLUDE_PATHS = None
=== OPENCV_DISABLE_PROBES = None
=== CMAKE_PREFIX_PATH = None
=== OpenCV_DIR = Some("C:\opencv\build\x64\vc15")
=== PKG_CONFIG_PATH = None
=== VCPKG_ROOT = None
=== VCPKGRS_DYNAMIC = None
=== PATH = Some("C:\GitHub\Infinite-Storage-Glitch\target\release\deps;C:\GitHub\Infinite-Storage-Glitch\target\release;C:\ProgramData\chocolatey\lib\rust\tools\lib\rustlib\x86_64-pc-windows-gnu\lib;C:\Program Files\WindowsApps\Microsoft.PowerShell_7.3.2.0_x64__8wekyb3d8bbwe;C:\Program Files\Oculus\Support\oculus-runtime;C:\Program Files (x86)\Razer Chroma SDK\bin;C:\Program Files\Razer Chroma SDK\bin;C:\Program Files\Python311\Scripts\;C:\Program Files\Python311\;C:\Program Files\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Razer\ChromaBroadcast\bin;C:\Program Files\Razer\ChromaBroadcast\bin;C:\Users\Christian\AppData\Local\Programs\Python\Python39\Scripts\;C:\Users\Christian\AppData\Local\Programs\Python\Python39\;C:\Program Files\Python310\Scripts\;C:\Program Files\Python310\;C:\Program Files (x86)\Common Files\Intel\Shared Libraries\redist\intel64\compiler;G:\Users\Christian\AppData\Local\Programs\Python\Python39\Scripts;G:\Users\Christian\AppData\Local\Programs\Python\Python39;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Windows\System32\OpenSSH;C:\ProgramData\chocolatey\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\dotnet\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files (x86)\FFAIO\bin;C:\Users\Christian\AppData\Local\Microsoft\WindowsApps;C:\Users\Christian\AppData\Roaming\npm;C:\Users\Christian\.dotnet\tools;C:\Users\Christian\AppData\Local\GitHubDesktop\bin;C:\Users\Christian\AppData\Local\Programs\Fiddler;C:\Users\Christian\AppData\Local\Programs\Microsoft VS Code\bin;C:\Program Files\PowerShell\7\;C:\Windows\system32\config\systemprofile\AppData\Local\Microsoft\WindowsApps;C:\Program Files\Microsoft SQL Server\150\Tools\Binn\;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\;C:\Program Files\Git\cmd;C:\Program Files\LLVM\bin;C:\msys64\mingw64\bin;C:\opencv\opencv\build\x64\vc15\bin;C:\Users\Christian\.cargo\bin;C:\opencv\build\x64\vc15\bin;C:\zlib")
=== Enabled features:
=== ALPHAMAT
=== ARUCO
=== ARUCO_DETECTOR
=== BARCODE
=== BGSEGM
=== BIOINSPIRED
=== CALIB3D
=== CCALIB
=== CUDAARITHM
=== CUDABGSEGM
=== CUDACODEC
=== CUDAFEATURES2D
=== CUDAFILTERS
=== CUDAIMGPROC
=== CUDAOBJDETECT
=== CUDAOPTFLOW
=== CUDASTEREO
=== CUDAWARPING
=== CVV
=== DEFAULT
=== DNN
=== DNN_SUPERRES
=== DPM
=== FACE
=== FEATURES2D
=== FLANN
=== FREETYPE
=== FUZZY
=== GAPI
=== HDF
=== HFS
=== HIGHGUI
=== IMGCODECS
=== IMGPROC
=== IMG_HASH
=== INTENSITY_TRANSFORM
=== LINE_DESCRIPTOR
=== MCC
=== ML
=== OBJDETECT
=== OPTFLOW
=== OVIS
=== PHASE_UNWRAPPING
=== PHOTO
=== PLOT
=== QUALITY
=== RAPID
=== RGBD
=== SALIENCY
=== SFM
=== SHAPE
=== STEREO
=== STITCHING
=== STRUCTURED_LIGHT
=== SUPERRES
=== SURFACE_MATCHING
=== TEXT
=== TRACKING
=== VIDEO
=== VIDEOIO
=== VIDEOSTAB
=== VIZ
=== WECHAT_QRCODE
=== XFEATURES2D
=== XIMGPROC
=== XOBJDETECT
=== XPHOTO
=== Detected probe priority based on environment vars: pkg_config: false, cmake: true, vcpkg: true
=== Probing the OpenCV library in the following order: environment, cmake, vcpkg_cmake, vcpkg, pkg_config
=== Can't probe using: environment, continuing with other methods because: Some environment variables are missing
=== Probing OpenCV library using cmake
=== cmake ninja probe command: "cmake" "-S" "C:\Users\Christian\.cargo\registry\src\github.com-1ecc6299db9ec823\opencv-0.75.0\cmake" "-DOCVRS_PACKAGE_NAME=OpenCV" "-DCMAKE_BUILD_TYPE=Release" "-G" "Ninja"
=== Probing with cmake ninja generator failed, will try Makefile generator, error: program not found
=== cmake makefiles probe command: "cmake" "-S" "C:\Users\Christian\.cargo\registry\src\github.com-1ecc6299db9ec823\opencv-0.75.0\cmake" "-DOCVRS_PACKAGE_NAME=OpenCV" "-DCMAKE_BUILD_TYPE=Release" "-G" "Unix Makefiles"
=== Probing with cmake Makefile generator failed, will try deprecated find_package, error: program not found
=== cmake find-package compile probe command: "cmake" "-S" "C:\Users\Christian\.cargo\registry\src\github.com-1ecc6299db9ec823\opencv-0.75.0\cmake" "-DOCVRS_PACKAGE_NAME=OpenCV" "-DCMAKE_BUILD_TYPE=Release" "--find-package" "-DCOMPILER_ID=GNU" "-DLANGUAGE=CXX" "-DMODE=COMPILE" "-DNAME=OpenCV"
=== Can't probe using: cmake, continuing with other methods because: program not found
=== Probing OpenCV library using vcpkg_cmake
=== Discovered vcpkg root: C:\vcpkg
=== Probing OpenCV library using cmake with toolchain: C:\vcpkg\scripts/buildsystems/vcpkg.cmake
=== cmake ninja probe command: "cmake" "-S" "C:\Users\Christian\.cargo\registry\src\github.com-1ecc6299db9ec823\opencv-0.75.0\cmake" "-DOCVRS_PACKAGE_NAME=OpenCV" "-DCMAKE_TOOLCHAIN_FILE=C:\vcpkg\scripts/buildsystems/vcpkg.cmake" "-DCMAKE_BUILD_TYPE=Release" "-G" "Ninja"
=== Probing with cmake ninja generator failed, will try Makefile generator, error: program not found
=== cmake makefiles probe command: "cmake" "-S" "C:\Users\Christian\.cargo\registry\src\github.com-1ecc6299db9ec823\opencv-0.75.0\cmake" "-DOCVRS_PACKAGE_NAME=OpenCV" "-DCMAKE_TOOLCHAIN_FILE=C:\vcpkg\scripts/buildsystems/vcpkg.cmake" "-DCMAKE_BUILD_TYPE=Release" "-G" "Unix Makefiles"
=== Probing with cmake Makefile generator failed, will try deprecated find_package, error: program not found
=== cmake find-package compile probe command: "cmake" "-S" "C:\Users\Christian\.cargo\registry\src\github.com-1ecc6299db9ec823\opencv-0.75.0\cmake" "-DOCVRS_PACKAGE_NAME=OpenCV" "-DCMAKE_TOOLCHAIN_FILE=C:\vcpkg\scripts/buildsystems/vcpkg.cmake" "-DCMAKE_BUILD_TYPE=Release" "--find-package" "-DCOMPILER_ID=GNU" "-DLANGUAGE=CXX" "-DMODE=COMPILE" "-DNAME=OpenCV"
=== Can't probe using: vcpkg_cmake, continuing with other methods because: program not found
=== Probing OpenCV library using vcpkg
=== Can't probe using: vcpkg, continuing with other methods because: the vcpkg-rs Vcpkg build helper can only find libraries built for the MSVC ABI., the vcpkg-rs Vcpkg build helper can only find libraries built for the MSVC ABI.
=== Probing OpenCV library using pkg_config
=== Can't probe using: pkg_config, continuing with other methods because: "pkg-config" "--libs" "--cflags" "opencv4" did not exit successfully: exit code: 1
error: could not find system library 'opencv4' required by the 'opencv' crate

--- stderr
Package opencv4 was not found in the pkg-config search path.
Perhaps you should add the directory containing opencv4.pc' to the PKG_CONFIG_PATH environment variable No package 'opencv4' found , "pkg-config" "--libs" "--cflags" "opencv"` did not exit successfully: exit code: 1
error: could not find system library 'opencv' required by the 'opencv' crate

--- stderr
Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found

Error: "Failed to find installed OpenCV package using probes: environment, cmake, vcpkg_cmake, vcpkg, pkg_config, refer to https://github.com/twistedfall/opencv-rust#getting-opencv for help"

need a color video to increase compression

there is not enough data in black and white video, color video is needed to increase compression. use only 16 colors so that it will be possible to accurately recognize them later when pinching

Decrease the filesize by using RGB?

Making use of RGB should decrease the Overall file size, as there is more information stored in the file.

#00000 - #FFFFF
This range makes use of more than two colors codes.

Translate the binary directly to RGB patterns.

Should be somehow possible.

The precompiled executable is ARM?

Am i missing something here or the provided executable is arm64 instead of x86_64?

$ ./isg_4real.v1.0.0
bash: ./isg_4real.v1.0.0: cannot execute binary file: Exec format error

$ file isg_4real.v1.0.0
isg_4real.v1.0.0: Mach-O 64-bit arm64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|BINDS_TO_WEAK|PIE|HAS_TLV_DESCRIPTORS>

$ uname -m
x86_64

Source Built Binaries OS error on wsl

Hey, i Built the binaries from the source on my wsl and the binary was executable though i get this error when i try to use the embed test file from the src dir.

Pick what you want to do with the program Embed
What is the path to your file ? src/tests/test.txt

{/* I dont think this output is default. When i specify path i get this */}

I couldn't figure out a weird bug that happens if you set the size to something that isn't a factor of the height
If you don't want the files you put in to come out as the audio/visual equivalent of a pipe bomb, account for the above bug

You can use one of the existing presets or custom settings Maximum efficiency
Error: No such file or directory (os error 2)

Unable to build the docker image

The following is the error I get when I try to build dockerimage

11 178.5   === Detected probe priority based on environment vars: pkg_config: false, cmake: false, vcpkg: false
#11 178.5   === Probing the OpenCV library in the following order: environment, pkg_config, cmake, vcpkg_cmake, vcpkg
#11 178.5   === Can't probe using: environment, continuing with other methods because: Some environment variables are missing
#11 178.5   === Probing OpenCV library using pkg_config
#11 178.5   === Can't probe using: pkg_config, continuing with other methods because: `"pkg-config" "--libs" "--cflags" "opencv4"` did not exit successfully: exit status: 1
#11 178.5   error: could not find system library 'opencv4' required by the 'opencv' crate
#11 178.5 
#11 178.5   --- stderr
#11 178.5   Package opencv4 was not found in the pkg-config search path.
#11 178.5   Perhaps you should add the directory containing `opencv4.pc'
#11 178.5   to the PKG_CONFIG_PATH environment variable
#11 178.5   No package 'opencv4' found
#11 178.5   , `"pkg-config" "--libs" "--cflags" "opencv"` did not exit successfully: exit status: 1
#11 178.5   error: could not find system library 'opencv' required by the 'opencv' crate
#11 178.5 
#11 178.5   --- stderr
#11 178.5   Package opencv was not found in the pkg-config search path.
#11 178.5   Perhaps you should add the directory containing `opencv.pc'
#11 178.5   to the PKG_CONFIG_PATH environment variable
#11 178.5   No package 'opencv' found
#11 178.5 
#11 178.5   === Probing OpenCV library using cmake
#11 178.5   === cmake ninja probe command: "cmake" "-S" "/usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/opencv-0.75.0/cmake" "-DOCVRS_PACKAGE_NAME=OpenCV" "-DCMAKE_BUILD_TYPE=Release" "-G" "Ninja"
#11 178.5   === Probing with cmake ninja generator failed, will try Makefile generator, error: No such file or directory (os error 2)
#11 178.5   === cmake makefiles probe command: "cmake" "-S" "/usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/opencv-0.75.0/cmake" "-DOCVRS_PACKAGE_NAME=OpenCV" "-DCMAKE_BUILD_TYPE=Release" "-G" "Unix Makefiles"
#11 178.5   === Probing with cmake Makefile generator failed, will try deprecated find_package, error: No such file or directory (os error 2)
#11 178.5   === cmake find-package compile probe command: "cmake" "-S" "/usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/opencv-0.75.0/cmake" "-DOCVRS_PACKAGE_NAME=OpenCV" "-DCMAKE_BUILD_TYPE=Release" "--find-package" "-DCOMPILER_ID=GNU" "-DLANGUAGE=CXX" "-DMODE=COMPILE" "-DNAME=OpenCV"
#11 178.5   === Can't probe using: cmake, continuing with other methods because: No such file or directory (os error 2)
#11 178.5   === Probing OpenCV library using vcpkg_cmake
#11 178.5   === Can't probe using: vcpkg_cmake, continuing with other methods because: Could not find Vcpkg tree: No vcpkg installation found. Set the VCPKG_ROOT environment variable or run 'vcpkg integrate install'
#11 178.5   === Probing OpenCV library using vcpkg
#11 178.5   === Can't probe using: vcpkg, continuing with other methods because: Could not find Vcpkg tree: No vcpkg installation found. Set the VCPKG_ROOT environment variable or run 'vcpkg integrate install', Could not find Vcpkg tree: No vcpkg installation found. Set the VCPKG_ROOT environment variable or run 'vcpkg integrate install'
#11 178.5   Error: "Failed to find installed OpenCV package using probes: environment, pkg_config, cmake, vcpkg_cmake, vcpkg, refer to https://github.com/twistedfall/opencv-rust#getting-opencv for help"
#11 178.5 warning: build failed, waiting for other jobs to finish...
------
executor failed running [/bin/sh -c cargo build --release]: exit code: 101

Bypass YT Sanctions

It is very likely that YT will do something about it. Therefore, you could put a bit pattern over a normal video. Therefore, it is very difficult to detect this bit pattern without knowing the algorithm. The length of the video could then be adjusted dynamically. Of course, the overhead is significantly larger. But maybe it is possible to "overlay" several bit patterns. I would also find it exciting to automatically synchronize these videos with YT via a client.

Could not open codec 'png': Unspecified error

Compiled from scretch on amd64. Following error occures:

Bytes ripped succesfully
Byte length: 311
Binary ripped succesfully
[src/etcher.rs:359] final_frame = 1
Etching frame ended in 664us
Instructions written
Etching frame ended in 1914us
Embedding thread complete!
[png @ 0x560d527d6140] Specified pixel format yuv420p is invalid or not supported
Could not open codec 'png': Unspecified error
Video embedded succesfully at output.avi
Etching video ended in 4049us

No video is created. Any help on this error?

Text file busy (os error 26) when trying to download a video

I am on a M1 mac and have tried it according to instructions with docker. however, always comes this error:

docker run -it --rm -v ${PWD}:/home/Infinite-Storage-Glitch isg ./target/release/isg_4real
Welcome to ISG (Infinite Storage Glitch)
This tool allows you to turn any file into a compression-resistant video that can be uploaded to YouTube for Infinite Storage:tm:

How to use:
1. Zip all the files you will be uploading
2. Use the embed option on the archive (THE VIDEO WILL BE SEVERAL TIMES LARGER THAN THE FILE, 4x in case of optimal compression resistance preset)
3. Upload the video to your YouTube channel. You probably want to keep it up as unlisted
4. Use the download option to get the video back
5. Use the dislodge option to get your files back from the downloaded video
6. PROFIT

> Pick what you want to do with the program Download
> What is the url to the video ? https://youtu.be/8I4fd_Sap-g
Starting the download, there is no progress bar
Error: io error: Text file busy (os error 26)

Caused by:
    Text file busy (os error 26)

why use ISG

I understand that youtube is a great way to store videos in the cloud, but why convert before uploading them?

Create a file system driver for the storage?

For your next project, you might want to consider writing a file system driver where user could store / fetch files to and from a virtual file system which is backed by YouTube. Use playlists as file index or something like that :)

thread 'main' panicked at 'attempt to calculate the remainder with a divisor of zero'

Pick what you want to do with the program Dislodge
What is the path to your video ? output [DcdKfmpmPwA].mp4
Where should the output go ? test.zip
Dislodging frame ended in 17ms
thread 'main' panicked at 'attempt to calculate the remainder with a divisor of zero', src/embedsource.rs:47:29
note: run with RUST_BACKTRACE=1 environment variable to display a backtrace
Dislodging frame ended in 54ms

I am wondering if this is because I did not give YT enough time to render SD/HD?

Live stream support?

A way to encode data into video doesn't need to be used only for storing data; you can also use this for transferring data.

If you encode the frames into a live stream, instead of a file, then you're broadcasting the contents of that file over the live stream.
This could be useful for sending files that you don't need to keep permanent record of, or if you want to control when the file can be acquired.

The sender program would create frames, which are sent to a live video ingest server, and then rebroadcast to receiver clients, which connect to the livestream in order to download the file.

In order to deal with compression issues, which are even more severe in livestreams, a back channel (for example using chat) is needed. Receivers would say in chat when they've missed a piece of the data, and the sender would aggregate this info in order to decide what frames to send next -- for example, should it continue sending the next part of the file, or retransmit the previous one to make sure everyone received it; or, should it decrease the information density of the video to minimize losses, or increase it when the clients are receiving it well. In addition, the different clients could talk to each other in the chat, for example telling each other about the pieces they have and repeating them if someone missed them.

This requires a very big refactor to break apart the functionality of producing frames, encoding them, and saving them into separate pieces of code. In addition, whenever peer-to-peer communication is involved, everything gets much more complicated. For this reason, this is a low-priority task for now.

Similarity to Data2QR

Hey I just found out about this project and found it funny how it is a bit similar to a project I made back in a while (https://github.com/Myzel394/DataToQR).

We both had the idea to use Google's unlimited video storage functionality to store data in a different format to get unlimited storage :D

However, I think your project is far better as it uses Rust and transforms the input way better than mine project does.

Insert keyframes for each change in data frame?

I'm going to start with defining two similar terms to reduce confusion

  • Frame: A single frame of video in the video stream
  • Data frame: A single unique frame of data representing a portion of the encoded file

This issue is written under the assumption that there are multiple frames in the video stream representing the same data frame.

In video encoding there's the concept of keyframes which is kind of where it "resets" the frame. Sometimes you'll notice a video stream gets super messed up, with weird blocky artifacts, and then it cleans up, almost like it's on some interval. That interval is when the stream reaches a keyframe.

I'm not sure if YouTube will actually respect the source video's keyframes, but if it does, we could enhance the quality of each unique data frame by dropping a keyframe each time a unique data frame is shown in the video stream.

Video size would definitely go up, but compression artifacts for each data frame would go down significantly

Support Storing the Files as Audio

Supporting audio storage will increase the data that would be able to be stored. You should also be able to export encoded videos with encoded audio.

How do you handle frame sequence randomness

I have quite a lot of experience with processing video as image sequence. Also coding experience as far as ffmpeg or individual codecs. When decoding a video, the video decoder e.g. inside ffmpeg can arbitrarily drop a frame based on HW, OS, or codec version. This is not noticable when watching a video, but would totally destroy this algorithm if not worked around. How do you achieve that a frame is not dropped, do you for example replicate the data in multiple frames? Or do you know a codec which assures the frame presentation order,

Implement 360 Degree Youtube Videos

Implement 360 Degree Youtube Videos? I don't know how this would work or even if it would. This would allow the storage of much more data.

Arch Linux: building executable yields libclang error and downloading+running executable yields Exec format error

Building executable yields libclang error and downloading+running executable yields Exec format error

Build fail:
=== Using OpenCV headers from: /usr/include/opencv4
thread 'main' panicked at 'Cannot initialize clang: "couldn't find any valid shared libraries matching: ['libclang.so', 'libclang-.so', 'libclang.so.', 'libclang-.so.'], set the LIBCLANG_PATH environment variable to a path where one of these files can be found (invalid: [])"', /home/host/.cargo/registry/src/github.com-1ecc6299db9ec823/opencv-0.75.0/build/generator.rs:75:37
note: run with RUST_BACKTRACE=1 environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...

Executable fail:

[host@kingston ~]$ ./isg_4real.v1.0.0
-bash: ./isg_4real.v1.0.0: cannot execute binary file: Exec format error

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.