| import gradio as gr |
| import requests |
| import json |
| import os |
| from PIL import Image |
| import moviepy.video.io.ImageSequenceClip as ic |
| from pathlib import Path |
| import bs4 |
| import datetime |
| import urllib.request |
| import uuid |
| import base64 |
| import os |
|
|
| main_directory = "https://services.swpc.noaa.gov/" |
| sdo_source = "https://sdo.gsfc.nasa.gov/assets/img/browse/" |
| sdo_source_format = "https://sdo.gsfc.nasa.gov/assets/img/browse/YEAR/MONTH/DAY/DATE_IDENT_SIZE_TOOL.jpg" |
|
|
| comp_list=[ |
| "https://services.swpc.noaa.gov/images/geospace/geospace_1_day.png", |
| "https://services.swpc.noaa.gov/images/ace-epam-24-hour.gif", |
| "https://services.swpc.noaa.gov/images/ace-epam-e-24-hour.gif", |
| "https://services.swpc.noaa.gov/images/ace-epam-p-24-hour.gif", |
| "https://services.swpc.noaa.gov/images/ace-mag-24-hour.gif", |
| "https://services.swpc.noaa.gov/images/ace-mag-swepam-24-hour.gif", |
| "https://services.swpc.noaa.gov/images/ace-sis-24-hour.gif", |
| "https://services.swpc.noaa.gov/images/boulder-magnetometer.png", |
| "https://services.swpc.noaa.gov/images/seaesrt-time-series-270.png", |
| "https://services.swpc.noaa.gov/images/station-k-index.png", |
| "https://services.swpc.noaa.gov/images/notifications-timeline.png", |
| ] |
|
|
| sdo_aia_latest=[ |
| {"name":"Fe18 94A", "source":"https://umbra.nascom.nasa.gov/images/latest_aia_94.gif"}, |
| {"name":"Fe20 131A", "source":"https://umbra.nascom.nasa.gov/images/latest_aia_131.gif"}, |
| {"name":"Fe9/10 171A", "source":"https://umbra.nascom.nasa.gov/images/latest_aia_171.gif"}, |
| {"name":"Fe12 193A", "source":"https://umbra.nascom.nasa.gov/images/latest_aia_193.gif"}, |
| {"name":"Fe14 211A", "source":"https://umbra.nascom.nasa.gov/images/latest_aia_211.gif"}, |
| {"name":"He2 304A", "source":"https://umbra.nascom.nasa.gov/images/latest_aia_304.gif"}, |
| {"name":"Fe16 335A", "source":"https://umbra.nascom.nasa.gov/images/latest_aia_335.gif"}, |
| {"name":"cont+C4 1600A", "source":"https://umbra.nascom.nasa.gov/images/latest_aia_1600.gif"}, |
| {"name":"continuum 1700A", "source":"https://umbra.nascom.nasa.gov/images/latest_aia_1700.gif"}, |
| {"name":"continuum 4500A", "source":"https://umbra.nascom.nasa.gov/images/latest_aia_4500.gif"}, |
| ] |
|
|
| nasa_images=[ |
| {"name":"EIT 171A", "source":"https://soho.nascom.nasa.gov/data/realtime/eit_171/512/latest.jpg"}, |
| {"name":"EIT 195A", "source":"https://soho.nascom.nasa.gov/data/realtime/eit_195/512/latest.jpg"}, |
| {"name":"EIT 284A", "source":"https://soho.nascom.nasa.gov/data/realtime/eit_284/512/latest.jpg"}, |
| {"name":"EIT 304A", "source":"https://soho.nascom.nasa.gov/data/realtime/eit_304/512/latest.jpg"}, |
| ] |
|
|
| nasa_soho_gifs=[ |
| {"name":"EIT 304A", "source":"https://soho.nascom.nasa.gov/data/LATEST/current_eit_304small.gif"}, |
| {"name":"EIT 195A", "source":"https://soho.nascom.nasa.gov/data/LATEST/current_eit_195small.gif"}, |
| {"name":"EIT 171A", "source":"https://soho.nascom.nasa.gov/data/LATEST/current_eit_171small.gif"}, |
| {"name":"EIT 284A", "source":"https://soho.nascom.nasa.gov/data/LATEST/current_eit_284small.gif"}, |
| ] |
| nasa_soho_mp4=[ |
| {"name":"EIT 171A", "source":"https://soho.nascom.nasa.gov/data/LATEST/current_eit_171small.mp4"}, |
| {"name":"EIT 195A", "source":"https://soho.nascom.nasa.gov/data/LATEST/current_eit_195small.mp4"}, |
| {"name":"EIT 284A", "source":"https://soho.nascom.nasa.gov/data/LATEST/current_eit_284small.mp4"}, |
| {"name":"EIT 304A", "source":"https://soho.nascom.nasa.gov/data/LATEST/current_eit_304small.mp4"}, |
| {"name":"LASCO C2", "source":"https://soho.nascom.nasa.gov/data/LATEST/current_c2small.mp4"}, |
| {"name":"LASCO C3", "source":"https://soho.nascom.nasa.gov/data/LATEST/current_c3small.mp4"}, |
| {"name":"SDO/HMI Continuum", "source":"https://soho.nascom.nasa.gov/data/LATEST/current_hmi_igr-512.mp4"}, |
| {"name":"SDO/HMI Magnetogram", "source":"https://soho.nascom.nasa.gov/data/LATEST/current_hmi_mag-512.mp4"}, |
| ] |
|
|
| sdo_obj = ["HMIB","HMIBC","HMIIC","HMIIF","HMID","HMII","HMI171", |
| "0094","0131","0171","0193","0211", |
| "0304","0335","1600","1700","4500", |
| "211193171","211193171n","211193171rg", |
| "094335193","304211171"] |
| sdo_size= [256,512,1024,2048,4096] |
| month_dict={"01":31,"02":28,"03":31,"04":30,"05":31,"06":30,"07":31,"08":31,"09":30,"10":31,"11":30,"12":31} |
| html = """ |
| <div> |
| PAGE_LINK |
| </div> |
| """ |
| css=""" |
| .img_box{ |
| display: flex; |
| flex-direction: column; |
| flex-flow: unset; |
| flex-wrap: wrap; |
| justify-content: space-around; |
| } |
| .img_class{ |
| background: #ffffff; |
| max-width: 48%; |
| font-family: monospace; |
| border-top: #9300ff; |
| border-style: inset; |
| margin-top: 5px; |
| } |
| .img_class_raw{ |
| background: #ffffff; |
| width: 100%; |
| font-family: monospace; |
| border-top: #9300ff; |
| border-style: inset; |
| margin-top: 5px; |
| display:flex; |
| flex-direction:column; |
| } |
| .img_box_soho{ |
| display: flex; |
| flex-direction: row; |
| flex-wrap: wrap; |
| justify-content: space-between; |
| } |
| .img_class_soho{ |
| background: #ffffff; |
| font-family: monospace; |
| border-top: #9300ff; |
| border-style: inset; |
| margin-top: 5px; |
| max-width: 48%; |
| } |
| .img_class_sdo{ |
| background: #ffffff; |
| font-family: monospace; |
| border-top: #9300ff; |
| border-style: inset; |
| margin-top: 5px; |
| max-width: 25%; |
| font-size: small; |
| } |
| """ |
| def load_json(url1="",url2="",url3="",url4="",url5="",url6="",url7="",url8=""): |
| get_url=f'{main_directory}{url1}{url2}{url3}{url4}{url5}{url6}{url7}{url8}' |
| get_url=get_url.split("None")[0] |
| get_url=get_url.split("[]")[0] |
|
|
| if get_url.endswith('.json'): |
| feed1 = requests.get(get_url) |
| return None, feed1.text |
| elif get_url.endswith(".png") or get_url.endswith(".gif") or get_url.endswith(".jpg"): |
| html_out=f"<style>{css}</style><div>" |
| html_out+=f'<div class="img_class_raw"><a href="{get_url}" target="_blank">{get_url}</a><br><img src={get_url}></div></div>' |
| return html_out, None |
| return None,None |
|
|
| def make_tree(url1="",url2="",url3="",url4="",url5="",url6="",url7="",url8=""): |
| link_box=[] |
| html_out="" |
| get_url=f'{main_directory}{url1}{url2}{url3}{url4}{url5}{url6}{url7}{url8}' |
| if not get_url.endswith('.json'): |
| feed1 = requests.get(get_url) |
| spl = feed1.text.split("href=") |
| for line in spl: |
| spl2 = line.split(">")[0] |
| if spl2.endswith('/"') or spl2.endswith('.json"') or spl2.endswith('.png"') or spl2.endswith('.gif"') or spl2.endswith('.jpg"'): |
| fin=line.split(">")[0].strip('""') |
| link_box.append(fin) |
| return gr.update(choices=[l for l in link_box],interactive=True) |
| else: |
| return None |
|
|
| def get_images(): |
| html_out=f"<style>{css}</style><div class='img_box'>" |
| get_url=f'{main_directory}images/geospace/' |
| feed1 = requests.get(get_url) |
| spl = feed1.text.split("href=") |
| for line in spl: |
| spl2 = line.split(">")[0].strip('""') |
| if spl2.endswith(".png") or spl2.endswith(".gif") or spl2.endswith(".jpg"): |
| html_out+=f'<div class="img_class"><a href="{get_url}{spl2}" target="_blank">{spl2}</a><br><img src={get_url}{spl2}></div>' |
| get_url2=f'{main_directory}images/' |
| feed2 = requests.get(get_url2) |
| spl = feed2.text.split("href=") |
| for line2 in spl: |
| spl2 = line2.split(">")[0].strip('""') |
| if spl2.endswith(".png") or spl2.endswith(".gif") or spl2.endswith(".jpg"): |
| html_out+=f'<div class="img_class"><a href="{get_url2}{spl2}" target="_blank">{spl2}</a><br><img src={get_url2}{spl2}></div>' |
| html_out+="</div>" |
| return html_out |
|
|
| def make_animation_new(gif_box=[], fps=10, loop=True): |
| if gif_box: |
| gif_box.sort(reverse=False) |
| print("Making GIF...") |
| try: |
| frames = [] |
| for i,ea in enumerate(gif_box): |
| urllib.request.urlretrieve(ea,f'tmp{i}.png') |
| frames.append(f'tmp{i}.png') |
|
|
| uid=uuid.uuid4() |
| clip = ic.ImageSequenceClip(frames, fps=fps) |
|
|
| temp_gif_path = f"temp_{uid}.gif" |
| loop_val = 0 if loop else 1 |
| clip.write_gif(temp_gif_path, fps=fps, loop=loop_val) |
|
|
| with open(temp_gif_path, 'rb') as gif_file: |
| gif_bytes = gif_file.read() |
|
|
| gif_base64 = base64.b64encode(gif_bytes).decode('utf-8') |
| gif_data_url = f"data:image/gif;base64,{gif_base64}" |
|
|
| html_out=f"<style>{css}</style><div>" |
| html_out+=f'<div class="img_class"><img src="{gif_data_url}"></div>' |
| html_out+="</div>" |
| os.remove(temp_gif_path) |
| for frame_file in frames: |
| os.remove(frame_file) |
| return html_out |
|
|
| except Exception as e: |
| print(f"ERROR HAPPENED: {e}") |
| return f"<div>An error occurred: {e}</div>" |
| else: |
| return "<div>No images were provided to create an animation.</div>" |
|
|
|
|
| def make_html(inp_files): |
| html_out=f"<style>{css}</style><div class='img_box'>" |
| for ea in inp_files: |
| html_out+=f'<div class="img_class"><img src="file={ea}"></div>' |
| html_out+='</div>' |
| return html_out |
|
|
| def make_nasa_soho_videos(): |
| html_out=f"<style>{css}</style><div class='img_box_soho'>" |
| for ea in nasa_soho_mp4: |
| file_name=ea['source'] |
| html_out+=f''' |
| <video width="50%" height="320" controls> |
| <source src="{file_name}" type="video/mp4"> |
| Your browser does not support the video tag. |
| </video>''' |
| html_out+='</div>' |
| return html_out |
|
|
| def make_nasa_soho_images(inp_src: list): |
| html_out="" |
| for ea in inp_src: |
| file_name=ea['source'] |
| html_out+=f'<div class="img_class_soho"><img src="{file_name}"></div>' |
| return html_out |
|
|
| def make_nasa_soho_image_trigger(): |
| html_in=f"<style>{css}</style><div class='img_box_soho'>" |
| html_in+= make_nasa_soho_images(nasa_images) |
| html_in+= make_nasa_soho_images(sdo_aia_latest) |
| html_in+="</div>" |
| return html_in |
|
|
| def generate_sdo_urls(date1_str: str, date2_str: str) -> list[str]: |
| url_box = [] |
| base_url = "https://sdo.gsfc.nasa.gov/assets/img/browse" |
| try: |
| start_date = datetime.datetime.strptime(date1_str[:8], "%Y%m%d").date() |
| end_date = datetime.datetime.strptime(date2_str[:8], "%Y%m%d").date() |
| except ValueError: |
| return [] |
| if start_date > end_date: |
| return [] |
| current_date = start_date |
| while current_date <= end_date: |
| year_str = f"{current_date.year:04}" |
| month_str = f"{current_date.month:02}" |
| day_str = f"{current_date.day:02}" |
| out_url = f"{base_url}/{year_str}/{month_str}/{day_str}/" |
| url_box.append(out_url) |
| current_date += datetime.timedelta(days=1) |
| return url_box |
|
|
| def nasa_sdo_images(obj,size,date1,date2): |
| html_in=f"<style>{css}</style><div class='img_box_soho'>" |
| sdo_urls = generate_sdo_urls(date1, date2) |
|
|
| if not sdo_urls: |
| return "<div>Invalid date range or format. Please ensure the start date is not after the end date.</div>", [] |
|
|
| out_box=[] |
| start_day_str = date1[:8] |
| end_day_str = date2[:8] |
| start_time_str = date1[8:12] |
| end_time_str = date2[8:12] |
|
|
| for link in sdo_urls: |
| current_day_str = "".join(link.split('/')[-4:-1]) |
| is_first_day = (current_day_str == start_day_str) |
| is_last_day = (current_day_str == end_day_str) |
| |
| try: |
| feed1 = requests.get(link) |
| feed1.raise_for_status() |
| except requests.exceptions.RequestException as e: |
| print(f"Could not fetch {link}: {e}") |
| continue |
|
|
| if "All" in size: |
| size_list = sdo_size |
| else: |
| size_list = size |
| if "All" in obj: |
| obj_list = sdo_obj |
| else: |
| obj_list = obj |
|
|
| soup = bs4.BeautifulSoup(feed1.content, 'html.parser') |
| anchor_elements = soup.find_all('a') |
| |
| for element in anchor_elements: |
| href=element.get('href') |
| if href and href.endswith('.jpg'): |
| parts = href.split('_') |
| if len(parts) < 4: |
| continue |
| |
| image_time_str = parts[1] |
| image_size_str = parts[2] |
| image_obj_str = parts[3].split('.jpg')[0] |
|
|
| time_match = False |
| if is_first_day and is_last_day: |
| if start_time_str <= image_time_str <= end_time_str: |
| time_match = True |
| elif is_first_day: |
| if image_time_str >= start_time_str: |
| time_match = True |
| elif is_last_day: |
| if image_time_str <= end_time_str: |
| time_match = True |
| else: |
| time_match = True |
|
|
| if time_match: |
| if image_obj_str in obj_list and int(image_size_str) in size_list: |
| full_url = f'{link}{href}' |
| out_box.append(full_url) |
| html_in+=f'<div class="img_class_sdo"><a href="{full_url}" target="_blank">{href}</a><br><img src={full_url}></div>' |
| html_in += "</div>" |
| if not out_box: |
| html_in = "<div>No images found for the specified criteria.</div>" |
| return html_in, out_box |
|
|
|
|
| def get_concat_h_cut(in1, in2): |
| uid=uuid.uuid4() |
| im1=Image.open(in1) |
| im2=Image.open(in2) |
| dst = Image.new('RGB', (im1.width + im2.width, min(im1.height, im2.height))) |
| dst.paste(im1, (0, 0)) |
| dst.paste(im2, (im1.width, 0)) |
| dst.save(f"h_{uid}.jpg") |
| return f"h_{uid}.jpg" |
|
|
| def get_concat_v_cut(in1, in2, theme='dark'): |
| uid=uuid.uuid4() |
| im1=Image.open(in1) |
| im2=Image.open(in2) |
| if theme=='dark': |
| color=(31,41,55) |
| if theme=='light': |
| color=(255,255,255) |
| dst = Image.new('RGB', (min(im1.width, im2.width), im1.height + im2.height),color=color) |
| dst.paste(im1, (0, 0)) |
| dst.paste(im2, (0, im1.height)) |
| dst.save(f"v_{uid}.jpg") |
| return f"v_{uid}.jpg" |
|
|
| def nasa_sdo_composite(obj,size,date1,date2,ret_num): |
| html_in=f"<style>{css}</style><div class='img_box_soho'>" |
| in_year=f"{date2[0:4]}" |
| in_month=f"{date2[4:6]}" |
| in_day=f"{date2[6:8]}" |
| sdo_source_format = f"https://sdo.gsfc.nasa.gov/assets/img/browse/{in_year}/{in_month}/{in_day}/" |
| get_url=sdo_source_format |
| feed1 = requests.get(get_url) |
| if "All" in size: |
| size = sdo_size |
| if "All" in obj: |
| obj = sdo_obj |
| link_box=[] |
| soup = bs4.BeautifulSoup(feed1.content, 'html.parser') |
| anchor_elements = soup.find_all('a') |
| cnt=1 |
| max_cnt=ret_num |
| for element in anchor_elements: |
| href=element.get('href') |
| if href.endswith('.jpg'): |
| for o in obj: |
| for s in size: |
| ls=href.split("_") |
| if ls[1][0:4]>=date1[8:13]: |
| src_obj=ls[3].split('.jpg')[0] |
| if src_obj == o: |
| if int(ls[2]) == int(s): |
| link_box.append(href) |
| link_box.sort(reverse=True) |
| out_box=[] |
| for ea in link_box: |
| if cnt<=max_cnt: |
| out_link=f'{sdo_source_format}{ea}' |
| out_box.append(out_link) |
| cnt+=1 |
| html_in+=f'<div class="img_class_sdo"><a href="{sdo_source_format}{ea}" target="_blank">{ea}</a><br><img src={sdo_source_format}{ea}></div>' |
| html_in+="</div>" |
| return html_in, out_box |
|
|
| def run(): |
| out=make_tree() |
| im_html=get_images() |
| return im_html |
|
|
| def get_date(year1,month1,day1,hour1,minute1,year2,month2,day2,hour2,minute2): |
| try: |
| start_dt = datetime.datetime(int(year1), int(month1), int(day1), int(hour1), int(minute1)) |
| end_dt = datetime.datetime(int(year2), int(month2), int(day2), int(hour2), int(minute2)) |
| date1 = start_dt.strftime('%Y%m%d%H%M') |
| date2 = end_dt.strftime('%Y%m%d%H%M') |
| return date1, date2 |
| except ValueError as e: |
| print(f"Error creating date: {e}") |
| return None, None |
|
|
|
|
| def comp_combine(inp_ims: list,comp_col,comp_row,resize=False): |
| im_box=[] |
| v_box=[] |
| rows=comp_row |
| cols=comp_col |
| if not type(inp_ims)==type([]): |
| try: |
| inp_ims=eval(inp_ims) |
| except: |
| return None |
| if not inp_ims: |
| return None |
|
|
| for i,im in enumerate(inp_ims): |
| urllib.request.urlretrieve(im, f"tmp-{i}.jpg") |
| if resize: |
| pil_im = Image.open(f'tmp-{i}.jpg') |
| pil_im = pil_im.resize((int(resize[0]),int(resize[1])),resample=Image.Resampling.LANCZOS).convert('RGB') |
| pil_im.save(f'tmp-{i}.jpg') |
| im_box.append(f"tmp-{i}.jpg") |
| im_cnt=len(im_box) |
| cnt=1 |
| for rr in range(rows): |
| if cnt > im_cnt: break |
| col_start=[im_box[cnt-1]] |
| for cc in range(cols-1): |
| try: |
| if cnt >= im_cnt: break |
| col_out=get_concat_h_cut(col_start[0],im_box[cnt]) |
| col_start[0]=col_out |
| cnt+=1 |
| except Exception as e: |
| pass |
| v_box.append(col_start[0]) |
| if not v_box: |
| return None |
|
|
| v_cnt=1 |
| v_box_cnt=len(v_box) |
| v_start=[v_box[0]] |
| for vv in range(v_box_cnt-1): |
| v_out=get_concat_v_cut(v_start[0],v_box[v_cnt]) |
| v_start[0]=v_out |
| v_cnt+=1 |
| return v_start[0] |
|
|
| def comp_1(comp_list=comp_list,col=3,row=4,resize=[640,450]): |
| outp=comp_combine(comp_list,col,row,resize) |
| return (outp) |
|
|
| def get_time(): |
| now = datetime.datetime.utcnow() |
| datetimestamp_str = now.strftime('%Y-%m-%d %H:%M:%S') |
| html_out = f"""<div style='font-size:xxx-large;'>Current: {datetimestamp_str} UTC</div>""" |
| return (gr.update(value=html_out), now.year, now.month, now.day, now.hour, now.minute, |
| now.year, now.month, now.day, now.hour, now.minute) |
|
|
| with gr.Blocks() as app: |
| url_list=gr.State([]) |
| now = datetime.datetime.utcnow() |
| |
| time_html=gr.HTML() |
| with gr.Tab("NOAA"): |
| with gr.Tab("Compilation"): |
| first_comp_btn=gr.Button("Load") |
| first_comp_img=gr.Image() |
| with gr.Tab("Images"): |
| first_btn=gr.Button("Load") |
| html_im=gr.HTML() |
| with gr.Tab("Raw"): |
| with gr.Row(): |
| drop1=gr.Dropdown() |
| drop2=gr.Dropdown() |
| drop3=gr.Dropdown() |
| drop4=gr.Dropdown() |
| with gr.Row(): |
| drop5=gr.Dropdown() |
| drop6=gr.Dropdown() |
| drop7=gr.Dropdown() |
| drop8=gr.Dropdown() |
| load_btn=gr.Button("Load") |
| html_raw=gr.HTML() |
| links=gr.JSON() |
| with gr.Tab("NASA"): |
| with gr.Tab("SDO Images"): |
| with gr.Row(): |
| gr.Markdown("<h5 style='font-size:xx-large;'>From:") |
| year1=gr.Number(label="Year",minimum=2010,maximum=now.year,precision=0,value=now.year,min_width=10) |
| month1=gr.Number(label="Month",minimum=1,maximum=12,precision=0,value=now.month,min_width=10) |
| day1=gr.Number(label="Day",minimum=1,maximum=31,precision=0,value=now.day,min_width=10) |
| hour1=gr.Number(label="Hour",minimum=0,maximum=23,precision=0,value=now.hour,min_width=10) |
| minute1=gr.Number(label="Minute",minimum=0,maximum=59,precision=0,value=now.minute,min_width=10) |
| gr.Markdown("<h5 style='font-size:xx-large;'>To:") |
| year2=gr.Number(label="Year",minimum=2010,maximum=now.year,precision=0,value=now.year,min_width=10) |
| month2=gr.Number(label="Month",minimum=1,maximum=12,precision=0,value=now.month,min_width=10) |
| day2=gr.Number(label="Day",minimum=1,maximum=31,precision=0,value=now.day,min_width=10) |
| hour2=gr.Number(label="Hour",minimum=0,maximum=23,precision=0,value=now.hour,min_width=10) |
| minute2=gr.Number(label="Minute",minimum=0,maximum=59,precision=0,value=now.minute,min_width=10) |
|
|
| with gr.Row(): |
| sdo_drop1=gr.Dropdown(label="Instrument", multiselect=True, choices=["All"]+sdo_obj, value="0094") |
| sdo_drop2=gr.Dropdown(label="Size", multiselect=True, choices=["All"]+sdo_size,value=512) |
|
|
| with gr.Tab("Composite"): |
| with gr.Row(): |
| comp_num=gr.Number(label="Return",precision=0,value=4,interactive=True) |
| comp_col=gr.Number(label="Columns",precision=0,value=2,interactive=True) |
| comp_row=gr.Number(label="Rows",precision=0,value=2,interactive=True) |
| with gr.Row(): |
| comp_combine_btn=gr.Button("Combine") |
| sdo_comp_btn=gr.Button("Load") |
| img_out=gr.Image() |
| comp_combine_html=gr.HTML() |
| sdo_comp_html=gr.HTML() |
| image_comp_list=gr.Textbox(visible=True) |
| with gr.Tab("Images"): |
| sdo_btn=gr.Button("Load") |
| with gr.Row(): |
| fps_slider = gr.Slider(minimum=1, maximum=60, value=10, step=1, label="Animation FPS") |
| loop_checkbox = gr.Checkbox(label="Loop Animation", value=True) |
| sdo_gif=gr.Button("Make GIF") |
| sdo_gif_html=gr.HTML() |
| sdo_gif.click(make_animation_new,[url_list, fps_slider, loop_checkbox],sdo_gif_html) |
| sdo_html=gr.HTML() |
|
|
| date1=gr.Textbox(visible=False) |
| date2=gr.Textbox(visible=False) |
| with gr.Tab("SOHO Images"): |
| soho_btn=gr.Button("Load") |
| html_nasa=gr.HTML() |
| with gr.Tab("SOHO Video"): |
| soho_vid_btn=gr.Button("Load") |
| html_vid_nasa=gr.HTML() |
|
|
| app.load(get_time,None,[time_html,year1,month1,day1,hour1,minute1,year2,month2,day2,hour2,minute2]).then(make_tree,None,drop1) |
|
|
| first_comp_btn.click(comp_1,None,first_comp_img) |
| comp_combine_btn.click(comp_combine,[image_comp_list,comp_col,comp_row],img_out) |
| sdo_comp_btn.click(get_date,[year1,month1,day1,hour1,minute1,year2,month2,day2,hour2,minute2],[date1,date2]).then(nasa_sdo_composite,[sdo_drop1,sdo_drop2,date1,date2,comp_num],[sdo_comp_html,image_comp_list]) |
|
|
| sdo_btn.click(get_date,[year1,month1,day1,hour1,minute1,year2,month2,day2,hour2,minute2],[date1,date2]).then(nasa_sdo_images,[sdo_drop1,sdo_drop2,date1,date2],[sdo_html,url_list]) |
| soho_btn.click(make_nasa_soho_image_trigger,None,html_nasa) |
| soho_vid_btn.click(make_nasa_soho_videos,None,html_vid_nasa) |
| load_btn.click(load_json,[drop1,drop2,drop3,drop4,drop5,drop6,drop7,drop8],[html_raw,links]) |
|
|
| drop1.change(make_tree,drop1,[drop2]) |
| drop2.change(make_tree,[drop1,drop2],[drop3]) |
| drop3.change(make_tree,[drop1,drop2,drop3],[drop4]) |
| drop4.change(make_tree,[drop1,drop2,drop3,drop4],[drop5]) |
| drop5.change(make_tree,[drop1,drop2,drop3,drop4,drop5],[drop6]) |
| drop6.change(make_tree,[drop1,drop2,drop3,drop4,drop5,drop6],[drop7]) |
| drop7.change(make_tree,[drop1,drop2,drop3,drop4,drop5,drop6,drop7],[drop8]) |
|
|
| first_btn.click(run,None,[html_im]) |
|
|
| app.queue(default_concurrency_limit=10).launch() |