diff --git a/README.md b/README.md
index 30efc5c..a28b504 100644
--- a/README.md
+++ b/README.md
@@ -10,3 +10,8 @@ python -m pip install requests
 
 python -m pip install pillow
 
+python -m pip install pillow-avif-plugin
+
+python -m pip install magika==0.6.1rc1
+
+
diff --git a/aecpic.py b/aecpic.py
index abaa4e2..62fb96d 100755
--- a/aecpic.py
+++ b/aecpic.py
@@ -6,6 +6,7 @@ get a picture at some url in use curl, then open new anvil window and set the pi
 author: moli
 '''
 
+import sys
 import os
 import subprocess
 import tempfile
@@ -13,54 +14,70 @@ import requests
 import json
 import mimetypes
 from PIL import Image
+import pillow_avif
 import argparse
+from magika import Magika
 
-def getSuffix(url):
+
+if 'ANVIL_API_PORT' not in os.environ:
+    print('not in Anvil.')
+    sys.exit(1)
+
+host = 'localhost'
+ANVIL_API_PORT = os.environ['ANVIL_API_PORT']
+ANVIL_API_SESS = os.environ['ANVIL_API_SESS']
+ANVIL_WIN_ID = os.environ['ANVIL_WIN_ID']
+
+def getSuffix(byts):
     '''
-    get the suffix in the url.
+    get the filetype in the byts, and change sufifix
     
-    >>> import apcpic
-    >>> apcpic.getSuffix('https://moli-green.xyz/img.webp')
-    '.webp'
     '''
-    mimetype = mimetypes.guess_type(url)
-    match mimetype:
-        case 'image/png', encoding:
+    m = Magika()
+    mr = m.identify_bytes(byts)
+    filetype = str(mr.output.label)
+
+    match filetype:
+        case 'png':
             return '.png'
-        case 'image/jpeg', encoding:
+        case 'jpeg':
             return '.jpeg'
-        case 'image/webp', encoding:
+        case 'webp':
             return '.webp'
-        case 'image/avif', encoding:
+        case 'mp4':
             return '.avif'
-        case 'image/gif', encoding:
+        case 'gif':
             return '.gif'
         case _:
-            raise RuntimeError('this image type not supported.')
+            raise RuntimeError(f'this image type not supported. {filetype}')
 
 def download(url):
     '''
     download the iamge file to the temporary file.
 
-    >>> import apcpic
-    >>> r = apcpic.download('https://moli-green.xyz/img.webp')
-    >>> if r != '':
-    ...     pass
+    >>> import aecpic
+    >>> n, t = aecpic.download('https://moli-green.xyz/img.webp')
+    >>> assert n != None and t == 'webp'
     '''
-    suffix = getSuffix(url)
-    filename = ''
+
+    cr = subprocess.run(['curl', url], capture_output = True)
+    if cr.returncode != 0:
+        raise RuntimeError('Downlad failed.')
+
+    suffix = getSuffix(cr.stdout)
+    filename = None
+
     with tempfile.NamedTemporaryFile(
             mode='wb',
             delete=False,
             suffix=suffix) as f:
-        r = subprocess.run(['curl', url], capture_output = True)
-        f.write(r.stdout)
+        f.write(cr.stdout)
         filename = f.name
     return filename
 
 def getPNG(url):
     '''
-    get PNG file path.
+    Download the file from the URL, convert and save to PNG format.
 
     >>> import apcpic
     >>> r = apcpic.getPNG('https://moli-green.xyz/img.webp')
@@ -79,6 +96,32 @@ def getPNG(url):
     img.save(png_filename)
     return png_filename
 
+def get_anvil_window():
+    '''
+    Get or create Anvil's window.
+    '''
+
+    global ANVIL_WIN_ID
+
+    if ANVIL_WIN_ID != '':
+        return ANVIL_WIN_ID
+    
+    h = {
+        'Anvil-Sess': ANVIL_API_SESS,
+        'Accept': 'application/json',
+	}
+
+    s = f'http://{host}:{int(ANVIL_API_PORT)}/wins'
+
+    r = requests.post(s, headers=h)
+
+    if r.status_code != requests.codes.ok:
+        raise RuntimeError(f'status code: {r.status_code}')
+    
+    ANVIL_WIN_ID = r.json()['Id']
+
+    return ANVIL_WIN_ID
+
 def anvil_Pic(host='localhost', url=None):
     '''
     Pic command send to Anvil.
@@ -86,20 +129,12 @@ def anvil_Pic(host='localhost', url=None):
     if not url:
         raise RuntimeError('not have url.')
 
-    if 'ANVIL_API_PORT' not in os.environ:
-        raise RuntimeError('not in Anvil')
-    
     filename = getPNG(url)
 
-    ANVIL_API_PORT = os.environ['ANVIL_API_PORT']
-    ANVIL_API_SESS = os.environ['ANVIL_API_SESS']
-    ANVIL_WIN_ID = os.environ['ANVIL_WIN_ID']
-
-    if ANVIL_WIN_ID == '':
-        raise RuntimeError('not on window.')
+    anvil_win_id = get_anvil_window()
 
     h = {
-		'Anvil-Sess': ANVIL_API_SESS,
+        'Anvil-Sess': ANVIL_API_SESS,
         'Accept': 'application/json',
 	}
    
@@ -122,5 +157,6 @@ if __name__ == '__main__':
     p.add_argument('--host', default='localhost', help='Hostname')
     p.add_argument('url', help='Image URL')
     arg = p.parse_args()
-    anvil_Pic(arg.host, arg.url)
+    host = arg.host
+    anvil_Pic(host, arg.url)