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)")
@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