Skip to content

Instantly share code, notes, and snippets.

@zjx20
Last active May 31, 2024 23:24
Show Gist options
  • Save zjx20/25dff5a670ca55d8aba223f508691dfb to your computer and use it in GitHub Desktop.
Save zjx20/25dff5a670ca55d8aba223f508691dfb to your computer and use it in GitHub Desktop.
Convert v2ray config.json (client side) to a subscription content
#!/bin/bash
# brew install jq
# brew install qrencode
config_file=v2rayx*.json
rss_file=rss.txt
cat $config_file | \
jq --raw-output '
def cred:
"\(.settings.vnext[0].users[0].security):\(.settings.vnext[0].users[0].id)@\(.settings.vnext[0].address):\(.settings.vnext[0].port)"
;
def network:
if .streamSettings.network == "ws" then
"path=\(.streamSettings.wsSettings.path)&obfs=websocket&obfsParam=\(.streamSettings.tlsSettings.serverName)"
else
"obfs=none"
end
;
def tls:
if .streamSettings.security == "tls" then
"tls=1&peer=\(.streamSettings.tlsSettings.serverName)"
else
"tls=0"
end
;
def mux:
if .mux?.enabled? then "mux=1" else "mux=0" end
;
def alterid:
"\(.settings.vnext[0].users[0].alterId)"
;
.outbounds | map(select(.protocol == "vmess")) | .[] |
cred as $cred |
network as $network |
tls as $tls |
mux as $mux |
alterid as $alterid |
{ cred: $cred, remarks: .tag, network: $network, tls: $tls, mux: $mux, alterid: $alterid } |
.cred = @base64 "\(.cred)" | .remarks = @uri "\(.remarks)" |
"vmess://\(.cred)?remarks=\(.remarks)&\(.network)&\(.tls)&\(.mux)&alterId=\(.alterid)"' | \
base64 > $rss_file
# put $rss_file to somewhere, then your qr code for the subscribe link is
rss_url="https://yourserver/rss.txt"
qrencode -t ANSI $(echo "sub://$(echo "$rss_url" | base64)")
@zjx20
Copy link
Author

zjx20 commented Nov 3, 2022

@agn-7
I don't use both of them, but I found a URL example from here. It's a totally different format than the one used in this script, so it won't work. I do not intend to add support for that, you can try it yourself.

@agn-7
Copy link

agn-7 commented Nov 4, 2022

@zjx20
ooh, thanks. I didn't know there are different types of vmess URL !

@mulezic
Copy link

mulezic commented Feb 6, 2024

@zjx20
I would also love to know how to convert a JSON file to a URL, but the English of "base64 decode output file" is just way too much for me, I'm not an IT guy.

@zjx20
Copy link
Author

zjx20 commented Feb 6, 2024

@mulezic Sorry, I can't help you if you are not familiar with this IT stuff (e.g. shell scripts, base64 encoding, etc.). Maybe you can say more about what you're trying to do, and maybe it can be solved in a different way.

@mulezic
Copy link

mulezic commented Feb 6, 2024 via email

@zjx20
Copy link
Author

zjx20 commented Feb 7, 2024

@mulezic OK, I understand. You can tell me what server software or script you are using, what client you are planning to use, and also a sample json config (without sensitive information). I can help you determine the feasibility of the situation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment